shorebird_ci 0.2.4
shorebird_ci: ^0.2.4 copied to clipboard
CI tooling for Dart and Flutter monorepos. Generates GitHub Actions workflows, resolves affected packages via dependency graphs, and verifies path filters stay in sync.
0.2.4 #
verifynow enforces the--requiredaggregator'sneeds:list. Name-based detection: if a workflow has a top-level job namedrequired, every other top-level job must appear in itsneeds:, and every entry inneeds:must match a real top-level job in the same file. Arequired:key w/ no map body is also reported as malformed. Closes three silent-failure modes: a hand-edited workflow could leave a job out ofrequired.needsand have its status silently ignored by the merge gate, a typo'dneeds:entry could go unnoticed until GHA rejected it at runtime, or a bodilessrequired:could pass verify while doing nothing at runtime.generate --requiredreserves therequiredjob name and refuses to generate when a package slug would collide. Prevents a duplicate YAML key from silently overwriting the aggregator job. Only fires for--style static(dynamic mode keys jobs bysetup/dart_ci/flutter_ci/cspell, so a package namedrequiredcan't collide there). Skip the flag and any package slug is fine.- Bad CLI args now print a usage message and exit 64 instead of dumping a Dart stack trace. Same as the convention used by other args-based tools.
verifycommand description and--requiredflag help text updated to cover the new aggregator-consistency checks and the reserved-name contract.--requiredhelp also rewraps cleanly at the col-30 boundary.
0.2.3 #
- New
--requiredflag ongenerate. When set, the generated workflow gets an aggregatorrequiredjob that depends on every other job and usesif: ${{ always() }}so it runs even when sub-jobs are skipped. The job fails only if any dependency reportsfailureorcancelled, so it's safe to use as the single required check in branch protection: per-package jobs that get skipped because no paths-filter output matched are treated as a pass. Wired into both--style staticand--style dynamic. Skipped by default, so existing generated workflows are unaffected.
0.2.2 #
- Generated Dart workflows now emit
dart analyze --fatal-warnings .explicitly. The SDK already defaults--fatal-warningsto on, so this is behavior-preserving today, but the explicit form documents intent and survives any future flip in the SDK default. Flutter workflows are unchanged:flutter analyzedefaults--fatal-warningsto on with no CLI flag. - New
--codecov-token-secret <NAME>option ongenerate. When set, the static orchestrator emitssecrets: inheriton each reusable workflow call, and the codecov-action step in the reusable workflows receivestoken: ${{ secrets.<NAME> }}. The dynamic style threads the sametoken:into its single codecov-action step. When unset (the default), no token plumbing is emitted, matching prior behavior. Private repos that need a token to upload coverage should pass--codecov-token-secret CODECOV_TOKEN(or the secret name of their choice).
0.2.1 #
- Static main workflow YAML map keys default to each package's
name:and fall back to<parent_dir>_<package_name>only when two or more packages share a name. Avoids prefixing in the common case while still handling duplicate-name:repos. Thepackage_name:input passed to the reusable workflow keeps the actual package name for codecov flag display. - Static reusable workflows now gate the test and codecov-upload steps on a new
has_unit_testsinput. Packages without atest/directory no longer attempt to rundart test/flutter testor upload coverage. The input defaults totruefor back-compat with workflows that don't pass it.
0.2.0 #
- Generated dynamic workflow now pins
fetch-depth: 0on the setup-job checkout. Without it,affected_packagesfails on every PR because the default shallow checkout doesn't includeorigin/main. The static main workflow gets the same fix so dorny/paths-filter can diff on push events. - Generated workflow now includes a
workflow_dispatch:trigger and bypasses the affected-packages diff when triggered manually, so first-push (no diff base) and "force a full re-check" scenarios actually run CI against all packages instead of producing a green-but-empty run. - Generated workflow emits a GitHub notice when the diff yields no affected packages, pointing users at the manual Run workflow button so a skipped matrix isn't mistaken for a full pass.
- Bumped static action pins to
actions/checkout@v6so--no-update-actionsdoesn't ship a Node.js 20 deprecation warning. shorebird_ci generatenow bumps action versions to current latest automatically after writing the workflow files. Pass--no-update-actionsto skip the network call.shorebird_ci affected_packagesprints a friendly error instead of a Dart stack trace when run outside a git repository or against an unreachable base ref.--repo-rootdefaults togit rev-parse --show-toplevelwhen not specified, matching git's own behavior. Pass--repo-rootexplicitly to override.- README: remove stale "not yet on pub.dev" note; document why subpackages are covered both as standalone matrix jobs and inside the root Flutter job.
- Add
executables:declaration sodart pub global activate shorebird_cicreates ashorebird_cishim onPATH. Previously users had to invoke viadart pub global run shorebird_ci:shorebird_ci. (rolled in from the unreleased 0.1.1)
0.1.1 #
- Add
executables:declaration sodart pub global activate shorebird_cicreates ashorebird_cishim onPATH. Previously users had to invoke viadart pub global run shorebird_ci:shorebird_ci.
0.1.0 #
- Initial release.