foxygit / GZDoom Log in
commits tags

/.github/workflows/continuous_integration.yml · 5.65 KB

raw
name: Continuous Integration

on: [push, pull_request]

jobs:
  build:
    name: ${{ matrix.config.name }} | ${{ matrix.config.build_type }}
    runs-on: ${{ matrix.config.os }}
    strategy:
      fail-fast: false
      matrix:
        config:
        - name: Visual Studio 2022
          os: windows-2022
          build_type: Release

        - name: Visual Studio 2022
          os: windows-2022
          build_type: Debug

        - name: Visual Studio 2022 32-bit
          os: windows-2022
          extra_options: -A Win32
          build_type: Release

        - name: macOS
          os: macos-14
          deps_cmdline: brew install libvpx
          build_type: Release

        - name: macOS
          os: macos-14
          extra_options: -G Xcode -DDYN_OPENAL=OFF
          deps_cmdline: brew install libvpx
          build_type: Debug

        - name: Linux GCC 11 # oldest version available
          os: ubuntu-22.04
          extra_options: -DCMAKE_C_COMPILER=gcc-11 -DCMAKE_CXX_COMPILER=g++-11
          deps_cmdline: sudo apt-get update && sudo apt-get install libsdl2-dev libvpx-dev libgtk2.0-dev libwebp-dev
          build_type: RelWithDebInfo

        - name: Linux GCC 12 # last known good
          os: ubuntu-22.04
          extra_options: -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12
          deps_cmdline: sudo apt-get update && sudo apt-get install libsdl2-dev libvpx-dev libgtk-3-dev libwebp-dev
          build_type: MinSizeRel
          export_appimage: true

        - name: Linux GCC Latest # rolling default, not actually latest
          os: ubuntu-latest
          extra_options: -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++
          deps_cmdline: sudo apt-get update && sudo apt-get install libsdl2-dev libvpx-dev libwebp-dev
          build_type: Release
          export_appimage: true

        - name: Linux Clang 11 # oldest version available
          os: ubuntu-22.04
          extra_options: -DCMAKE_C_COMPILER=clang-11 -DCMAKE_CXX_COMPILER=clang++-11 -DDYN_OPENAL=OFF
          deps_cmdline: sudo apt-get update && sudo apt-get install clang-11 libsdl2-dev libvpx-dev libopenal-dev libwebp-dev
          build_type: Debug

        - name: Linux Clang 15 # last known good
          os: ubuntu-22.04
          extra_options: -DCMAKE_C_COMPILER=clang-15 -DCMAKE_CXX_COMPILER=clang++-15
          deps_cmdline: sudo apt-get update && sudo apt-get install clang-15 libsdl2-dev libvpx-dev libwebp-dev
          build_type: Release
          export_appimage: true

        - name: Linux Clang Latest # rolling default, not actually latest
          os: ubuntu-latest
          extra_options: -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
          deps_cmdline: sudo apt-get update && sudo apt-get install libsdl2-dev libvpx-dev libwebp-dev
          build_type: Release
          export_appimage: true

    steps:
    - uses: actions/checkout@v4

    - name: Install Dependencies
      shell: bash
      run: |
        if [[ -n "${{ matrix.config.deps_cmdline }}" ]]; then
          eval ${{ matrix.config.deps_cmdline }}
        fi
        mkdir build
        if [[ "${{ runner.os }}" == 'macOS' ]]; then
          export ZMUSIC_PACKAGE=zmusic-1.1.14-macos-arm.tar.xz
        elif [[ "${{ runner.os }}" == 'Linux' ]]; then
          export ZMUSIC_PACKAGE=zmusic-1.1.14-linux.tar.xz
        fi
        if [[ -n "${ZMUSIC_PACKAGE}" ]]; then
          cd build
          wget -q "https://github.com/coelckers/gzdoom/releases/download/ci_deps/${ZMUSIC_PACKAGE}"
          tar -xf "${ZMUSIC_PACKAGE}"
        fi

    - name: Git describe
      id: ghd
      uses: proudust/gh-describe@v2

    - name: Configure
      shell: bash
      run: |
        cmake -B build -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} -DCMAKE_PREFIX_PATH=`pwd`/build/zmusic -DPK3_QUIET_ZIPDIR=ON ${{ matrix.config.extra_options }} .

    - name: Build
      shell: bash
      run: |
        export GIT_DESCRIBE="${{ steps.ghd.outputs.describe }}"
        export MAKEFLAGS=--keep-going
        cmake --build build --config ${{ matrix.config.build_type }} --parallel 3

    - name: Create Package
      shell: bash
      run: |
        cd build
        mkdir package
        if [[ "${{ runner.os }}" == 'Windows' ]]; then
          cp ${{ matrix.config.build_type }}/lzdoom.exe ${{ matrix.config.build_type }}/*.pk3 package
        elif [[ "${{ runner.os }}" == 'macOS' ]]; then
          if [[ "${{ matrix.config.build_type }}" != 'Release' ]]; then
            mv ${{ matrix.config.build_type }}/lzdoom.app lzdoom.app
          fi
          cp -r lzdoom.app package
        elif [[ "${{ runner.os }}" == 'Linux' ]]; then
          if [[ -n "${{ matrix.config.export_appimage }}" ]]; then
            mkdir AppDir
            cmake --install . --prefix "$(realpath AppDir)/usr"

            sudo apt-get install libfuse2 # renamed to libfuse2t64 in later releases
            wget -qO - https://github.com/AppImageCrafters/appimage-builder/releases/download/v1.1.0/appimage-builder-1.1.0-x86_64.AppImage \
              | tee appimage-builder | sha1sum
            echo "6f83a789f6c47a745b97d1b0b3f1df2e7eea7a09 appimage-builder" | sha1sum -c -
            chmod +x appimage-builder

            export GIT_DESCRIBE="${{ steps.ghd.outputs.describe }}"
            ./appimage-builder --skip-tests --recipe ../tools/AppImageBuilder.yml
            cp *.AppImage package
          else
            cp lzdoom *.pk3 package
          fi
        fi

    - name: Upload Package
      uses: actions/upload-artifact@v4
      with:
        path: build/package
        name: ${{ matrix.config.name }} ${{ matrix.config.build_type }}

    - name: List Build Directory
      if: always()
      shell: bash
      run: |
        git status
        ls -lR build