Skip to content

Commit d3d7f78

Browse files
authored
Merge pull request #45 from paulcheeba/v13.6.0.0
V13.6.0.0
2 parents 6658f81 + 3dde3b3 commit d3d7f78

File tree

11 files changed

+1375
-165
lines changed

11 files changed

+1375
-165
lines changed

.github/devFolder/posts/releaseNotes.md

Lines changed: 394 additions & 0 deletions
Large diffs are not rendered by default.

.github/workflows/pre-release.yml

Lines changed: 0 additions & 117 deletions
This file was deleted.

.github/workflows/release.yml

Lines changed: 192 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,31 @@
1-
name: Publish Release (About Time)
1+
name: Publish Pre/Release (Module-Agnostic 2.0)
22

33
on:
44
workflow_dispatch:
55
inputs:
66
version:
7-
description: "Module version (e.g. 13.0.5)"
7+
description: "Module version (e.g. 13.0.0.0)"
88
required: true
99
type: string
10-
prerelease:
11-
description: "Mark as pre-release?"
12-
required: false
13-
default: false
14-
type: boolean
10+
release_type:
11+
description: "Mark release as"
12+
required: true
13+
type: choice
14+
options:
15+
- pre-release
16+
- release (latest)
1517
draft:
1618
description: "Create as draft?"
1719
required: false
1820
default: false
1921
type: boolean
20-
make_latest:
21-
description: "Make this the 'latest' release? (true | false | legacy)"
22-
required: false
23-
default: "true"
22+
release_notes_mode:
23+
description: "Release notes"
24+
required: true
2425
type: choice
25-
options: [ "true", "false", "legacy" ]
26+
options:
27+
- auto
28+
- releaseNotes.md (fallback to auto)
2629

