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