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+ name : draft-new-release.yml
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 a new draft release and creates a template for the release notes.
4+ # It extracts pre-release and post-release tasks from pull request descriptions.
5+ # The required syntax is:
6+ # Pre-Release:
7+ # - Task 1
8+ # - Task 2
9+ # Post-Release:
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+ pre=$( echo " $pr_body " | sed -n ' /Pre-Release:/,/Post-Release:/p' | grep ' ^[*-]' || true)
32+ post=$( echo " $pr_body " | sed -n ' /Post-Release:/,$p' | grep ' ^[*-]' || true)
33+
34+ if [ -n " $pre " ]; then
35+ pre_release_tasks+="
36+ PR #$pr :
37+ $pre
38+ "
39+ fi
40+ if [ -n " $post " ]; then
41+ post_release_tasks+="
42+ PR #$pr :
43+ $post
44+ "
45+ fi
46+ done
47+
48+ release_body=" **Full Changelog**: https://github.com/nhsuk/manage-vaccinations-in-schools/compare/$latest_release ...$release_tag
49+ "
50+
51+ if [ -n " $pre_release_tasks " ]; then
52+ release_body+="
53+ ## Pre-Release Tasks
54+ ${pre_release_tasks}
55+ "
56+ fi
57+ if [ -n " $post_release_tasks " ]; then
58+ release_body+="
59+ ## Post-Release Tasks
60+ ${post_release_tasks}
61+ "
62+ fi
63+
64+ echo " $release_body " > release_notes.md
You can’t perform that action at this time.
0 commit comments