Skip to content

Commit c3a99a7

Browse files
committed
CI: add cut_release to nightly CI and turn off cron job
1 parent 451a699 commit c3a99a7

File tree

1 file changed

+132
-62
lines changed

1 file changed

+132
-62
lines changed
Lines changed: 132 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,114 +1,184 @@
1+
# Release workflow for myMCpp (on each push to master).
2+
# Inspired by PCSX2's release workflow.
3+
14
name: 🌙 Nightly Builds
25

36
on:
4-
schedule:
5-
- cron: '0 0 * * *'
6-
workflow_dispatch:
7+
push:
8+
branches:
9+
- master
710

811
permissions:
912
contents: write
1013

1114
jobs:
15+
cut_release:
16+
if: github.repository == 'PCSX2/myMCpp'
17+
name: 'Create tag and draft release'
18+
runs-on: ubuntu-latest
19+
outputs:
20+
new_tag: ${{ steps.release_meta.outputs.new_tag }}
21+
release_name: ${{ steps.release_meta.outputs.release_name }}
22+
steps:
23+
- uses: actions/checkout@v6.0.2
24+
with:
25+
fetch-depth: 0
26+
27+
- name: Tag, notes, and draft release
28+
id: release_meta
29+
env:
30+
GH_TOKEN: ${{ github.token }}
31+
shell: bash
32+
run: |
33+
set -euo pipefail
34+
git fetch --tags --no-recurse-submodules
35+
36+
SHA="${{ github.sha }}"
37+
38+
bump_patch() {
39+
local t="${1#v}"
40+
local major minor patch
41+
IFS=. read -r major minor patch <<< "${t%%-*}"
42+
major=${major:-0}
43+
minor=${minor:-0}
44+
patch=${patch:-0}
45+
echo "v$((major)).$((minor)).$((patch + 1))"
46+
}
47+
48+
LATEST="$(git tag -l 'v[0-9]*' --sort=-version:refname | head -1 || true)"
49+
if [ -z "$LATEST" ]; then LATEST="v0.0.0"; fi
50+
TAG="$(bump_patch "$LATEST")"
51+
NAME="myMCpp ${TAG}"
52+
PRERELEASE=true
53+
54+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
55+
git config user.name "github-actions[bot]"
56+
57+
git tag -fa "$TAG" -m "$NAME" "$SHA"
58+
git push -f origin "refs/tags/$TAG"
59+
60+
gh api "repos/${{ github.repository }}/releases/generate-notes" \
61+
-f tag_name="$TAG" \
62+
-f target_commitish="$SHA" \
63+
--jq .body > "$GITHUB_WORKSPACE/release-notes.md"
64+
65+
gh release delete "$TAG" --yes 2>/dev/null || true
66+
EXTRA=""
67+
if [ "$PRERELEASE" = true ]; then EXTRA="--prerelease"; fi
68+
gh release create "$TAG" \
69+
--draft \
70+
$EXTRA \
71+
--title "$NAME" \
72+
--notes-file "$GITHUB_WORKSPACE/release-notes.md" \
73+
--target "$SHA"
74+
75+
echo "new_tag=${TAG}" >> "$GITHUB_OUTPUT"
76+
echo "release_name=${NAME}" >> "$GITHUB_OUTPUT"
77+
1278
build_linux_clang:
13-
name: "🐧 Linux (Clang, Nightly)"
79+
if: github.repository == 'PCSX2/myMCpp'
80+
name: '🐧 Linux (Clang, Nightly)'
81+
needs: cut_release
1482
uses: ./.github/workflows/linux_build.yml
1583
with:
16-
jobName: "Linux Clang Nightly Build"
17-
artifactPrefixName: "myMCpp-nightly-linux-x64-clang"
84+
jobName: 'Linux Clang Nightly Build'
85+
artifactPrefixName: 'myMCpp-nightly-linux-x64-clang'
1886
compiler: clang
1987
fetchTags: true
2088
secrets: inherit
2189

