@@ -11,8 +11,7 @@ usage() {
1111 cat << - EOF
1212 Usage: bin/release VERSION
1313
14- Creates a release commit, annotated tag, and GitHub release for VERSION.
15- The GitHub release is not marked as latest automatically.
14+ Creates a release branch and pull request for VERSION.
1615EOF
1716}
1817
@@ -85,18 +84,25 @@ validate_version() {
8584validate_release_request () {
8685 branch=$( current_branch)
8786 default=$( default_branch)
87+ release_branch=" release/$version "
8888
8989 [ " $branch " = " $default " ] \
9090 || die " run releases from $default , not $branch "
9191
9292 git diff --quiet -- bin/g CHANGELOG.md \
9393 || die " bin/g or CHANGELOG.md has uncommitted changes"
9494
95- git rev-parse -q --verify " refs/tags/$version " > /dev/null \
96- && die " tag already exists: $version "
95+ if git rev-parse -q --verify " refs/tags/$version " > /dev/null; then
96+ die " tag already exists: $version "
97+ fi
98+
99+ if gh release view " $version " > /dev/null 2>&1 ; then
100+ die " release already exists: $version "
101+ fi
97102
98- gh release view " $version " > /dev/null 2>&1 \
99- && die " release already exists: $version "
103+ if git ls-remote --exit-code --heads origin " $release_branch " > /dev/null 2>&1 ; then
104+ die " release branch already exists: $release_branch "
105+ fi
100106}
101107
102108prepare_release_files () {
@@ -150,6 +156,7 @@ prepare_release_files() {
150156 }
151157 }
152158 ' bin/g > bin/g.tmp
159+ chmod +x bin/g.tmp
153160 mv bin/g.tmp bin/g
154161
155162 awk -v version=" $version " '
@@ -173,28 +180,35 @@ prepare_release_files() {
173180validate_release_files () {
174181 make format
175182 make lint
183+ }
184+
185+ validate_source_files () {
186+ make format
187+ make lint
176188 make test
177189}
178190
179- commit_and_tag_release () {
180- if [ -n " ${GITHUB_ACTIONS:- } " ]; then
181- git config user.name ' github-actions[bot]'
182- git config user.email ' 41898282+github-actions[bot]@users.noreply.github.com'
183- fi
191+ create_release_pr () {
192+ release_branch=" release/$version "
184193
194+ git checkout -B " $release_branch "
185195 git add bin/g CHANGELOG.md
186- git commit -m " $version "
187- git tag -a " $version " -F release-notes.md
188- git push origin " HEAD:$( current_branch) " " $version "
189- }
190196
191- create_github_release () {
192- gh release create " $version " \
197+ if [ -n " ${GITHUB_ACTIONS:- } " ]; then
198+ git \
199+ -c user.name=' github-actions[bot]' \
200+ -c user.email=' 41898282+github-actions[bot]@users.noreply.github.com' \
201+ commit -m " $version "
202+ else
203+ git commit -m " $version "
204+ fi
205+
206+ git push --set-upstream origin " $release_branch "
207+ gh pr create \
208+ --base " $( default_branch) " \
209+ --head " $release_branch " \
193210 --title " $version " \
194- --notes-file release-notes.md \
195- --latest=false \
196- bin/g \
197- bin/install
211+ --body-file release-notes.md
198212}
199213
200214version=${1:- }
@@ -218,7 +232,7 @@ require_command make
218232
219233validate_version " $version "
220234validate_release_request
235+ validate_source_files
221236prepare_release_files
222237validate_release_files
223- commit_and_tag_release
224- create_github_release
238+ create_release_pr
0 commit comments