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