Skip to content

Commit b668cf2

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

File tree

2 files changed

+213
-0
lines changed

2 files changed

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

0 commit comments

Comments
 (0)