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 : Set Date Output
93
+ id : set_date
94
+ run : echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
95
+
96
+ # Generals vc6
97
+ - name : Download Generals VC6 Artifacts
98
+ uses : actions/download-artifact@v4
99
+ with :
100
+ name : Generals-vc6+t+e
101
+ path : generals-vc6-artifacts
102
+
103
+ - name : Prepare and Zip Generals VC6
104
+ run : |
105
+ mkdir generals-vc6-release
106
+ cp generals-vc6-artifacts/generalsv.exe generals-vc6-release/GeneralsV.exe
107
+ cp generals-vc6-artifacts/W3DViewV.exe generals-vc6-release/W3DViewV.exe
108
+ cp generals-vc6-artifacts/WorldBuilderV.exe generals-vc6-release/WorldBuilderV.exe
109
+ zip -j generals-vc6-${{ steps.set_date.outputs.date }}-weekly.zip generals-vc6-release/*
110
+
111
+ # Generals win32
112
+ - name : Download Generals Win32 Artifacts
113
+ uses : actions/download-artifact@v4
114
+ with :
115
+ name : Generals-win32-vcpkg+t+e
116
+ path : generals-win32-artifacts
117
+
118
+ - name : Prepare and Zip Generals Win32
119
+ run : |
120
+ mkdir generals-win32-release
121
+ cp generals-win32-artifacts/generalsv.exe generals-win32-release/GeneralsV.exe
122
+ cp generals-win32-artifacts/W3DViewV.exe generals-win32-release/W3DViewV.exe
123
+ cp generals-win32-artifacts/WorldBuilderV.exe generals-win32-release/WorldBuilderV.exe
124
+ zip -j generals-win32-${{ steps.set_date.outputs.date }}-weekly.zip generals-win32-release/*
125
+
126
+ # GeneralsMD vc6
127
+ - name : Download GeneralsMD VC6 Artifacts
128
+ uses : actions/download-artifact@v4
129
+ with :
130
+ name : GeneralsMD-vc6+t+e
131
+ path : generalsmd-vc6-artifacts
132
+
133
+ - name : Prepare and Zip GeneralsMD VC6
134
+ run : |
135
+ mkdir generalsmd-vc6-release
136
+ cp generalsmd-vc6-artifacts/generalszh.exe generalsmd-vc6-release/GeneralsZHv.exe
137
+ cp generalsmd-vc6-artifacts/W3DViewZH.exe generalsmd-vc6-release/W3DViewZHv.exe
138
+ cp generalsmd-vc6-artifacts/WorldBuilderZH.exe generalsmd-vc6-release/WorldBuilderZHv.exe
139
+ zip -j generalszh-vc6-${{ steps.set_date.outputs.date }}-weekly.zip generalsmd-vc6-release/*
140
+
141
+ # GeneralsMD win32
142
+ - name : Download GeneralsMD Win32 Artifacts
143
+ uses : actions/download-artifact@v4
144
+ with :
145
+ name : GeneralsMD-win32+t+e
146
+ path : generalsmd-win32-artifacts
147
+
148
+ - name : Prepare and Zip GeneralsMD Win32
149
+ run : |
150
+ mkdir generalsmd-win32-release
151
+ cp generalsmd-win32-artifacts/generalszh.exe generalsmd-win32-release/GeneralsZHv.exe
152
+ cp generalsmd-win32-artifacts/W3DViewZH.exe generalsmd-win32-release/W3DViewZHv.exe
153
+ cp generalsmd-win32-artifacts/WorldBuilderZH.exe generalsmd-win32-release/WorldBuilderZHv.exe
154
+ zip -j generalszh-win32-${{ steps.set_date.outputs.date }}-weekly.zip generalsmd-win32-release/*
155
+
156
+ - name : Create GitHub Release
157
+ uses : softprops/action-gh-release@v2
158
+ with :
159
+ tag_name : ${{ steps.set_date.outputs.date }}-weekly
160
+ name : ${{ steps.set_date.outputs.date }}-weekly
161
+ body : |
162
+ **Build notes:**
163
+
164
+ - **VC6 builds**: May be less compatible with modern systems, but guarantee compatibility with the original binary for multiplayer.
165
+ - **Win32 builds**: Offer better compatibility with modern systems, but multiplayer will only work with other win32 builds.
166
+ files : |
167
+ generals-*-*-weekly.zip
168
+ generalszh-*-*-weekly.zip
169
+ env :
170
+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments