Introducing Macige: CI workflow generator for mobile app development
Community

Introducing Macige: CI workflow generator for mobile app development

Writing CI server build workflows for mobile apps is cumbersome and time consuming. Macige is an open source CI workflow generator, with a set of popular customizations used in app development.

When setting up Tramline to run your mobile releases, one of the first things that you need are workflows in your CI server that can create the builds you use in the release cycle. Writing these workflows can be annoying since each CI system has different ways of configuring jobs, storing files, caching, etc.

For mobile apps, setting up the official toolchain involves a lot of moving parts especially when creating signed builds that can be uploaded to the App Store or Play Store. If you're using cross-platform frameworks like Flutter or React Native, the setup can be even more time consuming.

So a few months ago, we started putting something together to improve the status quo. We're calling it Macige, which is an acronym for “mobile app CI workflow generator” because why not? 

Macige is a set of CI workflow templates which can be customized using various options. You don’t need to sign in anywhere or make a new account: simply generate a workflow with your preferences, and copy paste it into your project!

Here’s what Macige already has:

  • GitHub Actions workflows for native Android, Flutter, and React Native apps
  • Support for creating debug builds and signed release builds, including instructions on how to store signing secrets safely
  • Support for caching build files to reduce app build time
  • Support for getting app versioning information from CI arguments

What next? 

Here’s what we're planning to add in the near future:

  • iOS workflows for GitHub Actions
  • Support for GitLab CI
  • Support for Bitrise
  • Support for Codemagic
  • Write files into your code repo or CI, instead of copying files manually

Macige is open source software under the MIT license, and we'd love to hear your suggestions. Have a look at our issue queue on GitHub, or make a new one if you have something else in mind. Or come join the party and send us a pull request!

A note on the internals

Macige is built using Yew, a Rust-based web framework. It follows a similar architecture to React/Elm, but you can avoid writing JavaScript or adjacent languages.

One of the project's future goals is to guide users through creating CI workflows — either through a CLI or a web service — rather than simply being a textual reference. The handling of workflow templates (via askama) should be easily portable to other settings.

This is one of the benefits of writing in Rust + Wasm — you can interact with the DOM, write powerful server-side-like templates, and reference client-side JavaScript all in one.