Skip to content

Conversation

mosuem
Copy link
Contributor

@mosuem mosuem commented May 12, 2025

Switch Flutter to use pub workspaces as a preparation to unpin selected packages.

Assumptions:

  1. No packages in this repository are published to pub.dev --> We can use any dependencies in most local pubspecs, as the global constraint defines the version. An exception are the packages used outside of this repo with an sdk dependency, namely flutter_localizations, flutter_test, and flutter.
  2. The "universes" {flutter_tools} and {flutter, flutter_localizations, flutter_goldens} can use different packages versions, as they are not resolved together. --> We do not need to upgrade them in sync, we can first do one "universe", then the other.

Based on these assumptions, we use https://github.com/mosuem/pubspec_merger.dart to merge all packages in the flutter universe into a top-level pub workspace.

The flutter and flutter_tools workspaces being separate also ensures that changes to flutter will not inadvertently break flutter_tools, with not-so-nice consequences for our users which would be unable to run flutter upgrade.

There is a third "top-level" pubspec besides ./pubspec.yaml and packages/flutter_tools/pubspec.yaml, namely packages/flutter_tools/.../widget_preview_scaffold/pubspec.yaml. This is an artifact due to it living under flutter_tools, so it can't be part of the ./pubspec.yaml workspace. Moving it would be a larger change, and out of the scope of this PR.

This required a rewrite of the update-packages tool, but the main functionality stays the same, as well as the argument names, to ensure a seamless transition.

Pre-launch Checklist

If you need help, consider asking for advice on the #hackers-new channel on Discord.

@github-actions github-actions bot added a: tests "flutter test", flutter_test, or one of our tests tool Affects the "flutter" command-line tool. See also t: labels. framework flutter/packages/flutter repository. See also f: labels. a: internationalization Supporting other languages or locales. (aka i18n) d: api docs Issues with https://api.flutter.dev/ d: examples Sample code and demos a: desktop Running on desktop f: integration_test The flutter/packages/integration_test plugin team-ios Owned by iOS platform team labels May 12, 2025
@mosuem mosuem force-pushed the workspaceWithSigurd branch 3 times, most recently from b51adbd to 5006762 Compare May 20, 2025 08:17
@github-actions github-actions bot removed a: desktop Running on desktop team-ios Owned by iOS platform team labels May 20, 2025
@sigurdm
Copy link
Contributor

sigurdm commented May 20, 2025

No packages in this repository are published to pub.dev --> We can use any dependencies in local pubspecs, as the global constraint defines the version.

Not sure this holds. When the packages can be used as sdk packages, the constraints still need to be available in the package's pubspec.yaml for the version solver to see them.

@mosuem mosuem force-pushed the workspaceWithSigurd branch from 5f368d3 to cb118b4 Compare May 21, 2025 13:31
@mosuem
Copy link
Contributor Author

mosuem commented May 22, 2025

Not sure this holds. When the packages can be used as sdk packages, the constraints still need to be available in the package's pubspec.yaml for the version solver to see them.

I updated the assumption to reflect that.

@mosuem mosuem force-pushed the workspaceWithSigurd branch from b8bbb79 to 09b6513 Compare May 22, 2025 12:20
@mosuem mosuem changed the title Workspace with sigurd Use pub workspace May 22, 2025
@mosuem mosuem requested a review from bkonyi May 22, 2025 12:24
@mosuem mosuem marked this pull request as ready for review May 22, 2025 12:24
@mosuem mosuem requested a review from matanlurey as a code owner May 22, 2025 12:24
Copy link
Contributor

@matanlurey matanlurey left a comment

Choose a reason for hiding this comment

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

LGTM, this is a huge improvement. Thanks in addition to updating our test scripts and automation to take advantage of this. If there are minor changes we need after I'm happy getting to them in a follow-ups.

@mosuem mosuem force-pushed the workspaceWithSigurd branch from fff1ca4 to 144a721 Compare May 23, 2025 06:01
@github-actions github-actions bot added team-infra Owned by Infrastructure team d: docs/ flutter/flutter/docs, for contributors labels May 23, 2025
@mosuem
Copy link
Contributor Author

mosuem commented May 23, 2025

@matanlurey @iinozemtsev Any idea why g3 testing is failing?

@mosuem mosuem force-pushed the workspaceWithSigurd branch from 144a721 to a0c9487 Compare May 23, 2025 14:20
@mosuem
Copy link
Contributor Author

mosuem commented May 23, 2025

@matanlurey @iinozemtsev Any idea why g3 testing is failing?

Nevermind, was an infra issue.

@mosuem mosuem enabled auto-merge May 23, 2025 14:55
@mosuem mosuem added this pull request to the merge queue May 23, 2025
Merged via the queue into master with commit 9a1dc1b May 23, 2025
154 checks passed
@mosuem mosuem deleted the workspaceWithSigurd branch May 23, 2025 15:35
@matanlurey
Copy link
Contributor

reason for revert: Broke integration tests that do not run on presubmit:

@matanlurey matanlurey added the revert Autorevert PR (with "Reason for revert:" comment) label May 23, 2025
auto-submit bot pushed a commit that referenced this pull request May 23, 2025
@auto-submit auto-submit bot removed the revert Autorevert PR (with "Reason for revert:" comment) label May 23, 2025
github-merge-queue bot pushed a commit that referenced this pull request May 23, 2025
<!-- start_original_pr_link -->
Reverts: #168662
<!-- end_original_pr_link -->
<!-- start_initiating_author -->
Initiated by: matanlurey
<!-- end_initiating_author -->
<!-- start_revert_reason -->
Reason for reverting: Broke integration tests that do not run on
presubmit:

-
https://ci.chromium.org/ui/p/flutter/builders/prod/Mac_arm64%20macos_chrome_dev_mode/8715/overview
-
https://ci.chromium.org/ui/p/flutter/builders/prod/Linux_pixel_7pro%20linux_chrome_dev_mode/7617/overview
<!-- end_revert_reason -->
<!-- start_original_pr_author -->
Original PR Author: mosuem
<!-- end_original_pr_author -->

<!-- start_reviewers -->
Reviewed By: {matanlurey}
<!-- end_reviewers -->

<!-- start_revert_body -->
This change reverts the following previous change:
Switch Flutter to use pub workspaces as a preparation to unpin selected
packages.

Assumptions:

1. No packages in this repository are published to pub.dev --> We can
use `any` dependencies in most local pubspecs, as the global constraint
defines the version. An exception are the packages used outside of this
repo with an `sdk` dependency, namely `flutter_localizations`,
`flutter_test`, and `flutter`.
2. The "universes" `{flutter_tools}` and `{flutter,
flutter_localizations, flutter_goldens}` can use different packages
versions, as they are not resolved together. --> We do not need to
upgrade them in sync, we can first do one "universe", then the other.

Based on these assumptions, we use
https://github.com/mosuem/pubspec_merger.dart to merge all packages in
the `flutter` universe into a top-level pub workspace.

The `flutter` and `flutter_tools` workspaces being separate also ensures
that changes to `flutter` will not inadvertently break `flutter_tools`,
with not-so-nice consequences for our users which would be unable to run
`flutter upgrade`.

There is a third "top-level" pubspec besides `./pubspec.yaml` and
`packages/flutter_tools/pubspec.yaml`, namely
`packages/flutter_tools/.../widget_preview_scaffold/pubspec.yaml`. This
is an artifact due to it living under `flutter_tools`, so it can't be
part of the `./pubspec.yaml` workspace. Moving it would be a larger
change, and out of the scope of this PR.

This required a rewrite of the update-packages tool, but the main
functionality stays the same, as well as the argument names, to ensure a
seamless transition.

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md

<!-- end_revert_body -->

Co-authored-by: auto-submit[bot] <flutter-engprod-team@google.com>
@mdebbar mdebbar mentioned this pull request May 23, 2025
9 tasks
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request May 24, 2025
auto-submit bot pushed a commit to flutter/packages that referenced this pull request May 24, 2025
flutter/flutter@85564cb...60050a0

