55 branches :
66 - main
77 - master
8+ tags :
9+ - " *-agm"
10+ - " *-egm"
811
912jobs :
10- build-and-release :
13+ build :
1114 runs-on : ubuntu-latest
15+
1216 steps :
1317 - name : Checkout Repository
1418 uses : actions/checkout@v3
2024
2125 - name : Convert Markdown to PDF
2226 run : |
23- DATE=$(date -u +'%Y-%m-%dT%H:%M')
24- echo "Timestamp: $DATE"
25- CONSTITUTION_FILE="Constitution-${DATE}.pdf"
26- COMMON_ROOM_FILE="Common-Room-Rules-${DATE}.pdf"
27+ CONSTITUTION_FILE="Constitution.pdf"
28+ COMMON_ROOM_FILE="Common-Room-Rules.pdf"
2729
2830 curl -L -o logo.svg "https://raw.githubusercontent.com/redbrick/design-system/main/assets/logos/redbrick.svg"
2931
@@ -42,33 +44,124 @@ jobs:
4244 echo "CONSTITUTION_FILE=$CONSTITUTION_FILE" >> $GITHUB_ENV
4345 echo "COMMON_ROOM_FILE=$COMMON_ROOM_FILE" >> $GITHUB_ENV
4446
45- - name : Create Release
46- id : create_release
47+ # Master Release (Rolling)
48+
49+ - name : Delete existing master release and tag
50+ if : github.event_name == 'push' && startsWith(github.ref, 'refs/heads/')
51+ run : |
52+ gh release delete master --yes || true
53+ git push origin :refs/tags/master || true
54+ env :
55+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
56+
57+ - name : Get previous AGM/EGM tag
58+ id : last_tag
59+ if : github.event_name == 'push' && startsWith(github.ref, 'refs/heads/')
60+ run : |
61+ git fetch --tags
62+ TAG=$(git tag --list "*-agm" "*-egm" --sort=-creatordate | head -n 1)
63+ echo "LAST_TAG=$TAG" >> $GITHUB_ENV
64+ echo "Found last AGM/EGM tag: $TAG"
65+
66+ - name : Generate changelog
67+ id : changelog
68+ if : github.event_name == 'push' && startsWith(github.ref, 'refs/heads/')
69+ run : |
70+ if [ -n "$LAST_TAG" ]; then
71+ LOG=$(gh api repos/${{ github.repository }}/compare/$LAST_TAG...HEAD \
72+ --jq '.commits | map("- " + .commit.message + " by @" + .author.login) | join("\n")')
73+ echo -e "## What's Changed\n$LOG\n\nFull Changelog: https://github.com/${{ github.repository }}/compare/$LAST_TAG...master" > RELEASE.md
74+ else
75+ echo "## What's Changed\nNo previous AGM/EGM tag found." > RELEASE.md
76+ fi
77+ env :
78+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
79+ LAST_TAG : ${{ env.LAST_TAG }}
80+
81+ - name : Create master Release with changelog
82+ if : github.event_name == 'push' && startsWith(github.ref, 'refs/heads/')
83+ run : |
84+ gh release create master \
85+ --title "master Build" \
86+ --notes-file RELEASE.md \
87+ --prerelease \
88+ --target ${{ github.sha }}
89+ env :
90+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
91+
92+ - name : Get master release upload URL (retry if not found)
93+ if : github.event_name == 'push' && startsWith(github.ref, 'refs/heads/')
94+ id : get_master_upload_url
95+ run : |
96+ for i in {1..5}; do
97+ echo "Attempt $i to fetch master release upload URL..."
98+ UPLOAD_URL=$(gh api repos/${{ github.repository }}/releases/tags/master --jq '.upload_url' 2>/dev/null) && break || sleep 3
99+ done
100+
101+ if [ -z "$UPLOAD_URL" ]; then
102+ echo "Failed to fetch upload_url after 5 attempts"
103+ exit 1
104+ fi
105+
106+ echo "upload_url=${UPLOAD_URL}" >> $GITHUB_OUTPUT
107+ env :
108+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
109+
110+ - name : Upload Constitution PDF (master)
111+ if : github.event_name == 'push' && startsWith(github.ref, 'refs/heads/')
112+ uses : actions/upload-release-asset@v1
113+ env :
114+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
115+ with :
116+ upload_url : ${{ steps.get_master_upload_url.outputs.upload_url }}
117+ asset_path : ${{ env.CONSTITUTION_FILE }}
118+ asset_name : Constitution.pdf
119+ asset_content_type : application/pdf
120+
121+ - name : Upload Common Room PDF (master)
122+ if : github.event_name == 'push' && startsWith(github.ref, 'refs/heads/')
123+ uses : actions/upload-release-asset@v1
124+ env :
125+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
126+ with :
127+ upload_url : ${{ steps.get_master_upload_url.outputs.upload_url }}
128+ asset_path : ${{ env.COMMON_ROOM_FILE }}
129+ asset_name : Common-Room-Rules.pdf
130+ asset_content_type : application/pdf
131+
132+ # Tagged Release (AGM/EGM)
133+
134+ - name : Create AGM/EGM Tag Release
135+ if : startsWith(github.ref, 'refs/tags/') && (contains(github.ref, '-agm') || contains(github.ref, '-egm'))
136+ id : create_tag_release
47137 uses : actions/create-release@v1
48138 env :
49139 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
50140 with :
51- tag_name : " v ${{ github.run_number }}"
52- release_name : " Release v ${{ github.run_number }}"
141+ tag_name : ${{ github.ref_name }}
142+ release_name : " Release ${{ github.ref_name }}"
53143 draft : false
54- prerelease : true
144+ prerelease : false
55145
56- - name : Upload Constitution.pdf
146+ - name : Upload Constitution PDF (tag)
147+ if : startsWith(github.ref, 'refs/tags/') && (contains(github.ref, '-agm') || contains(github.ref, '-egm'))
57148 uses : actions/upload-release-asset@v1
58149 env :
59150 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
60151 with :
61- upload_url : ${{ steps.create_release .outputs.upload_url }}
152+ upload_url : ${{ steps.create_tag_release .outputs.upload_url }}
62153 asset_path : ${{ env.CONSTITUTION_FILE }}
63- asset_name : ${{ env.CONSTITUTION_FILE }}
154+ asset_name : Constitution.pdf
64155 asset_content_type : application/pdf
65156
66- - name : Upload Common-Room-Rules.pdf
157+ - name : Upload Common Room PDF (tag)
158+ if : startsWith(github.ref, 'refs/tags/') && (contains(github.ref, '-agm') || contains(github.ref, '-egm'))
67159 uses : actions/upload-release-asset@v1
68160 env :
69161 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
70162 with :
71- upload_url : ${{ steps.create_release .outputs.upload_url }}
163+ upload_url : ${{ steps.create_tag_release .outputs.upload_url }}
72164 asset_path : ${{ env.COMMON_ROOM_FILE }}
73- asset_name : ${{ env.COMMON_ROOM_FILE }}
165+ asset_name : Common-Room-Rules.pdf
74166 asset_content_type : application/pdf
167+
0 commit comments