There are a million ways to do CI. My goal is to keep it as simple as possible. Concepts:
- My target projects include multi-platform C++ applications, Firefox addons, cross-platform desktop apps, mobile apps, and web apps with lots of JavaScript and JavaScript libraries.
- I want to use a simple-to-use very-capable cross-platform scripting language. I’ve concluded that I will use JavaScript via Node.js. It is async and portable from the day it was born. Installing a node.js module for scripts means they are available from any path on any platform’s command line.
- For CI tasks, I will avoid dependencies on anything else. The core Node.js API is very capable. Modules are available if needed (eg the amazing aws-sdk) but will be avoided whenever possible.
- I need intelligent placement of CI windows (eg a popup shell for build-on-save). My Ubuntu i3 window manager is capable of this, as is Autohotkeys under Windows. These auto-placed windows will always run cross-platform node scripts.
- If you want to use Powershell, for the love of all that’s holy, make sure you fix its terrible default of hiding debug output with:
$global:DebugPreference = "Continue"
- Goals:
- on code save: automatically build
- on code commit: automatically build, do any custom build steps, run any unit tests, run any end-to-end tests, and report results dynamically
- on app production release: compile artifacts, assist in automatic versioning
See the wiki for details.