Skip to content

Conversation

@chunhtai
Copy link
Contributor

@chunhtai chunhtai commented Oct 24, 2025

fixes flutter/flutter#176425

To set up a batch release cron job for a package, one needs to make a copy of packages/.github/workflows/go_router_batch.yml, and change the name and cron schedule.

The cron job does the follow:

  1. trigger batch_release_pr.yaml with the input package

batch_release_pr:

  1. check out repo
  2. Run packages/script/tool/lib/src/batch_command.dart to create branches with all the changes
  3. create pr request

Pre-Review 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.

Footnotes

  1. Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. 2 3

@github-actions github-actions bot added p: go_router triage-framework Should be looked at in framework triage labels Oct 27, 2025
@chunhtai chunhtai added override: no versioning needed Override the check requiring version bumps for most changes override: no changelog needed Override the check requiring CHANGELOG updates for most changes labels Oct 27, 2025
@chunhtai
Copy link
Contributor Author

reason for override: ci only change

- name: Set up tools
run: dart pub get
working-directory: ${{ github.workspace }}/script/tool
# Give some time for LUCI checks to start becoming populated.
Copy link
Collaborator

Choose a reason for hiding this comment

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

Why is this needed in the context of this action?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is copied from release.yaml. Do you want me to factor the set up tools github action to a separate one? so that we don't duplicate code in a bunch of place

create_release_pr:
runs-on: ubuntu-latest
env:
BRANCH_NAME: ${{ github.event.client_payload.package }}-${{ github.run_id }}-${{ github.run_attempt }}
Copy link
Collaborator

Choose a reason for hiding this comment

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

So the cron job is constantly creating new branches? What cleans up branches that don't actually end up published?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I see that can be a problem. then I think the right thing to do will be re-use the same branch name and do a clean up before creating a new release

Copy link
Collaborator

Choose a reason for hiding this comment

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

If these files are going to be created as part of the PR process, then the tooling should be updated to understand that, and the override labels shouldn't be needed on this PR. If the PR isn't landable without overrides, then the normal commit path isn't working correctly.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

yes, that part of the work will be in flutter/flutter#176433.


print(' Pushing to remote...');
final io.ProcessResult pushResult =
await repository.runCommand(<String>['push', 'origin', branchName, '--force']);
Copy link
Collaborator

Choose a reason for hiding this comment

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

Here too, --force seems needlessly dangerous. I don't see why we would need to enable this command to be destructive.

throw FormatException('Expected "changelog" to be a list, but found ${changelogYaml.runtimeType}.');
}
final List<String> changelog = changelogYaml.nodes
.map((YamlNode node) => node.value as String)
Copy link
Collaborator

Choose a reason for hiding this comment

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

What happened to allowing arbitrary markdown? How would someone make this changelog for instance?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

we can use | for arbitrary markdown in yaml will need to check whether dart yaml support this properly. now I think of it maybe the changelog part of the yaml shouldn't be a list, it should just be a single element that accept arbitrary markdown.

version: major
changelogs: |
 my *markdown*
 - item **one**
 - item two

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

override: no changelog needed Override the check requiring CHANGELOG updates for most changes override: no versioning needed Override the check requiring version bumps for most changes p: go_router triage-framework Should be looked at in framework triage

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[batch-release] A github action for parsing unreleased commit and produce release PR

2 participants