2290
build_linux_gcc:
23-
name: "🐧 Linux (GCC, Nightly)"
91+
if: github.repository == 'PCSX2/myMCpp'
92+
name: '🐧 Linux (GCC, Nightly)'
93+
needs: cut_release
2494
uses: ./.github/workflows/linux_build.yml
2595
with:
26-
jobName: "Linux GCC Nightly Build"
27-
artifactPrefixName: "myMCpp-nightly-linux-x64-gcc"
96+
jobName: 'Linux GCC Nightly Build'
97+
artifactPrefixName: 'myMCpp-nightly-linux-x64-gcc'
2898
compiler: gcc
2999
fetchTags: true
30100
secrets: inherit
31101

32102
build_macos:
33-
name: "🍎 macOS (Nightly)"
103+
if: github.repository == 'PCSX2/myMCpp'
104+
name: '🍎 macOS (Nightly)'
105+
needs: cut_release
34106
uses: ./.github/workflows/macos_build.yml
35107
with:
36-
jobName: "macOS Nightly Build"
37-
artifactPrefixName: "myMCpp-nightly-macos-universal"
108+
jobName: 'macOS Nightly Build'
109+
artifactPrefixName: 'myMCpp-nightly-macos-universal'
38110
fetchTags: true
39111
secrets: inherit
40112

41113
build_windows_x64_clang:
42-
name: "🪟 Windows x64 (Clang, Nightly)"
114+
if: github.repository == 'PCSX2/myMCpp'
115+
name: '🪟 Windows x64 (Clang, Nightly)'
116+
needs: cut_release
43117
uses: ./.github/workflows/windows_build.yml
44118
with:
45-
jobName: "Windows x64 Clang Nightly Build"
46-
artifactPrefixName: "myMCpp-nightly-windows-x64-clang"
119+
jobName: 'Windows x64 Clang Nightly Build'
120+
artifactPrefixName: 'myMCpp-nightly-windows-x64-clang'
47121
platform: x64
48122
compiler: clang
49123
fetchTags: true
50124
secrets: inherit
51125

52126
build_windows_x64_msvc:
53-
name: "🪟 Windows x64 (MSVC, Nightly)"
127+
if: github.repository == 'PCSX2/myMCpp'
128+
name: '🪟 Windows x64 (MSVC, Nightly)'
129+
needs: cut_release
54130
uses: ./.github/workflows/windows_build.yml
55131
with:
56-
jobName: "Windows x64 MSVC Nightly Build"
57-
artifactPrefixName: "myMCpp-nightly-windows-x64-msvc"
132+
jobName: 'Windows x64 MSVC Nightly Build'
133+
artifactPrefixName: 'myMCpp-nightly-windows-x64-msvc'
58134
platform: x64
59135
compiler: msvc
60136
fetchTags: true
61137
secrets: inherit
62138

63139
build_windows_arm64_clang:
64-
name: "🪟 Windows ARM64 (Clang, Nightly)"
140+
if: github.repository == 'PCSX2/myMCpp'
141+
name: '🪟 Windows ARM64 (Clang, Nightly)'
142+
needs: cut_release
65143
uses: ./.github/workflows/windows_build.yml
66144
with:
67-
jobName: "Windows ARM64 Clang Nightly Build"
68-
artifactPrefixName: "myMCpp-nightly-windows-arm64-clang"
145+
jobName: 'Windows ARM64 Clang Nightly Build'
146+
artifactPrefixName: 'myMCpp-nightly-windows-arm64-clang'
69147
os: windows-11-arm
70148
platform: ARM64
71149
compiler: clang
72150
fetchTags: true
73151
secrets: inherit
74152

75153
build_windows_arm64_msvc:
76-
name: "🪟 Windows ARM64 (MSVC, Nightly)"
154+
if: github.repository == 'PCSX2/myMCpp'
155+
name: '🪟 Windows ARM64 (MSVC, Nightly)'
156+
needs: cut_release
77157
uses: ./.github/workflows/windows_build.yml
78158
with:
79-
jobName: "Windows ARM64 MSVC Nightly Build"
80-
artifactPrefixName: "myMCpp-nightly-windows-arm64-msvc"
159+
jobName: 'Windows ARM64 MSVC Nightly Build'
160+
artifactPrefixName: 'myMCpp-nightly-windows-arm64-msvc'
81161
os: windows-11-arm
82162
platform: ARM64
83163
compiler: msvc
84164
fetchTags: true
85165
secrets: inherit
86166

87-
nightly_release:
88-
name: "📦 Create Nightly Pre-Release"
167+
upload_and_publish:
168+
if: github.repository == 'PCSX2/myMCpp'
169+
name: '📦 Upload assets and publish release'
89170
runs-on: ubuntu-latest
90171
needs:
172+
- cut_release
91173
- build_linux_clang
92174
- build_linux_gcc
93175
- build_macos
94176
- build_windows_x64_clang
95177
- build_windows_x64_msvc
96178
- build_windows_arm64_clang
97179
- build_windows_arm64_msvc
98-
99180
steps:
100-
- name: Checkout repository
101-
uses: actions/checkout@v6.0.2
102-
103-
- name: Determine nightly tag
104-
id: nightly_tag
105-
shell: bash
106-
run: |
107-
DATE="$(date +'%Y%m%d')"
108-
TAG="nightly-${DATE}"
109-
NAME="myMCpp Nightly ${DATE}"
110-
echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
111-
echo "name=${NAME}" >> "$GITHUB_OUTPUT"
181+
- uses: actions/checkout@v6.0.2
112182

113183
- name: Download all artifacts
114184
uses: actions/download-artifact@v8.0.1
@@ -120,29 +190,25 @@ jobs:
120190

121191
- name: Prepare release assets
122192
shell: bash
193+
env:
194+
TAG: ${{ needs.cut_release.outputs.new_tag }}
123195
run: |
196+
set -euo pipefail
124197
mkdir -p release-assets
125-
TAG="${{ steps.nightly_tag.outputs.tag }}"
126198
127199
for dir in artifacts/*/; do
128200
dirname="$(basename "$dir")"
129201
130-
# Skip symbol artifacts
131202
if [[ "$dirname" == *"-symbols" ]]; then
132203
continue
133204
fi
134205
135206
echo "Processing: $dirname"
136207
137-
# Windows artifacts: zip the directory contents
138208
if [[ "$dirname" == *"windows"* ]]; then
139209
asset_name="myMCpp-${TAG}-${dirname#myMCpp-nightly-}.zip"
140210
echo " -> Creating $asset_name"
141-
cd "$dir"
142-
zip -r "../../release-assets/$asset_name" ./*
143-
cd ../..
144-
145-
# macOS artifacts: move the .tar.xz as-is
211+
(cd "$dir" && zip -r "../../release-assets/$asset_name" ./*)
146212
elif [[ "$dirname" == *"macos"* ]]; then
147213
for f in "$dir"*.tar.xz; do
148214
if [ -f "$f" ]; then
@@ -151,8 +217,6 @@ jobs:
151217
cp "$f" "release-assets/$asset_name"
152218
fi
153219
done
154-
155-
# Linux artifacts: move AppImage as-is
156220
elif [[ "$dirname" == *"linux"* ]]; then
157221
for f in "$dir"*.AppImage; do
158222
if [ -f "$f" ]; then
@@ -168,17 +232,23 @@ jobs:
168232
echo "=== Final release assets ==="
169233
ls -la release-assets/
170234
171-
- name: Create GitHub pre-release with assets
172-
uses: softprops/action-gh-release@v2.5.0
173-
with:
174-
tag_name: ${{ steps.nightly_tag.outputs.tag }}
175-
name: ${{ steps.nightly_tag.outputs.name }}
176-
target_commitish: ${{ github.sha }}
177-
prerelease: true
178-
draft: false
179-
make_latest: false
180-
generate_release_notes: true
181-
files: |
182-
release-assets/*
235+
- name: Upload release assets
236+
env:
237+
GH_TOKEN: ${{ github.token }}
238+
TAG: ${{ needs.cut_release.outputs.new_tag }}
239+
shell: bash
240+
run: |
241+
set -euo pipefail
242+
shopt -s nullglob
243+
files=(release-assets/*)
244+
if [ ${#files[@]} -eq 0 ]; then
245+
echo "No release assets to upload."
246+
exit 1
247+
fi
248+
gh release upload "$TAG" "${files[@]}" --clobber
249+
250+
- name: Publish release
183251
env:
184-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
252+
GH_TOKEN: ${{ github.token }}
253+
TAG: ${{ needs.cut_release.outputs.new_tag }}
254+
run: gh release edit "$TAG" --draft=false

0 commit comments

Comments
 (0)