File tree Expand file tree Collapse file tree 2 files changed +94
-0
lines changed Expand file tree Collapse file tree 2 files changed +94
-0
lines changed Original file line number Diff line number Diff line change
1
+ name : draft-new-release.yml
2
+ on :
3
+ push :
4
+ branches :
5
+ - release_note_creation
6
+ workflow_dispatch :
7
+ inputs :
8
+ release_tag :
9
+ required : true
10
+ description : Release tag
11
+
12
+ jobs :
13
+ create-release-notes :
14
+ runs-on : ubuntu-latest
15
+ steps :
16
+ - name : Checkout repository
17
+ uses : actions/checkout@v4
18
+ - name : Generate release notes
19
+ env :
20
+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
21
+ run : ../../script/draft_new_release.sh ${{ inputs.release_tag }}
22
+ - name : Create GitHub Release
23
+ env :
24
+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
25
+ run : |
26
+ gh release create "${{ inputs.release_tag }} \
27
+ --title "Draft release ${{ inputs.release_tag }}
28
+ --notes-file release_notes.md
29
+ --draft
30
+
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