flutter_buildkit 0.2.1
flutter_buildkit: ^0.2.1 copied to clipboard
Interactive console app that builds Flutter APK, AAB and IPA files with flavors, keeps a ledger of every build and traces crashes from symbols.
0.2.1 - 2026-10-06 #
- Menus no longer repeat their heading on every arrow key: list lines are cut to the terminal width so redraws stay in place.
- build_runner now runs as
dart run build_runner build(flutter pub runis deprecated), and--delete-conflicting-outputsis no longer a default (newer build_runner ignores it).pre_build.build_runner_argsstill passes anything you set.
0.2.0 #
Safety release. Behavior changes are marked Changed.
- Delete is hardened. A build folder must lie strictly inside the ledger's
folder after resolving symlinks, must not contain another build, and must
hold a
build_info.jsonwith the build's id; released builds' artifact paths are checked the same way.BuildManager.deletegaineddryRun. - Failed builds are recorded. The folder is kept with a new
build.log(the output offlutter build), and the ledger gets a row with statusfailed, the exit code and the command line. Failed rows cannot be published, uploaded or have symbols sent.BuildRecordgainedfailure,commandandisFailed;BuildStatusgainedfailed. - Every build now stores the command line it ran (
command). - Ctrl-C during a build stops
flutterand removes the unfinished folder (InterruptGuard). - The build id is chosen before the build, so a duplicate id can no longer reject a finished build.
- Changed:
play.default_release_statusnow defaults todraft(it wascompleted). The menu pre-selects draft, shows a summary before uploading, and the production track needsproductiontyped to confirm. Setdefault_release_status: completedto keep the old behavior. - Changed:
ProcessRunner.streamhas a new optionallogFile; subclasses that override it must accept it. With a log file the output is copied to the console and the file, soflutterno longer sees a terminal for that run. - CSV and TSV exports neutralize cells that start with
=,+,-,@, a tab or a carriage return. They also gain the columnstarget,command,failure_exit_codeandplay_edit_idat the end. - Changed:
configshowsset (N chars)for secrets instead of the first four characters. - The menu warns when a delete removes the symbols of a build that was once published and then unmarked.
Command line and CI:
- New non-interactive commands:
build,publish,mark,symbols,traceanddelete(with--dry-run/--yes). They never prompt, accept--jsonand return stable exit codes (ExitCodes): 69 upload failed, 70 build failed, 71 trace failed, 72 delete failed. The same code is available asCliin the library. Seedoc/ci.md. listandexportgained--flavor,--status,--sinceand--limit;list --jsonprints the rows; the table has a Status column.list,export,markanddeletework outside a Flutter project when--ledgeris given.exportcreates missing parent folders.- Changed:
initexits 73 (was 1) when the config file exists. - Output files are found without clocks: the output folders are snapshotted
before
flutter build, theBuilt <path>lines Flutter prints are used first, and otherwise the files that are new or changed are taken. A flavor must match a whole part of the file name (prono longer matchesapp-production-release.apk). When several candidates are left and the build is not split per ABI the build fails with the list instead of guessing. - GitHub Actions workflow: format, analyze and tests on Linux, macOS and
Windows, plus a
pub publish --dry-run.
Ledger, Google Play and library:
- The ledger takes a lock file around every change and re-reads the file
first, so two processes no longer overwrite each other's rows. A bad ledger
file blocks a write instead of being replaced. The first save of each day
keeps a copy in
.history/(seven days) next to the existing.bak.LedgergainedlockWaitandhighestVersionCode. - Google Play: the track is read before it is changed. A staged or halted
rollout is no longer dropped silently: the upload throws
PlayTrackInUseExceptionunlessreplaceExisting(--replace-existing) is set; the menu asks.PlayPublishertakes anhttpClient, which is also what makes it testable withpackage:http/testing.dart(new direct dependencyhttp). - Changed: the library no longer exports the menu (
App), the settings and launch.json screens, orWindowsConsole.CliandExitCodesare public. - Config:
flutter_buildkit.local.yamlis merged over the shared config. The shared file is now meant to be committed; auto-configuration offers to ignore the local overlay instead of the main file. Thefluttercommand and string settings split on whitespace but honor quotes, so paths with spaces work (splitCommandLine). - A warning is shown when the version code is not higher than one already in
the ledger for the app (menu and
build). - Releases carry more provenance.
BuildRecordgainedsigning(certificate SHA-256 and subject, read withapksignerorkeytool; a warning when a release is debug-signed or differs from earlier releases of the package),buildIds(ELF build ids of the Dart symbols) andenvironment(OS, host, Flutter channel and revision, Dart SDK, engine, hash of the dart-define file).trace autoand the menu match a crash'sbuild_id(or version) to a build and warn on a mismatch. - Google Play pre-flight:
publishstops before uploading when the version code is already on Play (any track) or the AAB is debug-signed.PlayPublisher.checkAccessbacksdoctor --online. - New commands:
doctor(tools, Play key, disk, output folder; exit 75),verify(ledger vs disk: files, hashes, symbols, orphans; exit 76) andprune(old logs, failed builds, uploaded symbols perretention:).list/exportgot--bom; the menu's CSV export writes a BOM for Excel. - Changed: an upload to the
internaltrack no longer makes a build immortal. What keeps symbols and the row on delete isdelete_policy.retain_on(defaultpublished, alpha, beta, production;playrestores "any upload"). Deleting a build that was published once and unmarked needs its id typed (menu) or--force. - Changed: the ledger JSON stores
publishedAt,playandsymbolUploadsat the top level;statusis derived and ignored on load. Files from 0.1.x are still read, and a file saved by 0.2 keeps older tools working only for the derived fields. - Changed: a config that names executables in the shared file
(
flutter,*.cli,android.*) must be trusted: the menu asks once, the non-interactive commands exit 78 until--trust-config/FBK_TRUST_CONFIG=1. Warnings for a Sentry token in the YAML and an un-ignored Play key inside the project.AppConfiggainedsharedCommands,warnings,retainOn,logRetentionDaysandsymbolsKeepLast; newConfigTrust. - Mapping and native symbol folders are found by listing
outputs/mapping/, so multi-dimension flavors (devFreeRelease) work. - Docs: Crashlytics and the R8 mapping, Firebase auth in CI, trusting a config, provenance, verify and prune.
- Docs: README (install globally,
dart run flutter_buildkit:fbk), newdoc/ci.mdanddoc/security.md, config overlay and ledger lock.
0.1.2 #
- Added an
example/folder with runnable examples by topic (library API, configuration, layouts and naming, ledger and exports, symbols and traces, VS Code and auto-configuration, CLI and prompts) andexample/README.md. - README rewritten: shorter, with a table of contents; the full reference moved
to
doc/configuration.md,doc/project-setup.mdanddoc/builds-and-ledger.md. - Documented the library and
ConsoleAbort, so every public symbol has docs. - Fix: the command line now exits with its error code (64 usage, 66 no project, 74 ledger, 78 config); it always exited 0 before.
- Docs:
output_dirdoes not expand~; use an absolute or relative path.
0.1.1 #
- README: install from pub.dev instead of git.
0.1.0 #
- First release.
- Interactive menu that builds APK, AAB and IPA files for any mix of flavors,
entry points and modes, with optional
flutter clean,build_runnerandflutter gen-l10nfirst. - JSON build ledger with status, condition and history per build; CSV and TSV export.
- Organised output folders and file names, configurable with layout presets or templates.
- Stores Dart, native and R8 mapping symbols; uploads them to Crashlytics and Sentry; traces crashes from the stored symbols.
- Google Play upload through the API, or marking a build uploaded or published in the ledger.
- Settings editor, auto-configuration from the project, and VS Code
launch.jsongeneration.