Skip to content

Commit 09d1dd0

Browse files
committed
[GITHUB] Add weekly pre-releases workflow for Generals and GeneralsMD builds
1 parent 15a53d5 commit 09d1dd0

File tree

2 files changed

+245
-0
lines changed

2 files changed

+245
-0
lines changed

.github/workflows/base-version.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
0.9.1

.github/workflows/weekly-release.yml

Lines changed: 244 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,244 @@
1+
name: Weekly Release
2+
3+
permissions:
4+
contents: write
5+
pull-requests: write
6+
7+
on:
8+
workflow_dispatch:
9+
inputs:
10+
force_changed:
11+
description: 'Force build'
12+
required: false
13+
default: 'false'
14+
type: choice
15+
options:
16+
- 'false'
17+
- 'true'
18+
schedule:
19+
- cron: '0 8 * * 1'
20+
21+
concurrency:
22+
group: ${{ github.workflow }}-${{ github.ref }}
23+
cancel-in-progress: true
24+
25+
jobs:
26+
detect-scm-changes:
27+
runs-on: ubuntu-latest
28+
outputs:
29+
changed: ${{ steps.check.outputs.changed }}
30+
steps:
31+
- uses: actions/checkout@v4
32+
with:
33+
fetch-depth: 0
34+
fetch-tags: true
35+
- id: check
36+
run: |
37+
if [ "${{ github.event.inputs.force_changed }}" = "true" ]; then
38+
echo "changed=true" >> $GITHUB_OUTPUT
39+
exit 0
40+
fi
41+
42+
echo LAST TAG:
43+
git describe --tags --abbrev=0 2>/dev/null || echo ""
44+
45+
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
46+
if [ -z "$LAST_TAG" ]; then
47+
echo "changed=true" >> $GITHUB_OUTPUT
48+
exit 0
49+
fi
50+
CHANGED=$(git diff --name-only $LAST_TAG..HEAD | grep -v '.github/workflows/' | wc -l)
51+
if [ "$CHANGED" -eq "0" ]; then
52+
echo "changed=false" >> $GITHUB_OUTPUT
53+
else
54+
echo "changed=true" >> $GITHUB_OUTPUT
55+
fi
56+
57+
build-generals:
58+
needs: detect-scm-changes
59+
if: needs.detect-scm-changes.outputs.changed == 'true'
60+
name: Build Generals${{ matrix.preset && '' }}
61+
strategy:
62+
matrix:
63+
include:
64+
- preset: "vc6"
65+
tools: true
66+
extras: true
67+
- preset: "win32-vcpkg"
68+
tools: true
69+
extras: true
70+
fail-fast: false
71+
uses: ./.github/workflows/build-toolchain.yml
72+
with:
73+
game: "Generals"
74+
preset: ${{ matrix.preset }}
75+
tools: ${{ matrix.tools }}
76+
extras: ${{ matrix.extras }}
77+
secrets: inherit
78+
79+
build-generalsmd:
80+
needs: detect-scm-changes
81+
if: needs.detect-scm-changes.outputs.changed == 'true'
82+
name: Build GeneralsMD${{ matrix.preset && '' }}
83+
strategy:
84+
matrix:
85+
include:
86+
- preset: "vc6"
87+
tools: true
88+
extras: true
89+
- preset: "win32"
90+
tools: true
91+
extras: true
92+
fail-fast: false
93+
uses: ./.github/workflows/build-toolchain.yml
94+
with:
95+
game: "GeneralsMD"
96+
preset: ${{ matrix.preset }}
97+
tools: ${{ matrix.tools }}
98+
extras: ${{ matrix.extras }}
99+
secrets: inherit
100+
101+
create-release:
102+
name: Create Release
103+
needs: [ build-generals, build-generalsmd ]
104+
runs-on: ubuntu-latest
105+
steps:
106+
- name: Checkout repository
107+
uses: actions/checkout@v4
108+
with:
109+
fetch-depth: 0
110+
fetch-tags: true
111+
112+
- name: Read base version
113+
id: base_version
114+
run: echo "base_version=$(cat .github/workflows/base-version.txt)" >> $GITHUB_OUTPUT
115+
116+
- name: Get latest semver tag
117+
id: get_tag
118+
run: |
119+
BASE=${{ steps.base_version.outputs.base_version }}
120+
IFS='.' read -r major minor patch <<<"$BASE"
121+
TAG=$(git tag --list "$major.$minor*" --sort=-v:refname | head -n1)
122+
echo "latest_tag=$TAG" >> $GITHUB_OUTPUT
123+
124+
- name: Calculate next version
125+
id: next_version
126+
run: |
127+
BASE=${{ steps.base_version.outputs.base_version }}
128+
TAG=${{ steps.get_tag.outputs.latest_tag }}
129+
if [ -z "$TAG" ]; then
130+
NEXT_TAG="$BASE"
131+
else
132+
IFS='.' read -r major minor patch <<<"$TAG"
133+
NEXT_TAG="$major.$minor.$((patch+1))"
134+
fi
135+
echo "next_tag=$NEXT_TAG" >> $GITHUB_OUTPUT
136+
137+
- name: Collect commits since last release
138+
id: changelog
139+
run: |
140+
TAG=${{ steps.get_tag.outputs.latest_tag }}
141+
if [ -z "$TAG" ]; then
142+
echo "commits<<EOF" >> $GITHUB_OUTPUT
143+
git log --pretty=format:"- %s" >> $GITHUB_OUTPUT
144+
echo "EOF" >> $GITHUB_OUTPUT
145+
else
146+
echo "commits<<EOF" >> $GITHUB_OUTPUT
147+
git log "$TAG"..HEAD --pretty=format:"- %s" |grep -v "Sync Generals repos" >> $GITHUB_OUTPUT
148+
echo "EOF" >> $GITHUB_OUTPUT
149+
fi
150+
151+
# Generals vc6
152+
- name: Download Generals VC6 Artifacts
153+
uses: actions/download-artifact@v4
154+
with:
155+
name: Generals-vc6+t+e
156+
path: generals-vc6-artifacts
157+
158+
- name: Prepare and Zip Generals VC6
159+
run: |
160+
mkdir generals-vc6-release
161+
cp generals-vc6-artifacts/generalsv.exe generals-vc6-release/GeneralsV.exe
162+
cp generals-vc6-artifacts/W3DViewV.exe generals-vc6-release/W3DViewV.exe
163+
cp generals-vc6-artifacts/WorldBuilderV.exe generals-vc6-release/WorldBuilderV.exe
164+
zip -j generals-vc6-${{ steps.next_version.outputs.next_tag }}.zip generals-vc6-release/*
165+
166+
# Generals win32
167+
- name: Download Generals Win32 Artifacts
168+
uses: actions/download-artifact@v4
169+
with:
170+
name: Generals-win32-vcpkg+t+e
171+
path: generals-win32-artifacts
172+
173+
- name: Prepare and Zip Generals Win32
174+
run: |
175+
mkdir generals-win32-release
176+
cp generals-win32-artifacts/generalsv.exe generals-win32-release/GeneralsV.exe
177+
cp generals-win32-artifacts/W3DViewV.exe generals-win32-release/W3DViewV.exe
178+
cp generals-win32-artifacts/WorldBuilderV.exe generals-win32-release/WorldBuilderV.exe
179+
zip -j generals-win32-${{ steps.next_version.outputs.next_tag }}.zip generals-win32-release/*
180+
181+
# GeneralsMD vc6
182+
- name: Download GeneralsMD VC6 Artifacts
183+
uses: actions/download-artifact@v4
184+
with:
185+
name: GeneralsMD-vc6+t+e
186+
path: generalsmd-vc6-artifacts
187+
188+
- name: Prepare and Zip GeneralsMD VC6
189+
run: |
190+
mkdir generalsmd-vc6-release
191+
cp generalsmd-vc6-artifacts/generalszh.exe generalsmd-vc6-release/GeneralsZHv.exe
192+
cp generalsmd-vc6-artifacts/W3DViewZH.exe generalsmd-vc6-release/W3DViewZHv.exe
193+
cp generalsmd-vc6-artifacts/WorldBuilderZH.exe generalsmd-vc6-release/WorldBuilderZHv.exe
194+
zip -j generalszh-vc6-${{ steps.next_version.outputs.next_tag }}.zip generalsmd-vc6-release/*
195+
196+
# GeneralsMD win32
197+
- name: Download GeneralsMD Win32 Artifacts
198+
uses: actions/download-artifact@v4
199+
with:
200+
name: GeneralsMD-win32+t+e
201+
path: generalsmd-win32-artifacts
202+
203+
- name: Prepare and Zip GeneralsMD Win32
204+
run: |
205+
mkdir generalsmd-win32-release
206+
cp generalsmd-win32-artifacts/generalszh.exe generalsmd-win32-release/GeneralsZHv.exe
207+
cp generalsmd-win32-artifacts/W3DViewZH.exe generalsmd-win32-release/W3DViewZHv.exe
208+
cp generalsmd-win32-artifacts/WorldBuilderZH.exe generalsmd-win32-release/WorldBuilderZHv.exe
209+
zip -j generalszh-win32-${{ steps.next_version.outputs.next_tag }}.zip generalsmd-win32-release/*
210+
211+
- name: Create GitHub Release
212+
uses: softprops/action-gh-release@v2
213+
with:
214+
tag_name: ${{ steps.next_version.outputs.next_tag }}
215+
name: ${{ steps.next_version.outputs.next_tag }}
216+
body: |
217+
**Build notes:**
218+
219+
- **VC6 builds**: May be less compatible with modern systems, but guarantee compatibility with the original binary for multiplayer.
220+
- **Win32 builds**: Offer better compatibility with modern systems, but multiplayer will only work with other win32 builds.
221+
222+
**Known issues:**
223+
224+
- Fullscreen executable is currently broken. You must add the `-win` parameter to run the game in windowed mode.
225+
226+
**Changelog:**
227+
${{ steps.changelog.outputs.commits }}
228+
files: |
229+
generals-vc6-${{ steps.next_version.outputs.next_tag }}.zip
230+
generals-win32-${{ steps.next_version.outputs.next_tag }}.zip
231+
generalszh-vc6-${{ steps.next_version.outputs.next_tag }}.zip
232+
generalszh-win32-${{ steps.next_version.outputs.next_tag }}.zip
233+
env:
234+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
235+
236+
- name: Clean up release folders
237+
if: always()
238+
run: |
239+
rm -rf generals-vc6-release generals-win32-release generalsmd-vc6-release generalsmd-win32-release
240+
rm -rf generals-vc6-artifacts generals-win32-artifacts generalsmd-vc6-artifacts generalsmd-win32-artifacts
241+
rm -f generals-vc6-${{ steps.next_version.outputs.next_tag }}.zip
242+
rm -f generals-win32-${{ steps.next_version.outputs.next_tag }}.zip
243+
rm -f generalszh-vc6-${{ steps.next_version.outputs.next_tag }}.zip
244+
rm -f generalszh-win32-${{ steps.next_version.outputs.next_tag }}.zip

0 commit comments

Comments
 (0)