New Bazel CIQ build system

I've just published the first release of a CIQ build system based on Bazel (the open-source version of Google's build system).

Initially it works only on macOS; Windows and Linux support will come in time.

The inspiration for it came from the challenges I face while attempting to build apps in a scalable manner. I wanted to be able to reliably and flexibly generate .prg and .iq files for apps that shared source and resource files, as well as automate tasks like device-specific image scaling. I found the simulator execution via the VS Code extension was flaky, so there are tools for hot-reloading to the simulator for both interactive tests and unit testing. Also, and maybe this is macOS specific, but I was frustrated with how cumbersome file uploads/downloads to physical devices were, so I have tooling to help upload .prg & settings files, and help download logs.

The following features are currently available:

  • Project Scaffolding: Automatically generate `manifest.xml` and `jungle` files based on your build targets.
  • Resource Scaling: Automatically scale drawable resources for different device resolutions and icon sizes.
  • Device Builds: Build `.prg` application files for specific devices with type checking and optimization options.
  • Simulation: Launch your application in the Connect IQ Simulator directly from the command line (optionally with hot-reload).
  • Testing: Run unit tests in the simulator (optionally with hot-reload).
  • Device Deployment: Upload applications to physical Garmin devices via MTP (Media Transfer Protocol).
  • Log Retrieval: Fetch debug logs from physical devices.
  • Release Packaging: Export `.iq` files for submission to the Connect IQ Store.
  • Multi-Device Management: Use macros to generate build, test, and simulation targets for multiple devices at once.

The following features are future endeavours:

  • Add image scaling distinction between simulator and physical devices.
  • Add bmfont generation with scaling and dilation support.
  • Add barrel support.
  • Add animations support.
  • Add physical device .SET setting file configurator tool.
  • Add CIQ crash log cat tool with PC (program counter) mapper.
  • Explore simulator automation and screenshot regression testing.
  • Explore possibilities for sandboxed SDK installations.
  • Explore possibilities for app store publication support.

It's MIT licensed, and contributions are welcome!