1- name : Prepare release manually
1+ name : Prepare package release
22on :
33 workflow_dispatch :
44 inputs :
5- prerelease :
6- description : " Version as prerelease"
5+ release_mode :
6+ description : " How should package versions be selected?"
7+ required : true
8+ default : stable
9+ type : choice
10+ options :
11+ - stable
12+ - development-prerelease
13+ - graduate-prerelease
14+ - exact
15+ exact_package :
16+ description : " Package to version (used only when release mode is exact)"
17+ required : true
18+ default : ndk
19+ type : choice
20+ options :
21+ - ndk
22+ - ndk_drift
23+ - ndk_objectbox
24+ - ndk_flutter
25+ exact_version :
26+ description : " Version such as 0.9.2 (required only when release mode is exact)"
727 required : false
8- default : false
9- type : boolean
10- graduate :
11- description : " Graduate prereleases to stable"
12- required : false
13- default : false
14- type : boolean
28+ type : string
1529
1630jobs :
1731 prepare-release :
@@ -38,11 +52,83 @@ jobs:
3852 cache-path : " ${{ runner.tool_cache }}/flutter/:channel:-:version:-:arch:" # optional, change this to specify the cache path
3953 architecture : x64 # optional, x64 or arm64
4054
41- - name : Run Melos
55+ - name : Configure Git author
56+ run : |
57+ git config --global user.email "github-actions[bot]@users.noreply.github.com"
58+ git config --global user.name "github-actions[bot]"
59+
60+ - name : Prepare automatic version changes
61+ uses : bluefireteam/melos-action@v3
62+ with :
63+ melos-version : " 8.3.0"
64+ run-versioning : ${{ inputs.release_mode == 'stable' }}
65+ run-versioning-prerelease : ${{ inputs.release_mode == 'development-prerelease' }}
66+ run-versioning-graduate : ${{ inputs.release_mode == 'graduate-prerelease' }}
67+ publish-dry-run : false
68+ create-pr : false
69+
70+ - name : Validate exact version
71+ if : inputs.release_mode == 'exact'
72+ env :
73+ EXACT_VERSION : ${{ inputs.exact_version }}
74+ run : |
75+ if [ -z "$EXACT_VERSION" ]; then
76+ echo "::error::exact_version is required when release_mode is exact"
77+ exit 1
78+ fi
79+
80+ - name : Set exact package version
81+ if : inputs.release_mode == 'exact'
82+ env :
83+ EXACT_PACKAGE : ${{ inputs.exact_package }}
84+ EXACT_VERSION : ${{ inputs.exact_version }}
85+ run : >
86+ melos version "$EXACT_PACKAGE" "$EXACT_VERSION"
87+ --yes --no-git-tag-version --no-changelog
88+
89+ - name : Add exact release changelog stub
90+ if : inputs.release_mode == 'exact'
91+ env :
92+ EXACT_PACKAGE : ${{ inputs.exact_package }}
93+ EXACT_VERSION : ${{ inputs.exact_version }}
94+ run : |
95+ package_path=$(melos list --json --relative | jq -r \
96+ --arg package "$EXACT_PACKAGE" \
97+ '.[] | select(.name == $package) | .location')
98+ changelog_path="$package_path/CHANGELOG.md"
99+ if [ -z "$package_path" ] || [ ! -f "$changelog_path" ]; then
100+ echo "::error::Could not find CHANGELOG.md for $EXACT_PACKAGE"
101+ exit 1
102+ fi
103+ {
104+ printf '## %s\n\n - Stable release.\n\n' "$EXACT_VERSION"
105+ cat "$changelog_path"
106+ } > "$RUNNER_TEMP/exact-release-changelog.md"
107+ mv "$RUNNER_TEMP/exact-release-changelog.md" "$changelog_path"
108+ git add "$changelog_path"
109+ git commit --amend --no-edit
110+
111+ - name : Keep the documentation version aligned with NDK
112+ run : |
113+ ndk_version=$(awk '$1 == "version:" { print $2; exit }' packages/ndk/pubspec.yaml)
114+ sed -i -E "s/^ label: .*/ label: v${ndk_version}/" doc/retype.yml
115+
116+ if ! git diff --quiet -- doc/retype.yml; then
117+ git add doc/retype.yml
118+ git commit --amend --no-edit
119+ fi
120+
121+ - name : Build versioned release PR title
122+ id : release_pr
123+ env :
124+ RELEASE_KIND : ${{ (inputs.release_mode == 'development-prerelease' || (inputs.release_mode == 'exact' && contains(inputs.exact_version, '-'))) && 'prerelease' || 'release' }}
125+ run : bash .github/scripts/release-pr-title.sh HEAD "$RELEASE_KIND"
126+
127+ - name : Validate and create release PR
42128 uses : bluefireteam/melos-action@v3
43129 with :
44- run-versioning : ${{ inputs.prerelease == false }}
45- run-versioning-prerelease : ${{ inputs.prerelease == true }}
46- run-versioning-graduate : ${{ inputs.graduate == true }}
130+ melos-version : " 8.3.0"
131+ run-bootstrap : false
47132 publish-dry-run : true
48133 create-pr : true
134+ pr-title : ${{ steps.release_pr.outputs.pr_title }}
0 commit comments