Fastlane Generator Tool Design
-
Status: Approved (2026-09-22) by: @clsource
Problem
The release automation workflow (ADR 0000005)
defines release metadata in store.jsonc and merges it into
build/<platform>/config/store.jsonc, but nothing generates the standard Ruby
Fastlane files developers run (fastlane release). The merge step ends the
pipeline, leaving the developer to hand-write Fastfiles, Appfiles, Deliverfiles
and Supplyfiles every release.
Decision
A new Go tool tools/fastlane, run after appconf as the final pipeline step
(step order: icon, jsonc, bundler, plugins, core, link, appconf, fastlane).
-
Reads the merged
build/<platform>/config/store.jsonc(JSONC stripped, thenencoding/json). -
Generates standard Fastlane files into
build/<platform>/fastlane/. Each lane passes the full configured parameter block (supply/deliver/gym/match/gradle) as keyword arguments, so configuration values map directly to Fastlane parameters. -
Mirrors the generated directory into
build/<platform>/sources/fastlane/(byte-stable copy that removes stale files), so lanes run from the assembled project root:cd build/android/sources && fastlane release. -
Repo-relative path values (
json_key_file,app_rating_config_path) are resolved against the working directory; when the file exists it is copied next to theFastfileand the emitted value is its basename. When it is missing the value is emitted verbatim and a warning is printed to stderr, so the default configs (which reference key files that do not exist yet) keep working. -
Output is deterministic: fixed key order per block, no timestamps, reruns are byte-stable.
Changes
-
New tool
tools/fastlanefollowing the Go tool standards (src/main.go,src/main_test.go,src/go.mod,src/Taskfile.yml,src/VERSION,src/.gitignore,dist/binaries,README.md). -
Android output:
Appfile,Supplyfile,Fastfile,metadata/android/<locale>/(title.txt,short_description.txt,full_description.txt,video.txt,changelogs/default.txt). -
Xcode output:
Appfile,Deliverfile,Matchfile,Fastfile,metadata/<locale>/(name.txt,subtitle.txt,promotional_text.txt,description.txt,keywords.txt,privacy_url.txt,support_url.txt,marketing_url.txt,release_notes.txt). -
gengains thefastlanestep;Taskfile.ymlandAGENTS.mdgaintask fastlane(fl) andtask fastlane.build(flb). -
Docs: expand
antora/modules/tools/pages/fastlane.adoc, uncomment its nav entry, updategen.adoc,tools/README.mdandCHANGELOG.md. -
Tests cover Ruby value formatting, both renderers, the missing-path-file fallback, idempotency and a
run()integration test. -
sources/xcode/Taskfile.ymlandsources/android/Taskfile.ymlgainfastlane.run(fr) andfastlane.run.release(frr), which thecorestep copies intobuild/<platform>/sources/, so lanes run withtask fastlane.run.releasefrom the assembled project.