1 name: create-github-release
5 branches: [ macos-develop ]
8 # If set and is not empty or all whitespace, this should be the list of
9 # architectures to build into a universal binary. If not set, empty, or
10 # all whitespace, the default architecture for the combination of runner
11 # and hardware will be used.
12 UNIVERSAL_ARCHS: x86_64 arm64
13 # If set and is not empty or all whitespace, sets the name of the SDK to
14 # use. Otherwise the default SDK for the runner will be used. Want an
15 # SDK that can build all the architectures in UNIVERSAL_ARCHS. For valid
16 # values of the sdk name, look at the xcrun man page.
17 #SDK_OVERRIDE: macosx11.3
18 # Used as the name when uploading or downloading the artifact for passing
19 # configuration data from the Setup job to those dependent on it.
20 CONFIG_ARTIFACT: release-config
21 # Used as the path for the file with the configuration data passed from
22 # the Setup job to those dependent on it.
23 CONFIG_ARTIFACT_PATH: release-config.txt
24 # Used as the name when uploading or downloading the artifact for passing
25 # the name of the source archive.
26 SRC_ARTIFACT: release-src
27 # Used as the path for the file with the name of the source archive in it.
28 SRC_ARTIFACT_PATH: release-src.txt
29 # Used as the name when uploading or downloading the artifact holding
31 SRC_ARCHIVE_ARTIFACT: release-src-archive
32 # Used as the name when uploading or downloading the artifact for passing
33 # the name of the Mac archive for the English version.
34 MAC_ENGLISH_ARTIFACT: release-mac-en
35 # Used as the path for the file with the name of the Mac archive for the
36 # English version in it.
37 MAC_ENGLISH_ARTIFACT_PATH: release-mac-en.txt
38 # Used as the name when uploading or downloading the artifact holding
39 # the Mac archive for the English version.
40 MAC_ENGLISH_ARCHIVE_ARTIFACT: release-mac-en-archive
41 # Used as the name when uploading or downloading the artifact for passing
42 # the name of the Mac archive for the English version.
43 MAC_JAPANESE_ARTIFACT: release-mac-ja
44 # Used as the path for the file with the name of the Mac archive for the
45 # English version in it.
46 MAC_JAPANESE_ARTIFACT_PATH: release-mac-ja.txt
47 # Used as the name when uploading or downloading the artifact holding
48 # the Mac archive for the English version.
49 MAC_JAPANESE_ARCHIVE_ARTIFACT: release-mac-ja-archive
54 runs-on: ubuntu-latest
56 # Need commit history and tags to get the version so use 0 for
57 # fetch-depth. Don't need the submodule(s) here.
59 uses: actions/checkout@v4
63 - name: Extract Names from configure.ac
66 name=`sed -E -n -e 's/^[[:blank:]]*AC_INIT\([[:blank:]]*\\[?//p' configure.ac | tail -1 | cut -d ']' -f 1 | cut -d ',' -f 1`
67 echo "name=$name" >> $GITHUB_OUTPUT
68 cap=`echo $name | sed -E -e 's/^a/A/' -e 's/^b/B/' -e 's/^c/C/' -e 's/^d/D/' -e 's/^e/E/' -e 's/^f/F/' -e 's/^g/G/' -e 's/^h/H/' -e 's/^i/I/' -e 's/^j/J/' -e 's/^k/K/' -e 's/^l/L/' -e 's/^m/M/' -e 's/^n/N/' -e 's/^o/O/' -e 's/^p/P/' -e 's/^q/Q/' -e 's/^r/R/' -e 's/^s/S/' -e 's/^t/T/' -e 's/^u/U/' -e 's/^v/V/' -e 's/^w/W/' -e 's/^x/X/' -e 's/^y/Y/' -e 's/^z/Z/'`
69 echo "cap=$cap" >> $GITHUB_OUTPUT
71 - name: Set Release Version
74 verfile=src/system/angband-version.h
75 major=`sed -E -n -e 's/^[[:blank:]]*#define[[:blank:]]+H_VER_MAJOR[[:blank:]]+//p' "$verfile" | cut -d ' ' -f 1 | cut -f 1 | cut -d '/' -f 1`
76 minor=`sed -E -n -e 's/^[[:blank:]]*#define[[:blank:]]+H_VER_MINOR[[:blank:]]+//p' "$verfile" | cut -d ' ' -f 1 | cut -f 1 | cut -d '/' -f 1`
77 patch=`sed -E -n -e 's/^[[:blank:]]*#define[[:blank:]]+H_VER_PATCH[[:blank:]]+//p' "$verfile" | cut -d ' ' -f 1 | cut -f 1 | cut -d '/' -f 1`
78 extra=`sed -E -n -e 's/^[[:blank:]]*#define[[:blank:]]+H_VER_EXTRA[[:blank:]]+//p' "$verfile" | cut -d ' ' -f 1 | cut -f 1 | cut -d '/' -f 1`
79 version="$major"."$minor"."$patch"
81 vertype=`sed -E -n -e 's/^[[:blank:]]*constexpr[[:blank:]]+VersionStatusType[[:blank:]]+VERSION_STATUS[[:blank:]]*=[[:blank:]]*VersionStatusType:://p' "$verfile" | cut -d ' ' -f 1 | cut -d ';' -f 1`
82 if test x${vertype} == xALPHA ; then
83 version="${version}-Alpha${extra}"
84 tag="${tag}-alpha${extra}"
85 elif test x${vertype} == xBETA ; then
86 version="${version}-Beta${extra}"
87 tag="${tag}-beta${extra}"
88 elif test x${vertype} == xRELEASE_CANDIDATE ; then
89 version="${version}-RC${extra}"
90 tag="${tag}-rc${extra}"
92 head=`git rev-parse --verify --short HEAD`
93 version="${version}-${head}"
95 if git diff-index --quiet HEAD ; then
98 version="$version"-dirty
101 echo "version=$version" >> $GITHUB_OUTPUT
102 echo "tag=$tag" >> $GITHUB_OUTPUT
104 echo "prerelease=$prerelease" >> $GITHUB_OUTPUT
105 # Mark anything that isn't a prerelease as a draft.
107 if test x$prerelease = xtrue ; then
110 echo "draft=$draft" >> $GITHUB_OUTPUT
112 # The quoting here may be too simple-minded: what if there are single
113 # quotes in the steps.*.outputs.* stuff.
114 - name: Create Artifact with Configuration Details
116 echo name= '${{ steps.get_names.outputs.name }}' > $CONFIG_ARTIFACT_PATH
117 echo cap= '${{ steps.get_names.outputs.cap }}' >> $CONFIG_ARTIFACT_PATH
118 echo version= '${{ steps.get_release_vars.outputs.version }}' >> $CONFIG_ARTIFACT_PATH
119 echo tag= '${{ steps.get_release_vars.outputs.tag }}' >> $CONFIG_ARTIFACT_PATH
120 echo prerelease= '${{ steps.get_release_vars.outputs.prerelease }}' >> $CONFIG_ARTIFACT_PATH
121 echo draft= '${{ steps.get_release_vars.outputs.draft }}' >> $CONFIG_ARTIFACT_PATH
123 - name: Upload Artifact for Use by Dependent Steps
124 uses: actions/upload-artifact@v4
126 name: ${{ env.CONFIG_ARTIFACT }}
127 path: ${{ env.CONFIG_ARTIFACT_PATH }}
133 runs-on: ubuntu-latest
135 - name: Download Artifact with Configuration Information
136 uses: actions/download-artifact@v4
138 name: ${{ env.CONFIG_ARTIFACT }}
140 - name: Extract Configuration Information and Store in Step Outputs
143 name=`sed -E -n -e 's/name= //p' $CONFIG_ARTIFACT_PATH`
144 echo "name=$name" >> $GITHUB_OUTPUT
145 version=`sed -E -n -e 's/version= //p' $CONFIG_ARTIFACT_PATH`
146 echo "version=$version" >> $GITHUB_OUTPUT
148 - name: Install Build Dependencies
151 sudo apt-get install automake autoconf make tar gzip
153 - name: Clone Project
154 uses: actions/checkout@v4
158 - name: Create Source Archive
159 id: create_source_archive
161 out="${{ steps.store_config.outputs.name }}"-"${{ steps.store_config.outputs.version }}"
162 echo "archive_file=${out}.tar.gz" >> $GITHUB_OUTPUT
164 ./configure --disable-japanese --disable-net
166 n_name=`find . -maxdepth 1 -type d -name "${{ steps.store.config.outputs.name }}"'-*' -print | wc -l`
167 name=`find . -maxdepth 1 -type d -name "${{ steps.store.config.outputs.name }}"'-*' -print`
168 test x"$n_name" != x1 || exit 1
169 test x"$name" == x"$out" || mv "$name" "$out"
170 tar -cBf - "$out" | gzip -c - >"$out".tar.gz
172 - name: Create Artifact with Source Archive Path
174 echo archive_path= '${{ steps.create_source_archive.outputs.archive_file }}' > $SRC_ARTIFACT_PATH
176 - name: Upload Artifact with Source Archive Path
177 uses: actions/upload-artifact@v4
179 name: ${{ env.SRC_ARTIFACT }}
180 path: ${{ env.SRC_ARTIFACT_PATH }}
183 - name: Upload Source Archive as Artifact
184 uses: actions/upload-artifact@v4
186 name: ${{ env.SRC_ARCHIVE_ARTIFACT }}
187 path: ${{ steps.create_source_archive.outputs.archive_file }}
193 runs-on: macos-latest
195 - name: Download Artifact with Configuration Information
196 uses: actions/download-artifact@v4
198 name: ${{ env.CONFIG_ARTIFACT }}
200 - name: Extract Configuration Information and Store in Step Outputs
203 name=`sed -E -n -e 's/name= //p' $CONFIG_ARTIFACT_PATH`
204 echo "name=$name" >> $GITHUB_OUTPUT
205 cap=`sed -E -n -e 's/cap= //p' $CONFIG_ARTIFACT_PATH`
206 echo "cap=$cap" >> $GITHUB_OUTPUT
207 version=`sed -E -n -e 's/version= //p' $CONFIG_ARTIFACT_PATH`
208 echo "version=$version" >> $GITHUB_OUTPUT
210 - name: Clone Project
211 uses: actions/checkout@v4
215 # Requires automake and autoconf; install those via homebrew (available
217 - name: Install Build Dependencies
220 brew install autoconf
221 brew install automake
223 - name: Create Mac English Archive
224 id: create_mac_en_archive
226 if test -n `echo "${{ env.SDK_OVERRIDE }}" | tr -d ' \t\r\n'` ; then
227 SDKROOT=`echo "${{ env.SDK_OVERRIDE }}" | tr -d ' \t\r\n'`
235 DEPENDENCY_TRACKING=""
236 if test -n `echo "${{ env.UNIVERSAL_ARCHS }}" | tr -d ' \t\r\n'` ; then
237 DEPENDENCY_TRACKING="--disable-dependency-tracking --disable-pch"
238 # Include what configure normally infers for the compiler flags.
239 # Without -O2, the generated executables take painfully long to
240 # read the data files.
241 CFLAGS="$CFLAGS -g -O2"
242 CXXFLAGS="$CXXFLAGS -g -O2"
243 OBJCXXFLAGS="$OBJCXXFLAGS -g -O2"
244 for arch in ${{ env.UNIVERSAL_ARCHS }} ; do
246 CFLAGS="$CFLAGS $option"
247 CXXFLAGS="$CXXFLAGS $option"
248 OBJCXXFLAGS="$OBJCXXFLAGS $option"
249 LDFLAGS="$LDFLAGS $option"
251 echo "Performing a univeral build:"
252 echo " CFLAGS = $CFLAGS"
253 echo " CXXFLAGS = $CXXFLAGS"
254 echo " OBJCXXFLAGS = $OBJCXXFLAGS"
255 echo " LDFLAGS = $LDFLAGS"
257 env CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
258 OBJCXXFLAGS="$OBJCXXFLAGS" LDFLAGS="$LDFLAGS" \
259 ./configure --enable-cocoa --disable-japanese $DEPENDENCY_TRACKING
262 mv "${{ steps.store_config.outputs.name }}".app disttemp
263 hdiutil create -quiet -volname "${{ steps.store_config.outputs.cap }}-${{ steps.store_config.outputs.version }}-English" -srcfolder disttemp disttemp.dmg
264 archive_prefix="${{ steps.store_config.outputs.cap }}-${{ steps.store_config.outputs.version }}-English"
265 echo "archive_file=${archive_prefix}.dmg" >> $GITHUB_OUTPUT
266 hdiutil convert disttemp.dmg -quiet -format UDZO -imagekey zlib-level=6 -o "${archive_prefix}.dmg"
268 - name: Create Artifact with Mac English Archive Path
270 echo archive_path= '${{ steps.create_mac_en_archive.outputs.archive_file }}' > $MAC_ENGLISH_ARTIFACT_PATH
272 - name: Upload Artifact with Mac English Archive Path
273 uses: actions/upload-artifact@v4
275 name: ${{ env.MAC_ENGLISH_ARTIFACT }}
276 path: ${{ env.MAC_ENGLISH_ARTIFACT_PATH }}
279 - name: Upload Mac English Archive as Artifact
280 uses: actions/upload-artifact@v4
282 name: ${{ env.MAC_ENGLISH_ARCHIVE_ARTIFACT }}
283 path: ${{ steps.create_mac_en_archive.outputs.archive_file }}
289 runs-on: macos-latest
291 - name: Download Artifact with Configuration Information
292 uses: actions/download-artifact@v4
294 name: ${{ env.CONFIG_ARTIFACT }}
296 - name: Extract Configuration Information and Store in Step Outputs
299 name=`sed -E -n -e 's/name= //p' $CONFIG_ARTIFACT_PATH`
300 echo "name=$name" >> $GITHUB_OUTPUT
301 cap=`sed -E -n -e 's/cap= //p' $CONFIG_ARTIFACT_PATH`
302 echo "cap=$cap" >> $GITHUB_OUTPUT
303 version=`sed -E -n -e 's/version= //p' $CONFIG_ARTIFACT_PATH`
304 echo "version=$version" >> $GITHUB_OUTPUT
306 - name: Clone Project
307 uses: actions/checkout@v4
311 # Requires automake, autoconf, and nkf; install those via homebrew
312 # (available by default).
313 - name: Install Build Dependencies
316 brew install autoconf
317 brew install automake
320 - name: Create Mac Japanese Archive
321 id: create_mac_ja_archive
323 if test -n `echo "${{ env.SDK_OVERRIDE }}" | tr -d ' \t\r\n'` ; then
324 SDKROOT=`echo "${{ env.SDK_OVERRIDE }}" | tr -d ' \t\r\n'`
332 DEPENDENCY_TRACKING=""
333 if test -n `echo "${{ env.UNIVERSAL_ARCHS }}" | tr -d ' \t\r\n'` ; then
334 DEPENDENCY_TRACKING="--disable-dependency-tracking --disable-pch"
335 # Include what configure normally infers for the compiler flags.
336 # Without -O2, the generated executables take painfully long to
337 # read the data files.
338 CFLAGS="$CFLAGS -g -O2"
339 CXXFLAGS="$CXXFLAGS -g -O2"
340 OBJCXXFLAGS="$OBJCXXFLAGS -g -O2"
341 for arch in ${{ env.UNIVERSAL_ARCHS }} ; do
343 CFLAGS="$CFLAGS $option"
344 CXXFLAGS="$CXXFLAGS $option"
345 OBJCXXFLAGS="$OBJCXXFLAGS $option"
346 LDFLAGS="$LDFLAGS $option"
348 echo "Performing a univeral build:"
349 echo " CFLAGS = $CFLAGS"
350 echo " CXXFLAGS = $CXXFLAGS"
351 echo " OBJCXXFLAGS = $OBJCXXFLAGS"
352 echo " LDFLAGS = $LDFLAGS"
354 env CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
355 OBJCXXFLAGS="$OBJCXXFLAGS" LDFLAGS="$LDFLAGS" \
356 ./configure --enable-cocoa $DEPENDENCY_TRACKING
359 mv "${{ steps.store_config.outputs.name }}".app disttemp
360 hdiutil create -quiet -volname "${{ steps.store_config.outputs.cap }}-${{ steps.store_config.outputs.version}}-Japanese" -srcfolder disttemp disttemp.dmg
361 archive_prefix="${{ steps.store_config.outputs.cap }}-${{ steps.store_config.outputs.version }}-Japanese"
362 echo "archive_file=${archive_prefix}.dmg" >> $GITHUB_OUTPUT
363 hdiutil convert disttemp.dmg -quiet -format UDZO -imagekey zlib-level=6 -o "${archive_prefix}.dmg"
365 - name: Create Artifact with Mac Japanese Archive Path
367 echo archive_path= '${{ steps.create_mac_ja_archive.outputs.archive_file }}' > $MAC_JAPANESE_ARTIFACT_PATH
369 - name: Upload Artifact with Mac Japanese Archive Path
370 uses: actions/upload-artifact@v4
372 name: ${{ env.MAC_JAPANESE_ARTIFACT }}
373 path: ${{ env.MAC_JAPANESE_ARTIFACT_PATH }}
376 - name: Upload Mac Japanese Archive as Artifact
377 uses: actions/upload-artifact@v4
379 name: ${{ env.MAC_JAPANESE_ARCHIVE_ARTIFACT }}
380 path: ${{ steps.create_mac_ja_archive.outputs.archive_file }}
384 needs: [ setup, source, mac_en, mac_ja ]
385 name: Create GitHub Release
386 runs-on: ubuntu-latest
388 - name: Download Artifact with Configuration Information
389 uses: actions/download-artifact@v4
391 name: ${{ env.CONFIG_ARTIFACT }}
393 - name: Extract Configuration Information and Store in Step Outputs
396 version=`sed -E -n -e 's/version= //p' $CONFIG_ARTIFACT_PATH`
397 echo "version=$version" >> $GITHUB_OUTPUT
398 tag=`sed -E -n -e 's/tag= //p' $CONFIG_ARTIFACT_PATH`
399 echo "tag=$tag" >> $GITHUB_OUTPUT
400 prerelease=`sed -E -n -e 's/prerelease= //p' $CONFIG_ARTIFACT_PATH`
401 echo "prerelease=$prerelease" >> $GITHUB_OUTPUT
402 draft=`sed -E -n -e 's/draft= //p' $CONFIG_ARTIFACT_PATH`
403 echo "draft=$draft" >> $GITHUB_OUTPUT
405 - name: Download Artifact with Source Archive Path
406 uses: actions/download-artifact@v4
408 name: ${{ env.SRC_ARTIFACT }}
410 - name: Extract Source Archive Path and Store in Step Outputs
413 archive_path=`sed -E -n -e 's/archive_path= //p' $SRC_ARTIFACT_PATH`
414 echo "archive_path=$archive_path" >> $GITHUB_OUTPUT
416 - name: Download Artifact with Source Archive
417 uses: actions/download-artifact@v4
419 name: ${{ env.SRC_ARCHIVE_ARTIFACT }}
421 - name: Download Artifact with Mac English Archive Path
422 uses: actions/download-artifact@v4
424 name: ${{ env.MAC_ENGLISH_ARTIFACT }}
426 - name: Extract Mac English Archive Path and Store in Step Outputs
429 archive_path=`sed -E -n -e 's/archive_path= //p' $MAC_ENGLISH_ARTIFACT_PATH`
430 echo "archive_path=$archive_path" >> $GITHUB_OUTPUT
432 - name: Download Artifact with Mac English Archive
433 uses: actions/download-artifact@v4
435 name: ${{ env.MAC_ENGLISH_ARCHIVE_ARTIFACT }}
437 - name: Download Artifact with Mac Japanese Archive Path
438 uses: actions/download-artifact@v4
440 name: ${{ env.MAC_JAPANESE_ARTIFACT }}
442 - name: Extract Mac Japanese Archive Path and Store in Step Outputs
445 archive_path=`sed -E -n -e 's/archive_path= //p' $MAC_JAPANESE_ARTIFACT_PATH`
446 echo "archive_path=$archive_path" >> $GITHUB_OUTPUT
448 - name: Download Artifact with Mac Japanese Archive
449 uses: actions/download-artifact@v4
451 name: ${{ env.MAC_JAPANESE_ARCHIVE_ARTIFACT }}
453 - name: Populate Release
454 uses: softprops/action-gh-release@v1
456 tag_name: "${{ steps.store_config.outputs.tag }}"
457 name: ${{ steps.store_config.outputs.version }}
458 target_commitish: ${{ github.sha }}
459 draft: ${{ steps.store_config.outputs.draft }}
460 prerelease: ${{ steps.store_config.outputs.prerelease }}
462 ${{ steps.store_src.outputs.archive_path }}
463 ${{ steps.store_mac_en.outputs.archive_path }}
464 ${{ steps.store_mac_ja.outputs.archive_path }}
465 token: ${{ secrets.GITHUB_TOKEN }}