I lead a team of ~30ish software engineers (70 if you include SCADA dev, we do a lot of Software and MES in Ignition) who all develop almost full time in Ignition at this point, and so we need to build at a bit higher scales than most.
A few of the tools we have used to do this are:
Git: We version control almost every project we do. There's not really an easier way to share code between developers and make sure we're following our own best practices
Github: We manager over 100+ projects and repositories in Github, its the easiest way for us to store and manage code, review pull requests, execute automated pipelines, etc.
Github Actions: We use Github Actions for automating deployment pipelines, linting, automated testing, packaging up exchange formatted resources, etc.
VS Code: Our teams almost 100% of the time have open VS Code and at least 1 Ignition designer, and VS Code is probably open more than the designer overall. For script editing, terminals for git commands or helper scripts, and reviewing changes in JSON files we have essentially turned VS Code into a pseudo-replacement designer for most things scripting.
Flint for Ignition: This is a custom developed that I made to allow for better use of VS Code to manage multiple Igntition projects. It does things like add auto-complete for project scripts, visualize them in a more standard format, and can integrate with a few modules we've made for triggering project script updates and designer updates from within VS Code.
Tag CICD Module: A developer side module we made for enabling better version control for tags by exposing the system.tag.getConfiguration
and system.tag.configure
functions through REST apis
Project Scan Endpoint Module: A developer side module we made for triggering project scans and designer updates through REST endpoints, so that we can have VS Code trigger a designer update on save instead of waiting for and managing project scans with the native polling
Docker: We are deep in Docker at this point. Engineers that need to run 5-10 gateways on just one project, that may be working on multiple projects at a time need a really scalable way to manage Ignition gateways (quick math, 30 engineers * 3 projects * 5-10 gateways per projects and we're looking at managing ~300-600 ignition gateways all at one time... per day. This is just untenable without something like docker)
Developer Docker Image: We have a developer docker image that we use for doing some fancy things with symlinks to make it easier to version control code across multiple gateways, without needing to have really annoying .gitignore
files.
Docker Architecture Templates: We use repository templates extensively for starting up new projects. We have much more advanced versions of this internally, I want to make these public, but haven't gotten a chance to yet.
Traefik Proxy Container: We actually leverage an internal traefik container that pre-loads in some certs so that our devs can use SSL without needing to get custom certs for *.localtest.me
, however this is a public one we did a while back.
Figma for Design: We use Figma for all of our UI/UX Design
Tailwind CSS: We use Tailwind for most of our CSS at this point, at first it felt like a bit of a stretch because it's complicated. However once you get into it, being able to do things like md:hidden
and just have things automagically get hidden on larger screens is insanely useful. (This also makes CSS easier when porting from Figma). We also manage an internal container that acts as a tailwind compiler, so that we can only compile what we are using, instead of the full tailwind stylesheet. Unfortunately this ones not public, because it includes some special sauce for custom themes we leverage pretty heavily.
Ignition Linter: A linter that can be used in a GitHub action that was developed by a good buddy of mine. Good for starting to enforce clean code practices inside of Ignition itself.
Gateway Utilities Project: We manage a project for a bunch of standard utilities, scripts, views for specific functions. We have some more advanced versions internally I'd like to update to be public, but for now this one is available.
Perspective Automation Tools: This is a git repo managed by the IA QA team, we use it for automated tests leveraging selenium for Perspective pages. We used to maintain our own, but then they released theirs and its better!
A few ideas we have not made yet, but want to:
- A Figma plugin that can export Figma frames to Perspective Views
- Updates to Flint (the VS Code extension) to add a bunch more features
- K8s template projects for Ignition
Edit:
Paul beat me to it on my own thing! I was just in the middle of typing this out. lol
Edit #2: Added some more stuff that I didnt think about. Also realizing I should probably actually get on it about making more of our public stuff updated... lol