2730
permissions:
2831
contents: write
@@ -50,6 +53,53 @@ jobs:
5053
sudo apt-get update
5154
sudo apt-get install -y jq zip
5255
56+
- name: Compute package names & URLs
57+
id: pkg
58+
shell: bash
59+
run: |
60+
set -euo pipefail
61+
REPO_FULL="${GITHUB_REPOSITORY}" # owner/repo
62+
REPO_NAME="${REPO_FULL##*/}" # repo
63+
VERSION="${{ inputs.version }}"
64+
TAG="v${VERSION}"
65+
ZIPNAME="${REPO_NAME}.zip"
66+
67+
echo "repo_name=${REPO_NAME}" >> "$GITHUB_OUTPUT"
68+
echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
69+
echo "zip_name=${ZIPNAME}" >> "$GITHUB_OUTPUT"
70+
echo "manifest_url=https://github.com/${REPO_FULL}/releases/download/${TAG}/module.json" >> "$GITHUB_OUTPUT"
71+
echo "download_url=https://github.com/${REPO_FULL}/releases/download/${TAG}/${ZIPNAME}" >> "$GITHUB_OUTPUT"
72+
73+
- name: Compute release flags
74+
id: flags
75+
shell: bash
76+
run: |
77+
set -euo pipefail
78+
case "${{ inputs.release_type }}" in
79+
"pre-release")
80+
echo "prerelease=true" >> "$GITHUB_OUTPUT"
81+
echo "make_latest=false" >> "$GITHUB_OUTPUT"
82+
;;
83+
"release (latest)")
84+
echo "prerelease=false" >> "$GITHUB_OUTPUT"
85+
echo "make_latest=true" >> "$GITHUB_OUTPUT"
86+
;;
87+
*)
88+
echo "Unknown release_type: ${{ inputs.release_type }}" >&2
89+
exit 1
90+
;;
91+
esac
92+
93+
case "${{ inputs.release_notes_mode }}" in
94+
"auto"|"releaseNotes.md (fallback to auto)")
95+
echo "release_notes_mode=${{ inputs.release_notes_mode }}" >> "$GITHUB_OUTPUT"
96+
;;
97+
*)
98+
echo "Unknown release_notes_mode: ${{ inputs.release_notes_mode }}" >&2
99+
exit 1
100+
;;
101+
esac
102+
53103
- name: Validate module.json presence
54104
run: |
55105
test -f module.json || (echo "module.json not found at repo root." && exit 1)
@@ -58,11 +108,10 @@ jobs:
58108
shell: bash
59109
run: |
60110
set -euo pipefail
61-
REPO="${GITHUB_REPOSITORY}"
62111
VERSION="${{ inputs.version }}"
63112
64-
MANIFEST_URL="https://github.com/${REPO}/releases/latest/download/module.json"
65-
DOWNLOAD_URL="https://github.com/${REPO}/releases/latest/download/about-time-next.zip"
113+
MANIFEST_URL="${{ steps.pkg.outputs.manifest_url }}"
114+
DOWNLOAD_URL="${{ steps.pkg.outputs.download_url }}"
66115
67116
cp module.json module.json.bak
68117
@@ -98,7 +147,7 @@ jobs:
98147
shell: bash
99148
run: |
100149
set -euo pipefail
101-
ZIPNAME="about-time-next.zip"
150+
ZIPNAME="${{ steps.pkg.outputs.zip_name }}"
102151
rm -f "$ZIPNAME"
103152
# Create a clean ZIP with module files at the root.
104153
zip -r "$ZIPNAME" . \
@@ -113,20 +162,139 @@ jobs:
113162
114163
- name: Verify release assets exist
115164
run: |
116-
test -f about-time-next.zip || (echo "about-time-next.zip missing"; exit 1)
165+
test -f "${{ steps.pkg.outputs.zip_name }}" || (echo "ZIP missing: ${{ steps.pkg.outputs.zip_name }}"; exit 1)
117166
test -f module.json || (echo "module.json missing"; exit 1)
118167
119-
- name: Create/Update GitHub Release & Upload Assets
168+
- name: Build release notes from releaseNotes.md (fallback to auto)
169+
id: file_notes
170+
if: ${{ steps.flags.outputs.release_notes_mode == 'releaseNotes.md (fallback to auto)' }}
171+
shell: bash
172+
run: |
173+
set -euo pipefail
174+
175+
NOTES_FILE=".github/devFolder/posts/releaseNotes.md"
176+
if [ ! -f "$NOTES_FILE" ]; then
177+
echo "found=false" >> "$GITHUB_OUTPUT"
178+
echo "Release notes file not found: $NOTES_FILE. Will fall back to auto." >&2
179+
exit 0
180+
fi
181+
182+
# Extract the newest/top entry: from start of file until the first '---' separator line.
183+
awk '
184+
/^[[:space:]]*---[[:space:]]*$/ { exit }
185+
{ print }
186+
' "$NOTES_FILE" > release_body_file.md
187+
188+
if [ ! -s release_body_file.md ]; then
189+
echo "found=false" >> "$GITHUB_OUTPUT"
190+
echo "Release notes file exists but the extracted top entry was empty. Will fall back to auto." >&2
191+
exit 0
192+
fi
193+
194+
{
195+
echo
196+
echo "### Pinned URLs"
197+
echo
198+
echo "\`Manifest\`: ${{ steps.pkg.outputs.manifest_url }}"
199+
echo "\`Download\`: ${{ steps.pkg.outputs.download_url }}"
200+
} >> release_body_file.md
201+
202+
echo "found=true" >> "$GITHUB_OUTPUT"
203+
204+
- name: Generate auto release notes (and append tagged URLs)
205+
id: auto_notes
206+
if: ${{ steps.flags.outputs.release_notes_mode == 'auto' || (steps.flags.outputs.release_notes_mode == 'releaseNotes.md (fallback to auto)' && steps.file_notes.outputs.found != 'true') }}
207+
uses: actions/github-script@v7
208+
env:
209+
TAG: ${{ steps.pkg.outputs.tag }}
210+
MANIFEST_URL: ${{ steps.pkg.outputs.manifest_url }}
211+
DOWNLOAD_URL: ${{ steps.pkg.outputs.download_url }}
212+
with:
213+
script: |
214+
const tag = process.env.TAG;
215+
const manifestUrl = process.env.MANIFEST_URL;
216+
const downloadUrl = process.env.DOWNLOAD_URL;
217+
218+
// Uses GitHub's release notes generator so you still get the normal
219+
// auto-generated content, but we can append the pinned URLs.
220+
const resp = await github.rest.repos.generateReleaseNotes({
221+
owner: context.repo.owner,
222+
repo: context.repo.repo,
223+
tag_name: tag,
224+
target_commitish: context.sha,
225+
});
226+
227+
const generated = resp?.data?.body ?? '';
228+
const appended = `${generated}\n\n### Pinned URLs\n\n\`Manifest\`: ${manifestUrl}\n\`Download\`: ${downloadUrl}\n`;
229+
230+
const fs = require('fs');
231+
fs.writeFileSync('release_body_auto.md', appended, 'utf8');
232+
233+
- name: Create/Update GitHub Release (Auto notes) & Upload Assets
234+
if: ${{ steps.flags.outputs.release_notes_mode == 'auto' || (steps.flags.outputs.release_notes_mode == 'releaseNotes.md (fallback to auto)' && steps.file_notes.outputs.found != 'true') }}
120235
uses: softprops/action-gh-release@v2
121236
with:
122-
tag_name: v${{ inputs.version }}
123-
name: v${{ inputs.version }}
237+
tag_name: ${{ steps.pkg.outputs.tag }}
238+
name: ${{ steps.pkg.outputs.tag }}
124239
draft: ${{ inputs.draft }}
125-
prerelease: ${{ inputs.prerelease }}
126-
make_latest: ${{ inputs.make_latest }}
127-
generate_release_notes: true
240+
prerelease: ${{ steps.flags.outputs.prerelease }}
241+
make_latest: ${{ steps.flags.outputs.make_latest }}
242+
generate_release_notes: false
243+
body_path: release_body_auto.md
128244
files: |
129-
about-time-next.zip
245+
${{ steps.pkg.outputs.zip_name }}
130246
module.json
131247
env:
132248
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
249+
250+
- name: Create/Update GitHub Release (releaseNotes.md) & Upload Assets
251+
if: ${{ steps.flags.outputs.release_notes_mode == 'releaseNotes.md (fallback to auto)' && steps.file_notes.outputs.found == 'true' }}
252+
uses: softprops/action-gh-release@v2
253+
with:
254+
tag_name: ${{ steps.pkg.outputs.tag }}
255+
name: ${{ steps.pkg.outputs.tag }}
256+
draft: ${{ inputs.draft }}
257+
prerelease: ${{ steps.flags.outputs.prerelease }}
258+
make_latest: ${{ steps.flags.outputs.make_latest }}
259+
generate_release_notes: false
260+
body_path: release_body_file.md
261+
files: |
262+
${{ steps.pkg.outputs.zip_name }}
263+
module.json
264+
env:
265+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
266+
267+
- name: Write workflow summary
268+
shell: bash
269+
run: |
270+
set -euo pipefail
271+
272+
VERSION="${{ inputs.version }}"
273+
MANIFEST_URL="${{ steps.pkg.outputs.manifest_url }}"
274+
DOWNLOAD_URL="${{ steps.pkg.outputs.download_url }}"
275+
RELEASE_URL="https://github.com/${GITHUB_REPOSITORY}/releases/tag/${{ steps.pkg.outputs.tag }}"
276+
277+
{
278+
echo "## Release Summary"
279+
echo
280+
echo "- Repository: ${{ steps.pkg.outputs.repo_name }}"
281+
echo "- Version: ${VERSION}"
282+
echo "- Release Type: ${{ inputs.release_type }}"
283+
echo "- Draft?: ${{ inputs.draft }}"
284+
echo "- Manifest URL: ${MANIFEST_URL}"
285+
echo "- Download URL: ${DOWNLOAD_URL}"
286+
echo "- Release Page: ${RELEASE_URL}"
287+
echo "- Release Note Type: ${{ steps.flags.outputs.release_notes_mode }}"
288+
echo
289+
echo "### Release Note"
290+
291+
if [ "${{ steps.flags.outputs.release_notes_mode }}" = "releaseNotes.md (fallback to auto)" ] && [ "${{ steps.file_notes.outputs.found || '' }}" = "true" ]; then
292+
echo
293+
echo '```md'
294+
cat release_body_file.md
295+
echo '```'
296+
else
297+
echo
298+
echo "(Auto-generated by GitHub Releases; see the release page body.)"
299+
fi
300+
} >> "$GITHUB_STEP_SUMMARY"

0 commit comments

Comments
 (0)