- Platforms
- iOS, Android, macOS, Windows, Linux and web. Steps run in bash, or
pwsh, powershell and cmd on Windows ovens. - Isolation
- macOS jobs run in a Tart VM cloned from an Xcode image and deleted afterwards. Linux jobs run in a container. Each step runs in its own process group with a timeout; cancelling a job kills everything it started.
- Xcode
- Pick a version per workflow with
xcode: "26.4" or latest. Ovens pull the matching image and keep a provisioned copy, so later jobs start from it. - Code signing
- Apple certificates and profiles from your App Store Connect API key, Android keystores stored per project.
verify_signing fails a job whose output is signed with the wrong key or a debug key. - Expiry alerts
- Certificates, provisioning profiles and keystores. Slack warnings 30, 7 and 1 day before they expire.
- Secrets
- Encrypted at rest with AES-256-GCM, passed to steps as environment variables, masked in logs.
- Triggers
- Pushes and pull requests from GitHub, GitLab and Bitbucket; cron schedules; the API. Results are posted back as commit statuses.
- Caches
- Gradle, CocoaPods, SwiftPM, npm, yarn, pnpm and pub are cached per project. Jobs prefer the oven that already has the cache.
- Deliveries
- TestFlight, Google Play, Firebase App Distribution, S3 and R2, SFTP, GitHub Releases and webhooks, filtered by workflow and branch.
- Install links
- Pull requests get a comment with a QR code and install link for the Android build and an ad hoc iOS build.
- Provenance
- SLSA provenance for every artifact, signed as a DSSE envelope with Ed25519.
- Failure analysis
- A failed job can be explained on request: the failing step, the likely cause and a suggested change to the recipe.
- Interfaces
- REST API with personal and project-scoped tokens, the
bakery CLI (macOS, Linux, Windows), and an MCP server at /api/mcp for coding agents.