good_cli 0.2.0
good_cli: ^0.2.0 copied to clipboard
The build tool for the good game engine: project scaffolding, asset compaction and encrypted packing, codegen for asset bindings, and per- platform build orchestration.
0.2.0 #
Six changes stop a build that worked at 0.1.1. Each one turns something that used to fail quietly, or not at all, into something that fails while you are looking at it.
Breaking #
--dimension=d2|d3ongood createis now--2dand--3d. The old option is gone, and a command line still using it exits 64.d2andd3existed because a Dart enum value cannot begin with a digit, which was never a reason for you to type them.good buildexits 70 when a step fails. It printed the error and exited 0, so a CI job wrapped around a broken build passed, andgood build windows && uploaduploaded. Failure now has a code everywhere: 64 for a malformed command line, 65 for something a command read, 70 for work that could not finish.good generatefails on an asset directory the pubspec does not list.flutter: assets:entries are not recursive, so a file inassets/ui/was bundled nowhere and got no enum value, and nothing said so. The error names the exact line to add.good generatefails when two components declare the same field name. Both columns were allocated and one of them was unreachable, so a row spent 128 bits where one mixin uses 64. Rename one of the fields.good generatefails on a component mixin whosedescribeType,describeAssetsordescribeStructoverride drops itssupercall. A mixin like that contributed no columns and no query bit, silently. Chain the call.good buildrefuses to strip an asset compaction cannot rebuild. A file you placed inassets/yourself is packed like any other, and removing the loose copies would delete the only one that exists. Move those files intoassets_src/so compaction owns them, or setstrip-originals: trueundergood: assets:to let the build delete them. At 0.1.1 they shipped twice, once inside the chunk and once in plaintext beside it.
Added #
good create --3dscaffolds a project that builds and runs. It used to printgoo3d does not exist yetand stop. What it writes is whatgoo3dhas — aTransform3Dprefab, a camera, the composition system and a system that turns the entity once per tick — and each file says in its comments what is missing and which issue brings it.strip-originalsundergood: assets:, covering the refusal above.good generatereports an unbundled asset with exit 65, so a build script can tell a bad pubspec from a command it typed wrong.
Fixed #
good createwrites its ownlib/main.dart.flutter createruns first and writes a counter app, and the scaffolder skipped every file that already existed, so a new project ran Flutter's demo and the log saidKept existing lib/main.dart. A project you reach through--no-flutter-createis still never overwritten.- The scaffolded
test/widget_test.dartcompiles. It namedMyApp, which stops existing the momentmain.dartis the good one, soflutter analyzefailed on a project one minute old. It now builds the real app and waits for the game to start. - Re-running
good create --no-flutter-createno longer breaks the pubspec. The check for "already added" matched the literal line it had written, so a constraint you had pinned, widened or moved under a comment read as absent and the command appended a secondgoo2d:and a secondassets:. A duplicate mapping key is not a bad merge to clean up; everyfluttercommand refuses to read the file at all. - The compaction journal moved to
.dart_tool/good/compact.json. It sat in the asset directory, whichflutter: assets:lists, and flutter_tools bundles dotfiles like anything else — so every release carried the name and SHA-256 of every source file, in plaintext beside the encrypted chunks. A journal at the old path is picked up once so nothing re-encodes, then deleted. - A scaffolded project's engine constraint is
^0.1.0. It was^0.0.1, which has admitted no published version since 0.1.0, so a new project failedflutter pub geton any machine without a path override.
0.1.1 #
Documentation only. No code changes.
The README now shows the actual commands, and no longer calls the package a
placeholder or advertises good codegen and good run, which do not exist.
0.1.0 #
First published release. The good command is implemented and verified end to
end, not scaffolded:
good create— scaffolds a project that compiles and runs.good generate— writes asset bindings (e.g. a populatedTexturesenum) by scanning the project withpackage:analyzer.good assets compact— one canonical format per asset kind, via ffmpeg, which it will download on demand.good assets pack— scene-grouped chunks, compressed then encrypted (AES-256-GCM), plus the mapping the runtime loads.good build windows|linux|android|ios— runs the pipeline and ships each asset exactly once.
Known rough edges are listed in the documentation's implementation-status page
instead of hidden here; the notable ones are that good create keeps
Flutter's own main.dart, and that re-running it after editing the pubspec can
duplicate keys.
Not here yet: struct-layout codegen (hoisting the runtime DataDescriptor
algorithm to build time), good build macos, and good run.
0.0.1 #
- Package scaffolded. Never published.