2025-05-24 engine-flutter-autoroll@skia.org Roll Skia from 0834eea9de33 to 91dc88dc70e5 (1 revision) (flutter/flutter#169414)
2025-05-24 engine-flutter-autoroll@skia.org Roll Dart SDK from 0a6b16a55b9e to 7dab9bffe1f7 (1 revision) (flutter/flutter#169406)
2025-05-24 victorsanniay@gmail.com Correct calculation for CupertinoTextSelectionToolbar vertical position (flutter/flutter#169308)
2025-05-24 victorsanniay@gmail.com Baseline-align CupertinoTextField placeholder (flutter/flutter#166952)
2025-05-24 engine-flutter-autoroll@skia.org Roll Dart SDK from 8354914ef97b to 0a6b16a55b9e (3 revisions) (flutter/flutter#169403)
2025-05-24 bkonyi@google.com Start removing Observatory support and references (flutter/flutter#169216)
2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from f42bb59753fe to 0834eea9de33 (3 revisions) (flutter/flutter#169393)
2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from 956fd8b14e22 to f42bb59753fe (2 revisions) (flutter/flutter#169379)
2025-05-23 dkwingsmt@users.noreply.github.com [Engine] Fast blurring algorithm for RSuperellipse (flutter/flutter#169187)
2025-05-23 matanlurey@users.noreply.github.com Add a page describing best CI practices for `flutter`-org repos (flutter/flutter#169364)
2025-05-23 mdebbar@google.com Revert "Mark web_tool_tests_1_2 as bringup." (flutter/flutter#169361)
2025-05-23 34871572+gmackall@users.noreply.github.com Add changelog section for 3.32.0 and 3.32.1, and add note for ndk checking cherry pick (flutter/flutter#169369)
2025-05-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 085f110ecf33 to 8354914ef97b (1 revision) (flutter/flutter#169349)
2025-05-23 matanlurey@users.noreply.github.com Remove handling of the legacy `.flutter-plugins` file in `PluginHandler.kt`. (flutter/flutter#169317)
2025-05-23 dumazy@gmail.com Use baseUri of WebAssetServer for reload_scripts.json (flutter/flutter#169267)
2025-05-23 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Use pub workspace (#168662)" (flutter/flutter#169357)
2025-05-23 mosum@google.com Use pub workspace (flutter/flutter#168662)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC muhatashim@google.com,stuartmorgan@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
@mosuem mosuem mentioned this pull request May 26, 2025
9 tasks
zeqinjie pushed a commit to zeqinjie/flutter that referenced this pull request Jun 5, 2025
* master: (125 commits)
  Roll Fuchsia Linux SDK from XtPp9bBW49iDJ0wbA... to -eo2JqnJBauuGSzoW... (flutter#169424)
  Roll Skia from 91dc88dc70e5 to 443f5257f382 (1 revision) (flutter#169422)
  Roll Skia from 0834eea9de33 to 91dc88dc70e5 (1 revision) (flutter#169414)
  Roll Dart SDK from 0a6b16a55b9e to 7dab9bffe1f7 (1 revision) (flutter#169406)
  Correct calculation for CupertinoTextSelectionToolbar vertical position (flutter#169308)
  Baseline-align CupertinoTextField placeholder (flutter#166952)
  Roll Dart SDK from 8354914ef97b to 0a6b16a55b9e (3 revisions) (flutter#169403)
  Start removing Observatory support and references (flutter#169216)
  Roll Skia from f42bb59753fe to 0834eea9de33 (3 revisions) (flutter#169393)
  Roll Skia from 956fd8b14e22 to f42bb59753fe (2 revisions) (flutter#169379)
  [Engine] Fast blurring algorithm for RSuperellipse (flutter#169187)
  Add a page describing best CI practices for `flutter`-org repos (flutter#169364)
  Revert "Mark web_tool_tests_1_2 as bringup." (flutter#169361)
  Add changelog section for 3.32.0 and 3.32.1, and add note for ndk checking cherry pick (flutter#169369)
  Roll Dart SDK from 085f110ecf33 to 8354914ef97b (1 revision) (flutter#169349)
  Remove handling of the legacy `.flutter-plugins` file in `PluginHandler.kt`. (flutter#169317)
  Use baseUri of WebAssetServer for reload_scripts.json (flutter#169267)
  Reverts "Use pub workspace (flutter#168662)" (flutter#169357)
  Use pub workspace (flutter#168662)
  Reverts "[Reland2] Implements UISceneDelegate dynamically w/ FlutterLaunchEngine (flutter#169276)" (flutter#169347)
  ...
FMorschel pushed a commit to FMorschel/packages that referenced this pull request Jun 9, 2025
…r#9318)

flutter/flutter@85564cb...60050a0

2025-05-24 engine-flutter-autoroll@skia.org Roll Skia from 0834eea9de33 to 91dc88dc70e5 (1 revision) (flutter/flutter#169414)
2025-05-24 engine-flutter-autoroll@skia.org Roll Dart SDK from 0a6b16a55b9e to 7dab9bffe1f7 (1 revision) (flutter/flutter#169406)
2025-05-24 victorsanniay@gmail.com Correct calculation for CupertinoTextSelectionToolbar vertical position (flutter/flutter#169308)
2025-05-24 victorsanniay@gmail.com Baseline-align CupertinoTextField placeholder (flutter/flutter#166952)
2025-05-24 engine-flutter-autoroll@skia.org Roll Dart SDK from 8354914ef97b to 0a6b16a55b9e (3 revisions) (flutter/flutter#169403)
2025-05-24 bkonyi@google.com Start removing Observatory support and references (flutter/flutter#169216)
2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from f42bb59753fe to 0834eea9de33 (3 revisions) (flutter/flutter#169393)
2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from 956fd8b14e22 to f42bb59753fe (2 revisions) (flutter/flutter#169379)
2025-05-23 dkwingsmt@users.noreply.github.com [Engine] Fast blurring algorithm for RSuperellipse (flutter/flutter#169187)
2025-05-23 matanlurey@users.noreply.github.com Add a page describing best CI practices for `flutter`-org repos (flutter/flutter#169364)
2025-05-23 mdebbar@google.com Revert "Mark web_tool_tests_1_2 as bringup." (flutter/flutter#169361)
2025-05-23 34871572+gmackall@users.noreply.github.com Add changelog section for 3.32.0 and 3.32.1, and add note for ndk checking cherry pick (flutter/flutter#169369)
2025-05-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 085f110ecf33 to 8354914ef97b (1 revision) (flutter/flutter#169349)
2025-05-23 matanlurey@users.noreply.github.com Remove handling of the legacy `.flutter-plugins` file in `PluginHandler.kt`. (flutter/flutter#169317)
2025-05-23 dumazy@gmail.com Use baseUri of WebAssetServer for reload_scripts.json (flutter/flutter#169267)
2025-05-23 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Use pub workspace (#168662)" (flutter/flutter#169357)
2025-05-23 mosum@google.com Use pub workspace (flutter/flutter#168662)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC muhatashim@google.com,stuartmorgan@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
github-merge-queue bot pushed a commit that referenced this pull request Jun 10, 2025
…caffold`. (#170364)

Closes #170264.

I believe these files were _accidentally_ introduced in
#168662, as part of the
`workspace`-ifying of `flutter/flutter`; these two packages are _not_
part of the workspace, and there is special logic in
`bin/internal/shared.sh` (i.e. the entrypoint to `flutter`) that expects
this file to be updated:


https://github.com/flutter/flutter/blob/2d30ce56feb7fe1c71be699024a56482dca61a7e/bin/internal/shared.sh#L131

We can revisit this if the pub team has advice on what to do; for now
helps the periodic failures described in
#170264.
Ortes pushed a commit to Ortes/packages that referenced this pull request Jun 25, 2025
…r#9318)

flutter/flutter@85564cb...60050a0

2025-05-24 engine-flutter-autoroll@skia.org Roll Skia from 0834eea9de33 to 91dc88dc70e5 (1 revision) (flutter/flutter#169414)
2025-05-24 engine-flutter-autoroll@skia.org Roll Dart SDK from 0a6b16a55b9e to 7dab9bffe1f7 (1 revision) (flutter/flutter#169406)
2025-05-24 victorsanniay@gmail.com Correct calculation for CupertinoTextSelectionToolbar vertical position (flutter/flutter#169308)
2025-05-24 victorsanniay@gmail.com Baseline-align CupertinoTextField placeholder (flutter/flutter#166952)
2025-05-24 engine-flutter-autoroll@skia.org Roll Dart SDK from 8354914ef97b to 0a6b16a55b9e (3 revisions) (flutter/flutter#169403)
2025-05-24 bkonyi@google.com Start removing Observatory support and references (flutter/flutter#169216)
2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from f42bb59753fe to 0834eea9de33 (3 revisions) (flutter/flutter#169393)
2025-05-23 engine-flutter-autoroll@skia.org Roll Skia from 956fd8b14e22 to f42bb59753fe (2 revisions) (flutter/flutter#169379)
2025-05-23 dkwingsmt@users.noreply.github.com [Engine] Fast blurring algorithm for RSuperellipse (flutter/flutter#169187)
2025-05-23 matanlurey@users.noreply.github.com Add a page describing best CI practices for `flutter`-org repos (flutter/flutter#169364)
2025-05-23 mdebbar@google.com Revert "Mark web_tool_tests_1_2 as bringup." (flutter/flutter#169361)
2025-05-23 34871572+gmackall@users.noreply.github.com Add changelog section for 3.32.0 and 3.32.1, and add note for ndk checking cherry pick (flutter/flutter#169369)
2025-05-23 engine-flutter-autoroll@skia.org Roll Dart SDK from 085f110ecf33 to 8354914ef97b (1 revision) (flutter/flutter#169349)
2025-05-23 matanlurey@users.noreply.github.com Remove handling of the legacy `.flutter-plugins` file in `PluginHandler.kt`. (flutter/flutter#169317)
2025-05-23 dumazy@gmail.com Use baseUri of WebAssetServer for reload_scripts.json (flutter/flutter#169267)
2025-05-23 98614782+auto-submit[bot]@users.noreply.github.com Reverts "Use pub workspace (#168662)" (flutter/flutter#169357)
2025-05-23 mosum@google.com Use pub workspace (flutter/flutter#168662)

If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-packages
Please CC muhatashim@google.com,stuartmorgan@google.com on the revert to ensure that a human
is aware of the problem.

To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 14, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 14, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 15, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 15, 2025
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Aug 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
a: internationalization Supporting other languages or locales. (aka i18n) a: tests "flutter test", flutter_test, or one of our tests d: api docs Issues with https://api.flutter.dev/ d: docs/ flutter/flutter/docs, for contributors d: examples Sample code and demos f: integration_test The flutter/packages/integration_test plugin framework flutter/packages/flutter repository. See also f: labels. team-infra Owned by Infrastructure team tool Affects the "flutter" command-line tool. See also t: labels.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants