Skip to content

Code freeze workflow#184246

Merged
auto-submit[bot] merged 4 commits into
flutter:masterfrom
Piinks:freezeWF
Apr 8, 2026
Merged

Code freeze workflow#184246
auto-submit[bot] merged 4 commits into
flutter:masterfrom
Piinks:freezeWF

Conversation

@Piinks

@Piinks Piinks commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

This PR introduces a new GitHub Actions workflow to enforce a temporary code freeze on core Material and Cupertino directories.

Implements #184093
(instead of flutter/cocoon#4998)

Any pull request attempting to modify files in the frozen paths will trigger a failing check, providing authors with clear instructions on how to proceed if they have a critical emergency fix.

Frozen Paths Included (everything that will be moving over to flutter/packages):

  • Core Library
    • packages/flutter/lib/src/material/
    • packages/flutter/lib/src/cupertino/
  • Tests
    • packages/flutter/test/material/
    • packages/flutter/test/cupertino/
  • API Examples
    • examples/api/lib/material/
    • examples/api/lib/cupertino/
    • examples/api/test/material/
    • examples/api/test/cupertino/
  • Fix Data
    • packages/flutter/lib/fix_data/fix_cupertino.yaml
    • packages/flutter/lib/fix_data/fix_material/
    • packages/flutter/test_fixes/material/
    • packages/flutter/test_fixes/cupertino/

Trigger Logic:

  • Target branch: master
  • Events: opened, reopened, synchronize, and ready_for_review
  • The workflow only executes if changes are detected within
    the specified directories.

Override is possible with a label for emergencies, or necessary work we will land in service of decoupling during the freeze.

🛡️ Catching Existing PRs

To ensure this freeze is applied to exiting pull requests, we can add this as a Required Status Check in a branch protection rule.

How to enable Required Status Check 1. Go to the repository Settings on GitHub. 2. Select Branches from the left sidebar. 3. Find the branch protection rule for master and click Edit. 4. Enable "Require status checks to pass before merging". 5. Search for the new check name: "Check Code Freeze" and add it to the required list. 6. Click Save changes.

How this affects open PRs:
Once the check is required:

  • Existing PRs opened before this workflow will be blocked from merging because the "Check Code Freeze" status will be missing or failed.
  • Authors of open PRs can trigger the check by:
    • Pushing a new commit (even a trivial one).
    • Closing and reopening the PR.
    • If the PR is a draft, marking it as "Ready for Review".
  • GitHub evaluates the entire diff of the PR. If an existing PR contains
    changes to packages/flutter/lib/src/material/, the workflow will trigger and fail the
    moment the PR is updated, regardless of when the original Material changes were pushed.

Pre-launch Checklist

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

Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the gemini-code-assist bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.

@jtmcdole

Copy link
Copy Markdown
Member

This is good - this test only runs if any of the matching folders have changed. It only outputs a negative value (fail), and "passing" is the absence of this check.... or a GitHub issue with Actions not being scheduled. I would approve this.

An alternative to consider: always running this test and giving a pass/fail signal. Why? Because then we can add the test to the "required to merge" list, which means GitHub makes a stub check_run for this test and the MQ button / Autosubmit cannot bypass. The downside is its a bit more complex:

# Copyright 2024 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

name: Material and Cupertino Code Freeze

on:
  pull_request:
    types: [opened, reopened, synchronize, ready_for_review]
    branches:
      - master
  merge_group:
    branches:
      - master

permissions: read-all

jobs:
  check_freeze:
    name: Check Code Freeze
    runs-on: ubuntu-latest
    if: github.repository == 'flutter/flutter'
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Check for changes in frozen folders
        uses: dorny/paths-filter@v3
        id: filter
        with:
          filters: |
            frozen:
              - 'packages/flutter/lib/src/material/**'
              - 'packages/flutter/lib/src/cupertino/**'
              - 'packages/flutter/test/material/**'
              - 'packages/flutter/test/cupertino/**'
              - 'examples/api/lib/material/**'
              - 'examples/api/lib/cupertino/**'
              - 'examples/api/test/material/**'
              - 'examples/api/test/cupertino/**'
              - 'packages/flutter/lib/fix_data/fix_cupertino.yaml'
              - 'packages/flutter/lib/fix_data/fix_material/**'
              - 'packages/flutter/test_fixes/material/**'
              - 'packages/flutter/test_fixes/cupertino/**'

      - name: Fail on frozen changes
        # This step only runs if the 'frozen' filter matched
        if: steps.filter.outputs.frozen == 'true'
        run: |
          echo "Error: Code changes detected during the current code freeze."
          echo "The following paths are currently frozen:"
          echo "  - packages/flutter/lib/src/material/"
          echo "  - packages/flutter/lib/src/cupertino/"
          echo "  - (and associated tests/examples)"
          echo ""
          echo "If this is a critical fix that must land during the freeze, please file an issue for team-design."
          echo "Information on this code freeze: https://github.com/flutter/flutter/issues/184093"
          exit 1

      - name: Pass if no frozen changes
        if: steps.filter.outputs.frozen == 'false'
        run: echo "No changes to frozen code."

@Piinks Piinks marked this pull request as ready for review April 6, 2026 23:21
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Note

Gemini is unable to generate a review for this pull request due to the file types involved not being currently supported.

@Piinks Piinks changed the title WIP - Code freeze workflow Code freeze workflow Apr 6, 2026
echo "Information on this code freeze: https://github.com/flutter/flutter/issues/184093"
exit 1

- name: Pass if overridden

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Added clear override via label, similar to flutter/packages

uses: actions/checkout@v4

- name: Check for changes in frozen folders
uses: dorny/paths-filter@v3

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Need to add this to the org.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Added.

@Piinks Piinks requested a review from justinmc April 6, 2026 23:23
@Piinks Piinks added framework flutter/packages/flutter repository. See also f: labels. team-framework Owned by Framework team labels Apr 7, 2026
@github-actions github-actions Bot removed the framework flutter/packages/flutter repository. See also f: labels. label Apr 7, 2026
@Piinks Piinks added CICD Run CI/CD framework flutter/packages/flutter repository. See also f: labels. labels Apr 7, 2026
@Piinks

Piinks commented Apr 7, 2026

Copy link
Copy Markdown
Contributor Author

Pinned and updated the issue with override instructions, and what qualifies to override it.
#184093

@justinmc justinmc 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 👍

@Piinks Piinks added the autosubmit Merge PR when tree becomes green via auto submit App label Apr 8, 2026
@auto-submit auto-submit Bot added this pull request to the merge queue Apr 8, 2026
Merged via the queue into flutter:master with commit 5089019 Apr 8, 2026
19 of 20 checks passed
@flutter-dashboard flutter-dashboard Bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Apr 8, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Apr 8, 2026
engine-flutter-autoroll added a commit to engine-flutter-autoroll/packages that referenced this pull request Apr 8, 2026
auto-submit Bot pushed a commit to flutter/packages that referenced this pull request Apr 8, 2026
flutter/flutter@a0924c7...05e0ae0

2026-04-08 meylis@divine.video Fix Android engine flags defaulting to true for malformed values (flutter/flutter#184631)
2026-04-08 katelovett@google.com Try one more again (flutter/flutter#184767)
2026-04-08 goderbauer@google.com Remove custom `analysis_options.yaml` from `imitation_game_flutter` (flutter/flutter#184717)
2026-04-08 victorsanniay@gmail.com Add more error handling to unawaited callsites (flutter/flutter#184526)
2026-04-08 34465683+rkishan516@users.noreply.github.com Refactor: remove material from absorb_ponter_test, container_test,  lookup_boundary_test, page_view_test, router_test, semantics_clipping_test, semantics_merge_test, shadow_test, text_test (flutter/flutter#183309)
2026-04-08 73785960+xfce0@users.noreply.github.com Remove editable_text_utils cross-imports from material and cupertino … (flutter/flutter#184519)
2026-04-08 robert.ancell@canonical.com Replace hard coded max path length with system defined one. (flutter/flutter#184697)
2026-04-08 jesswon@google.com [Re-land] Add Support For Built-in Kotlin (flutter/flutter#184745)
2026-04-08 15619084+vashworth@users.noreply.github.com Manually stop and continue LLDB breakpoints on Xcode 26.4+ (flutter/flutter#184690)
2026-04-08 katelovett@google.com Code freeze workflow (flutter/flutter#184246)
2026-04-08 737941+loic-sharma@users.noreply.github.com [Dot shorthands] Migrate examples/api/lib/widgets (flutter/flutter#183965)
2026-04-08 59215665+davidhicks980@users.noreply.github.com [cupertino.dart] Implement CupertinoMenuAnchor and CupertinoMenuItem using RawMenuAnchor (flutter/flutter#182036)
2026-04-08 87018443+mayanksharma9@users.noreply.github.com [Semantics] clarify Android header docs (flutter/flutter#183573)
2026-04-08 dacoharkes@google.com [ci] mac build_test bringup false (flutter/flutter#184738)
2026-04-08 34871572+gmackall@users.noreply.github.com Reland "Apply rect clipping to surface views" (flutter/flutter#184732)
2026-04-08 bkonyi@google.com Remove bringup label for resharded Windows tool_integration_tests shards (flutter/flutter#184721)
2026-04-08 namangoyaldev@gmail.com Tool: Add search and filtering to widget preview scaffold (flutter/flutter#184023)
2026-04-08 36861262+QuncCccccc@users.noreply.github.com Update localization from translation console (flutter/flutter#184742)
2026-04-07 rmolivares@renzo-olivares.dev Revert "Add Support For Built-in Kotlin (#184227)" (flutter/flutter#184739)
2026-04-07 34871572+gmackall@users.noreply.github.com Collect HCPP adoption analytics for flutter run/build apk/build appbundle (flutter/flutter#184225)
2026-04-07 jacksongardner@google.com Add a github workflow for reverting PRs. (flutter/flutter#184593)
2026-04-07 jesswon@google.com Add Support For Built-in Kotlin (flutter/flutter#184227)
2026-04-07 34871572+gmackall@users.noreply.github.com Revert "Apply rect clipping to surface views (#184471)" (flutter/flutter#184728)
2026-04-07 jesswon@google.com [Fix-forward] Added Compose plugin to Add-to-app Integration Test (flutter/flutter#184681)

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 bmparr@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
mbcorona pushed a commit to mbcorona/flutter that referenced this pull request Apr 15, 2026
This PR introduces a new GitHub Actions workflow to enforce a temporary
code freeze on core Material and Cupertino directories.

Implements flutter#184093
(instead of flutter/cocoon#4998)

Any pull request attempting to modify files in the frozen paths will
trigger a failing check, providing authors with clear instructions on
how to proceed if they have a critical emergency fix.

Frozen Paths Included (everything that will be moving over to
flutter/packages):
   - Core Library
     - `packages/flutter/lib/src/material/`
     - `packages/flutter/lib/src/cupertino/`
   - Tests
     - `packages/flutter/test/material/`
     - `packages/flutter/test/cupertino/`
   - API Examples
     - `examples/api/lib/material/`
     - `examples/api/lib/cupertino/`
     - `examples/api/test/material/`
     - `examples/api/test/cupertino/`
   - Fix Data
     - `packages/flutter/lib/fix_data/fix_cupertino.yaml`
     - `packages/flutter/lib/fix_data/fix_material/`
     - `packages/flutter/test_fixes/material/`
     - `packages/flutter/test_fixes/cupertino/`

  Trigger Logic:
   - Target branch: master
   - Events: opened, reopened, synchronize, and ready_for_review
   - The workflow only executes if changes are detected within
     the specified directories.

Override is possible with a label for emergencies, or necessary work we
will land in service of decoupling during the freeze.

#### 🛡️ Catching Existing PRs

To ensure this freeze is applied to exiting pull requests, we can add
this as a Required Status Check in a branch protection rule.

<details><summary>How to enable Required Status Check</summary>
   1. Go to the repository Settings on GitHub.
   2. Select Branches from the left sidebar.
   3. Find the branch protection rule for master and click Edit.
   4. Enable "Require status checks to pass before merging".
5. Search for the new check name: "Check Code Freeze" and add it to the
required list.
   6. Click Save changes.
  </details>

How this affects open PRs:
  Once the check is required:
- Existing PRs opened before this workflow will be blocked from merging
because the "Check Code Freeze" status will be missing or failed.
   - Authors of open PRs can trigger the check by:
       - Pushing a new commit (even a trivial one).
       - Closing and reopening the PR.
       - If the PR is a draft, marking it as "Ready for Review".
- GitHub evaluates the entire diff of the PR. If an existing PR contains
changes to packages/flutter/lib/src/material/, the workflow will trigger
and fail the
moment the PR is updated, regardless of when the original Material
changes were pushed.

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [AI contribution guidelines] and understand my
responsibilities, or I am not using AI tools.
- [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].

**Note**: The Flutter team is currently trialing the use of [Gemini Code
Assist for
GitHub](https://developers.google.com/gemini-code-assist/docs/review-github-code).
Comments from the `gemini-code-assist` bot should not be taken as
authoritative feedback from the Flutter team. If you find its comments
useful you can update your code accordingly, but if you are unsure or
disagree with the feedback, please feel free to wait for a Flutter team
member's review for guidance on which automated comments should be
addressed.

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[AI contribution guidelines]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#ai-contribution-guidelines
[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
creatorpiyush pushed a commit to creatorpiyush/packages that referenced this pull request Jun 10, 2026
…r#11470)

flutter/flutter@a0924c7...05e0ae0

2026-04-08 meylis@divine.video Fix Android engine flags defaulting to true for malformed values (flutter/flutter#184631)
2026-04-08 katelovett@google.com Try one more again (flutter/flutter#184767)
2026-04-08 goderbauer@google.com Remove custom `analysis_options.yaml` from `imitation_game_flutter` (flutter/flutter#184717)
2026-04-08 victorsanniay@gmail.com Add more error handling to unawaited callsites (flutter/flutter#184526)
2026-04-08 34465683+rkishan516@users.noreply.github.com Refactor: remove material from absorb_ponter_test, container_test,  lookup_boundary_test, page_view_test, router_test, semantics_clipping_test, semantics_merge_test, shadow_test, text_test (flutter/flutter#183309)
2026-04-08 73785960+xfce0@users.noreply.github.com Remove editable_text_utils cross-imports from material and cupertino … (flutter/flutter#184519)
2026-04-08 robert.ancell@canonical.com Replace hard coded max path length with system defined one. (flutter/flutter#184697)
2026-04-08 jesswon@google.com [Re-land] Add Support For Built-in Kotlin (flutter/flutter#184745)
2026-04-08 15619084+vashworth@users.noreply.github.com Manually stop and continue LLDB breakpoints on Xcode 26.4+ (flutter/flutter#184690)
2026-04-08 katelovett@google.com Code freeze workflow (flutter/flutter#184246)
2026-04-08 737941+loic-sharma@users.noreply.github.com [Dot shorthands] Migrate examples/api/lib/widgets (flutter/flutter#183965)
2026-04-08 59215665+davidhicks980@users.noreply.github.com [cupertino.dart] Implement CupertinoMenuAnchor and CupertinoMenuItem using RawMenuAnchor (flutter/flutter#182036)
2026-04-08 87018443+mayanksharma9@users.noreply.github.com [Semantics] clarify Android header docs (flutter/flutter#183573)
2026-04-08 dacoharkes@google.com [ci] mac build_test bringup false (flutter/flutter#184738)
2026-04-08 34871572+gmackall@users.noreply.github.com Reland "Apply rect clipping to surface views" (flutter/flutter#184732)
2026-04-08 bkonyi@google.com Remove bringup label for resharded Windows tool_integration_tests shards (flutter/flutter#184721)
2026-04-08 namangoyaldev@gmail.com Tool: Add search and filtering to widget preview scaffold (flutter/flutter#184023)
2026-04-08 36861262+QuncCccccc@users.noreply.github.com Update localization from translation console (flutter/flutter#184742)
2026-04-07 rmolivares@renzo-olivares.dev Revert "Add Support For Built-in Kotlin (#184227)" (flutter/flutter#184739)
2026-04-07 34871572+gmackall@users.noreply.github.com Collect HCPP adoption analytics for flutter run/build apk/build appbundle (flutter/flutter#184225)
2026-04-07 jacksongardner@google.com Add a github workflow for reverting PRs. (flutter/flutter#184593)
2026-04-07 jesswon@google.com Add Support For Built-in Kotlin (flutter/flutter#184227)
2026-04-07 34871572+gmackall@users.noreply.github.com Revert "Apply rect clipping to surface views (#184471)" (flutter/flutter#184728)
2026-04-07 jesswon@google.com [Fix-forward] Added Compose plugin to Add-to-app Integration Test (flutter/flutter#184681)

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 bmparr@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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CICD Run CI/CD framework flutter/packages/flutter repository. See also f: labels. team-framework Owned by Framework team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants