File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ ## Screenshots
2+
3+ ## Pre-release tasks
4+
5+ - ...
6+
7+ ## Post-release tasks
8+
9+ - ...
Original file line number Diff line number Diff line change 1+ name : Draft new release
2+ run-name : Draft release notes for ${{ inputs.release_tag }}
3+ permissions :
4+ contents : write
5+
6+ on :
7+ workflow_dispatch :
8+ inputs :
9+ release_tag :
10+ required : true
11+ description : Release tag
12+
13+ jobs :
14+ create-release-notes :
15+ runs-on : ubuntu-latest
16+ steps :
17+ - name : Checkout repository
18+ uses : actions/checkout@v5
19+ with :
20+ fetch-depth : 0
21+ - name : Generate release notes
22+ env :
23+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
24+ run : script/draft_new_release.sh ${{ inputs.release_tag }}
25+ - name : Create GitHub Release
26+ env :
27+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
28+ run : |
29+ gh release create "${{ inputs.release_tag }}" \
30+ --title "Draft release ${{ inputs.release_tag }}" \
31+ --notes-file release_notes.md \
32+ --draft
33+
Original file line number Diff line number Diff line change 1+ #! /usr/bin/env bash
2+
3+ # This script creates draft release notes for a release.
4+ # It extracts pre-release and post-release tasks from pull request descriptions.
5+ # The required syntax is:
6+ # ## Pre-release tasks
7+ # - Task 1
8+ # - Task 2
9+ # ## Post-release tasks
10+ # - Task 3
11+
12+ set -e
13+
14+ if [ " $# " -ne 1 ]; then
15+ echo " Usage: $0 <release_tag>"
16+ exit 1
17+ fi
18+
19+ release_tag=$1
20+ latest_release=$( gh release list --json name,isLatest --jq ' .[] | select(.isLatest)|.name' )
21+
22+ merge_base=$( git merge-base origin/main origin/next)
23+ pr_numbers=$( git log --pretty=format:" %s" $merge_base ..origin/next | grep -oE ' Merge pull request #([0-9]+)' | grep -oE ' [0-9]+' )
24+
25+ pre_release_tasks=" "
26+ post_release_tasks=" "
27+
28+ for pr in $pr_numbers ; do
29+ echo " Processing PR #$pr "
30+ pr_body=$( gh pr view " $pr " --json body -q ' .body' )
31+
32+ pre=$( echo " $pr_body " | sed -n ' /## Pre-release tasks/,/## Post-release tasks/p' | grep ' ^[*-]' | grep -v ' ^- \.\.\.' || true)
33+ post=$( echo " $pr_body " | sed -n ' /## Post-release tasks/,$p' | grep ' ^[*-]' | grep -v ' ^- \.\.\.' || true)
34+
35+ if [ -n " $pre " ]; then
36+ pre_release_tasks+="
37+ PR #$pr :
38+ $pre
39+ "
40+ fi
41+ if [ -n " $post " ]; then
42+ post_release_tasks+="
43+ PR #$pr :
44+ $post
45+ "
46+ fi
47+ done
48+
49+ release_body=" **Full Changelog**: https://github.com/nhsuk/manage-vaccinations-in-schools/compare/$latest_release ...$release_tag
50+ "
51+
52+ if [ -n " $pre_release_tasks " ]; then
53+ release_body+="
54+ ## Pre-release tasks
55+ ${pre_release_tasks}
56+ "
57+ fi
58+ if [ -n " $post_release_tasks " ]; then
59+ release_body+="
60+ ## Post-release tasks
61+ ${post_release_tasks}
62+ "
63+ fi
64+
65+ echo " $release_body " > release_notes.md
You can’t perform that action at this time.
0 commit comments