Skip to content

chore: migrate to pub workspaces and Melos 8#1525

Merged
spydon merged 1 commit into
mainfrom
chore/pub-workspaces-melos-8
Jul 3, 2026
Merged

chore: migrate to pub workspaces and Melos 8#1525
spydon merged 1 commit into
mainfrom
chore/pub-workspaces-melos-8

Conversation

@spydon

@spydon spydon commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

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 with the latest Melos (8.1.0), following the Melos migration guide and mirroring how flame 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 ci: speed up build and test pipelines #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 fix(supabase_flutter): accept PasskeyAuthenticatorInterface instead of depending on passkeys #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).

@spydon spydon requested a review from a team as a code owner July 3, 2026 11:21
@spydon spydon force-pushed the chore/pub-workspaces-melos-8 branch from 1f24e31 to ef9017b Compare July 3, 2026 12:18
@spydon spydon changed the base branch from main to chore/bump-min-dart-3.9 July 3, 2026 12:18
@spydon spydon force-pushed the chore/pub-workspaces-melos-8 branch from ef9017b to 5590507 Compare July 3, 2026 12:22
spydon added a commit that referenced this pull request Jul 3, 2026
## What

Raises the minimum Dart SDK of the pure-Dart packages
(`functions_client`, `gotrue`, `postgrest`, `realtime_client`,
`storage_client`, `supabase`, `supabase_lints`,
`yet_another_json_isolate`) and the `supabase` web example from
`3.4.0`/`3.3.0` to `3.9.0`, matching `supabase_flutter`.

This is the base PR for the pub workspaces + Melos 8 migration (#1525),
which is stacked on top of it. Pub workspaces resolve the whole
workspace as a unit under a single Dart SDK, so aligning every package
on 3.9.0 keeps the toolchain and formatting consistent across the repo.

## Why the large diff

Raising the language version to 3.9 switches `dart format` to its
mandatory "tall" style. All affected packages are reformatted
accordingly (109 files) — this is a pure formatting change.
`supabase_flutter` was already on 3.9, so it is untouched.

## Analyzer fixes surfaced by the new language version

- **postgrest**: 3.9 no longer implicitly promotes the bare `body as
dynamic;` statement in `_parseResponse`, which surfaced three
`argument_type_not_assignable` errors. The casts are now explicit and
behavior-preserving (`body as Iterable` / `body as Map`), guarded by the
existing `R == PostgrestList` / `R == PostgrestMap` checks.
- **realtime_client**: the tall formatter wraps a long single-line `if`
onto two lines, which then needs braces
(`curly_braces_in_flow_control_structures`).

## Validation

- `dart format -l 80 --set-exit-if-changed` is clean across all
packages.
- `dart analyze --fatal-infos` passes (verified on `postgrest` and
`realtime_client`, which had the only issues).
- `postgrest`'s mock-based tests (response-conversion paths) pass.

## Note

This raises the minimum supported Dart SDK for the affected published
packages, which reviewers may want to reflect in the next version bump.
Base automatically changed from chore/bump-min-dart-3.9 to main July 3, 2026 12:26
@spydon spydon force-pushed the chore/pub-workspaces-melos-8 branch 2 times, most recently from 67708b6 to 9747337 Compare July 3, 2026 12:40

@grdsdev grdsdev left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm!

@spydon spydon force-pushed the chore/pub-workspaces-melos-8 branch from 9747337 to 495b801 Compare July 3, 2026 12:47
@spydon spydon merged commit 56a47f7 into main Jul 3, 2026
31 checks passed
@spydon spydon deleted the chore/pub-workspaces-melos-8 branch July 3, 2026 13:04
@spydon spydon mentioned this pull request Jul 3, 2026
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