File: build-release.yaml

package info (click to toggle)
freespace2 25.0.0%2Brepack-1
  • links: PTS, VCS
  • area: non-free
  • in suites: forky, sid
  • size: 47,232 kB
  • sloc: cpp: 657,500; ansic: 22,305; sh: 293; python: 200; makefile: 198; xml: 181
file content (436 lines) | stat: -rw-r--r-- 16,269 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
name: Build Release package

on:
  push:
    tags:
      - 'release_*'

env:
  QT_VERSION: 5.12.12

jobs:
  create_release:
    name: Create GitHub release
    runs-on: ubuntu-latest
    steps:
      - name: Create Release
        id: create_release
        uses: actions/create-release@v1
        # Creates a release package page on github
        # create_release.inputs:      (notable inputs)
        #   allowUpdates=false        if true, update an existing release if it exists
        #   artifactErrorsFailBuild=false   if true, fails the build should artifact read/write errors occur
        #   artifacts                 optional set of paths to artifacts to upload to the release. comma delimited.
        #   removeArtifacts=false     if true, remove existing artifacts
        #   replaceArtifacts=false    if true, replace/overwrite existing artifacts
        # create_release.outputs:
        #   id          id of the created release
        #   html_url    HTML URL of the release
        #   upload_url  FTP URL of the release where assets are uploaded
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
        with:
          tag_name: ${{ github.ref }}
          release_name: Release ${{ github.ref }}
          draft: false
          prerelease: false

  build_linux:
    strategy:
      matrix:
        # Run this job for each configuration
        # The current config running is accesible with `matrix.configuration`
        configuration: [FastDebug, Release]
        os: [ubuntu-latest, ubuntu-24.04-arm]
        include:
          - os: ubuntu-latest
            arch: x86_64
          - os: ubuntu-24.04-arm
            arch: arm64
    name: Linux
    needs: create_release   # Don't run this job until create_release is done and successful
    runs-on: ${{ matrix.os }}
    container: ghcr.io/scp-fs2open/linux_build:sha-71099c9
    steps:
      - uses: actions/checkout@v1
        # checks-out your repository under $GITHUB_WORKSPACE, so your workflow can access it.
        name: Checkout
        with:
          submodules: true  # `true` to checkout submodules, `recursive` to recursively checkout submodules
          ref: '${{ github.ref }}'
      - name: Configure CMake
        env:
          CONFIGURATION: ${{ matrix.configuration }}
          COMPILER: gcc-9
          ENABLE_QTFRED: OFF
        run: $GITHUB_WORKSPACE/ci/linux/configure_cmake.sh
      - name: Compile
        working-directory: ./build
        env:
          CONFIGURATION: ${{ matrix.configuration }}
        run: |
          LD_LIBRARY_PATH=$Qt5_DIR/lib:$LD_LIBRARY_PATH ninja -k 20 all
      - name: Run Tests
        working-directory: ./build
        env:
          CONFIGURATION: ${{ matrix.configuration }}
          XDG_RUNTIME_DIR: /root
        run: $GITHUB_WORKSPACE/ci/linux/run_tests.sh
      - name: Generate AppImage
        working-directory: ./build
        env:
          CONFIGURATION: ${{ matrix.configuration }}
        run: $GITHUB_WORKSPACE/ci/linux/generate_appimage.sh $GITHUB_WORKSPACE/build/install
      - name: Upload build result
        uses: actions/upload-artifact@v4
        # Upload the url file for use with other runners
        # upload-artifact.inputs:
        #   if-no-files-found=warn  What to do if path fails to find any files.
        #       warn      Display a warning but do not fail the action
        #       error     Display an error and fail the action
        #       ignore    No display, No fail
        #   retention-days=0    Days to keep the artifact.
        #       0     Use default retention policy of the repo
        #       1~90  Min 1, Max 90 days to keep the artifact unless changed by repo settings page
        with:
          name: linux-${{ matrix.configuration }}-${{ matrix.arch }}
          path: ${{ github.workspace }}/build/install/*.AppImage
  linux_zip:
    name: Build Linux distribution zip
    needs: build_linux
    runs-on: ubuntu-latest
    container: ghcr.io/scp-fs2open/sftp_upload:sha-748b19d
    strategy:
      matrix:
        arch: [x86_64, arm64]
    steps:
      - uses: actions/checkout@v1
        name: Checkout
        with:
          submodules: true
          fetch-depth: '0'  # value 0 to fetch all history and tags for all branches
          ref: '${{ github.ref }}'
      - name: Download Release builds
        # Grab the release builds
        uses: actions/download-artifact@v4
        with:
          name: linux-Release-${{ matrix.arch }}
          path: builds
      - name: Download FastDebug builds
        # Grab the debug builds
        uses: actions/download-artifact@v4
        with:
          name: linux-FastDebug-${{ matrix.arch }}
          path: builds
      - name: Fix permissions
        working-directory: ./builds
        shell: bash
        run: chmod 755 *.AppImage
      - name: Create Distribution package
        # Zip both builds together
        id: generate_package
        working-directory: ./builds
        env:
          ARCH: ${{ matrix.arch }}
        run: $GITHUB_WORKSPACE/ci/linux/create_dist_pack.sh Linux
      - name: Upload result package
        # Stash the result to artifact filespace
        uses: actions/upload-artifact@v4
        with:
          name: ${{ steps.generate_package.outputs.package_name }}
          path: ${{ steps.generate_package.outputs.package_path }}
      - name: Publish result package
        # publish the zipped result
        uses: softprops/action-gh-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          files: ${{ steps.generate_package.outputs.package_path }}

  build_windows:
    strategy:
      matrix:
        configuration: [FastDebug, Release]
        arch: [Win32, x64]
        simd: [SSE2, AVX]
    needs: create_release
    name: Windows
    runs-on: windows-2022
    steps:
      - uses: actions/checkout@v1
        # Checkout repo
        name: Checkout
        with:
          submodules: true
          ref: '${{ github.ref }}'
      # - name: Cache Qt
        # # Cache Qt
        # id: cache-qt-win
        # uses: actions/cache@v1
        # with:
          # path: ${{ github.workspace }}/../Qt
          # key: ${{ runner.os }}-${{ matrix.arch }}-QtCache-${{ env.QT_VERSION }}
      # - name: Install Qt (32 bit)
        # # Install Qt 32bit if matrix.arch == Win32
        # uses: jurplel/install-qt-action@v2
        # if: ${{ matrix.arch == 'Win32' }}
        # with:
          # version: ${{ env.QT_VERSION }}
          # dir: ${{ github.workspace }}/..
          # arch: win32_msvc2017
          # cached: ${{ steps.cache-qt-win.outputs.cache-hit }}
          # aqtversion: ==0.8
      # - name: Install Qt (64 bit)
        # # Install Qt 64bit if matrix.arch == x64
        # uses: jurplel/install-qt-action@v2
        # if: ${{ matrix.arch == 'x64' }}
        # with:
          # version: ${{ env.QT_VERSION }}
          # dir: ${{ github.workspace }}/..
          # arch: win64_msvc2017_64
          # cached: ${{ steps.cache-qt-win.outputs.cache-hit }}
          # aqtversion: ==0.8
      - name: Prepare Vulkan SDK
        uses: humbletim/setup-vulkan-sdk@v1.2.1
        with:
          vulkan-query-version: 1.4.304.1
          vulkan-components: Vulkan-Headers, Vulkan-Loader
          vulkan-use-cache: true
      - name: Configure CMake
        env:
          CONFIGURATION: ${{ matrix.configuration }}
          ARCHITECTURE: ${{ matrix.arch }}
          SIMD: ${{ matrix.simd }}
        shell: bash
        run: |
          mkdir build
          cd build

          if [ "$ARCHITECTURE" = "Win32" ]; then
              cmake -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DFSO_USE_SPEECH="ON" \
                  -DFSO_USE_VOICEREC="ON" -DFORCED_SIMD_INSTRUCTIONS="$SIMD" \
                  -DFSO_BUILD_QTFRED=OFF -DFSO_BUILD_TESTS=ON \
                  -DFSO_INSTALL_DEBUG_FILES="ON" -DFSO_BUILD_WITH_VULKAN="OFF" -A "$ARCHITECTURE" \
                  -G "Visual Studio 17 2022" -T "v143" -DCMAKE_BUILD_TYPE=$CONFIGURATION ..
          else
              cmake -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DFSO_USE_SPEECH="ON" \
                  -DFSO_USE_VOICEREC="ON" -DFORCED_SIMD_INSTRUCTIONS="$SIMD" \
                  -DFSO_BUILD_QTFRED=OFF -DFSO_BUILD_TESTS=ON \
                  -DFSO_INSTALL_DEBUG_FILES="ON" -A "$ARCHITECTURE" \
                  -G "Visual Studio 17 2022" -T "v143" -DCMAKE_BUILD_TYPE=$CONFIGURATION ..
          fi
      - name: Compile
        working-directory: ./build
        env:
          CONFIGURATION: ${{ matrix.configuration }}
          COMPILER: ${{ matrix.compiler }}
        shell: bash
        run: |
          cmake --build . --config "$CONFIGURATION" --target INSTALL -- /verbosity:minimal
          ls -alR "$(pwd)/install"
      - name: Run Tests
        working-directory: ./build
        env:
          CONFIGURATION: ${{ matrix.configuration }}
        shell: bash
        run: ./bin/$CONFIGURATION/unittests --gtest_shuffle
      - name: Upload build result
        uses: actions/upload-artifact@v4
        with:
          name: windows-${{ matrix.configuration }}-${{ matrix.arch }}-${{ matrix.simd }}
          path: ${{ github.workspace }}/build/install/*

  windows_zip:
    name: Build Windows distribution zip
    needs: build_windows
    runs-on: ubuntu-latest
    container: ghcr.io/scp-fs2open/sftp_upload:sha-748b19d
    strategy:
      fail-fast: false  # Run the other jobs in the matrix instead of failing them
      matrix:
        arch: [Win32, x64]
        simd: [SSE2, AVX]

    steps:
      - uses: actions/checkout@v1
        name: Checkout
        with:
          submodules: true
          fetch-depth: '0'
          ref: '${{ github.ref }}'
      - name: Download Release builds
        uses: actions/download-artifact@v4
        with:
          name: windows-Release-${{ matrix.arch }}-${{ matrix.simd }}
          path: builds

      - name: Download FastDebug builds
        uses: actions/download-artifact@v4
        with:
          name: windows-FastDebug-${{ matrix.arch }}-${{ matrix.simd }}
          path: builds

      - name: Create Distribution package
        id: generate_package
        working-directory: ./builds
        shell: bash
        env:
          ARCH: ${{ matrix.arch }}
          SIMD: ${{ matrix.simd }}
        run: $GITHUB_WORKSPACE/ci/linux/create_dist_pack.sh Windows

      - name: Upload result package
        uses: actions/upload-artifact@v4
        with:
          name: ${{ steps.generate_package.outputs.package_name }}
          path: ${{ steps.generate_package.outputs.package_path }}

      - name: Upload debug package
        uses: actions/upload-artifact@v4
        with:
          name: ${{ steps.generate_package.outputs.debug_name }}
          path: ${{ steps.generate_package.outputs.debug_path }}

      - name: Publish packages
        uses: softprops/action-gh-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          files: |
            ${{ steps.generate_package.outputs.package_path }}
            ${{ steps.generate_package.outputs.debug_path }}

  build_mac:
    strategy:
      matrix:
        configuration: [FastDebug, Release]
        compiler: [clang]
        arch: [x86_64, arm64]
    name: Mac
    needs: create_release
    runs-on: macos-latest
    steps:
      # - name: Cache Qt
        # id: cache-qt-mac
        # uses: actions/cache@v1
        # with:
          # path: ${{ github.workspace }}/../Qt
          # key: ${{ runner.os }}-QtCache-${{ env.QT_VERSION }}
      # - name: Install Qt
        # uses: jurplel/install-qt-action@v2
        # with:
          # version: ${{ env.QT_VERSION }}
          # dir: ${{ github.workspace }}/..
          # cached: ${{ steps.cache-qt-mac.outputs.cache-hit }}
          # setup-python: 'false'
          # aqtversion: ==1.1.3
      - uses: actions/checkout@v1
        name: Checkout
        with:
          submodules: true
          fetch-depth: 0
          ref: '${{ github.ref }}'
      - name: Prepare Vulkan SDK
        uses: humbletim/setup-vulkan-sdk@v1.2.1
        with:
          vulkan-query-version: 1.4.304.1
          vulkan-components: Vulkan-Headers, Vulkan-Loader
          vulkan-use-cache: true
      - name: Configure CMake
        env:
          CONFIGURATION: ${{ matrix.configuration }}
          COMPILER: ${{ matrix.compiler }}
          ARCHITECTURE: ${{ matrix.arch }}
          JOB_CMAKE_OPTIONS: ${{ matrix.cmake_options }}
          ENABLE_QTFRED: OFF
        run: $GITHUB_WORKSPACE/ci/linux/configure_cmake.sh
      - name: Compile
        working-directory: ./build
        run: LD_LIBRARY_PATH=$Qt5_DIR/lib:$LD_LIBRARY_PATH ninja all
      - name: Run Tests
        working-directory: ./build
        env:
          CONFIGURATION: ${{ matrix.configuration }}
          ARCH: ${{ matrix.arch }}
          XDG_RUNTIME_DIR: /root
        run: $GITHUB_WORKSPACE/ci/linux/run_tests.sh
      - name: Sign builds
        working-directory: ./build/bin
        run: |
          # make sure OpenAL framework is signed
          find . -name OpenAL -type f | while read xx; do codesign --force -s - $xx; done
          find . -name OpenAL.framework -type d | while read xx; do codesign --force -s - $xx; done
          # make sure dylibs are signed
          find . -name \*.dylib -type f | while read xx; do codesign --force -s - $xx; done
          # sign binaries
          find . -perm +111 -type f | grep MacOS | while read xx; do codesign --force -s - $xx; done
          # sign apps
          find . -name \*.app -maxdepth 1 | while read xx; do codesign --force -s - $xx; done
      - name: Package build result
        working-directory: ./build/bin
        # Use GNU tar here (part of runner image) to avoid weird corruption bug with bsdtar
        # Ref: https://github.com/actions/runner-images/issues/2619
        run: gtar -cvzf macos-build-${{ matrix.configuration }}-${{ matrix.arch }}.tgz *.app
      - name: Upload build result
        uses: actions/upload-artifact@v4
        with:
          name: mac-${{ matrix.configuration }}-${{ matrix.arch }}
          path: ${{ github.workspace }}/build/bin/macos-build-${{ matrix.configuration }}-${{ matrix.arch }}.tgz
  mac_zip:
    name: Build Mac distribution zip
    needs: build_mac
    runs-on: ubuntu-latest
    container: ghcr.io/scp-fs2open/sftp_upload:sha-748b19d
    strategy:
      matrix:
        arch: [x86_64, arm64]
    steps:
      - uses: actions/checkout@v2
        name: Checkout
        with:
          submodules: true
          fetch-depth: '0'
          ref: '${{ github.ref }}'
      - name: Download Release builds
        uses: actions/download-artifact@v4
        with:
          name: mac-Release-${{ matrix.arch }}
          path: builds
      - name: Download FastDebug builds
        uses: actions/download-artifact@v4
        with:
          name: mac-FastDebug-${{ matrix.arch }}
          path: builds
      - name: Unpack builds
        working-directory: ./builds
        run: |
          tar -xvzf macos-build-Release-${{ matrix.arch }}.tgz
          tar -xvzf macos-build-FastDebug-${{ matrix.arch }}.tgz
      - name: Create Distribution package
        id: generate_package
        working-directory: ./builds
        env:
          ARCH: ${{ matrix.arch }}
        run: $GITHUB_WORKSPACE/ci/linux/create_dist_pack.sh Mac
      - name: Upload result package
        uses: actions/upload-artifact@v4
        with:
          name: ${{ steps.generate_package.outputs.package_name }}
          path: ${{ steps.generate_package.outputs.package_path }}
      - name: Publish result package
        uses: softprops/action-gh-release@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          files: ${{ steps.generate_package.outputs.package_path }}

  post_build:
    name: Post builds to Nebula and Forum
    needs: [linux_zip, windows_zip, mac_zip]
    uses: ./.github/workflows/post-build-release.yaml
    with:
      linux_result: ${{ needs.linux_zip.result }}
      windows_result: ${{ needs.windows_zip.result }}
      mac_result: ${{ needs.mac_zip.result }}
      releaseTag: ${{ github.ref_name }}
    secrets: inherit