Skip to content

ci: speed up build and test pipelines#1524

Merged
spydon merged 3 commits into
mainfrom
chore/speed-up-ci-pipeline
Jul 3, 2026
Merged

ci: speed up build and test pipelines#1524
spydon merged 3 commits into
mainfrom
chore/speed-up-ci-pipeline

Conversation

@spydon

@spydon spydon commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

What

Several changes to cut CI wall-clock time on build.yml and test.yml.

build.yml

  • Add caching where there was none. Cache pub dependencies (via PUB_CACHE) and the Gradle caches/wrapper for the Android build. The Flutter SDK cache stays off (cache: false) as before due to the known flakiness with latest stable.
  • Split the Flutter builds into per-target parallel jobs. Previously each OS runner built its targets serially (ubuntu did web → linux → apk in one job). Now web, linux, apk, macos, ios, and windows each run as their own matrix job concurrently.

test.yml

  • Only run the beta/dev Dart SDK matrix on pushes to main. Pull requests now test stable only, cutting the Dart test job count by ~66% per PR. Upcoming-SDK breakage is still caught on merge to main. Driven by a new sdk-matrix output from the detect job.

Trade-offs

  • Splitting builds per target increases the number of runners used for the build job, trading runner minutes for wall-clock time.
  • beta/dev SDK regressions surface on merge to main rather than on the PR.

Follow-up

  • Pinning melos is deferred until pub workspaces are set up in a separate PR.

- build.yml: cache pub dependencies and Gradle, and split the Flutter
  builds into per-target parallel jobs so web, linux, apk, macos, ios and
  windows run concurrently instead of serially per OS.
- test.yml: only run the beta/dev Dart SDK matrix on pushes to main; pull
  requests test stable only to keep the matrix small.
- Pin melos to 8.0.0 across all workflows for reproducible, cacheable runs.
@spydon spydon requested a review from a team as a code owner July 3, 2026 09:28
@spydon spydon merged commit ae930ea into main Jul 3, 2026
31 checks passed
@spydon spydon deleted the chore/speed-up-ci-pipeline branch July 3, 2026 10:14
spydon added a commit that referenced this pull request Jul 3, 2026
> **Stacked on #1527.** Review/merge that one first. This PR targets
`chore/bump-min-dart-3.9` and its diff shows only the workspace/Melos
changes; the Dart 3.9 SDK bump, reformat, and analyzer fixes live in the
base PR.

## What

Migrates the monorepo from Melos 3 (`melos.yaml` +
`pubspec_overrides.yaml` linking) to [Dart pub
workspaces](https://dart.dev/tools/pub/workspaces) with the latest Melos
(8.1.0), following the [Melos migration
guide](https://melos.invertase.dev/guides/migrations) and mirroring how
[flame](https://github.com/flame-engine/flame/blob/main/pubspec.yaml) is
set up.

## Changes

- **Root `pubspec.yaml`** now holds the workspace: a literal
`workspace:` member list (globs would require Dart 3.11, we target 3.9),
`dev_dependencies: melos: ^8.1.0`, and the Melos config moved under the
`melos:` key. `melos.yaml` is deleted.
- **Every member** declares `resolution: workspace`, so pub links the
local packages automatically. `pubspec_overrides.yaml` and
`runPubGetInParallel`/`usePubspecOverrides` are gone.
- **All examples are workspace members**, including `examples/launcher`.
Launcher was previously excluded because the old minimum Flutter shipped
a Dart older than launcher required; now that the whole workspace is on
Dart 3.9 it joins like the rest (bumped to `>=3.9.0`, `resolution:
workspace`).
- **Built-in commands**: drops the hand-written
`analyze`/`format`/`lint:all`/`test:coverage`/`upgrade`/`outdated`
scripts in favor of the built-in `melos analyze`, `melos format` (line
length configured in the `melos:` block) and `melos test`. Only the
`update-version` script (used by the version hook) remains.
- **CI**: the Dart test matrix can no longer use `melos bootstrap
--no-flutter` (removed in Melos, and `resolution: workspace` resolves
the whole workspace at once, which includes `supabase_flutter` and
therefore requires Flutter). It now uses the Flutter
`stable`/`beta`/`master` channels, which bundle Dart
`stable`/`beta`/`dev`, preserving multi-channel coverage (beta/master
only on push to main, as #1524 set up). Affected-package detection now
watches the root `pubspec.yaml`. Melos stays unpinned (the action/CLI
install the latest, which supports workspaces).
- **passkeys example**: updated to pass a `PasskeyAuthenticator`,
matching the current `supabase_flutter` API (a pre-existing break from
#1444 that CI never covered, surfaced now that `melos analyze` runs the
whole workspace).

## Validation

Locally with Melos 8.1.0 and Flutter 3.44 (Dart 3.12):

- `melos bootstrap` resolves the whole workspace with a single `flutter
pub get` (13 packages).
- `melos analyze --fatal-infos` is green across all packages.
- `melos format --set-exit-if-changed` is clean.
- `melos test` runs (verified on a backend-free package).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants