name: Build on: push: branches: - "**" tags: - '[0-9]+.[0-9]+.[0-9]+' pull_request: branches: - "**" types: [opened, synchronize, reopened] concurrency: group: ${{ github.ref }} cancel-in-progress: true env: PREMAKE_VERSION: "5.0.0-beta6" jobs: build-windows: name: Build Windows runs-on: windows-2022 strategy: fail-fast: false matrix: configuration: - release compiler: - msvc - clang arch: - x86 - x64 - arm64 include: - arch: x86 platform: Win32 - arch: x64 platform: x64 - arch: arm64 platform: arm64 steps: - name: Check out files uses: actions/checkout@main with: submodules: true fetch-depth: 0 lfs: false - name: Add msbuild to PATH uses: microsoft/setup-msbuild@main - name: Install Premake5 uses: diamante0018/setup-premake@master with: version: ${{ env.PREMAKE_VERSION }} - name: Generate project files (clang) if: matrix.compiler == 'clang' run: premake5 --cc=${{matrix.compiler}} vs2022 - name: Generate project files (msvc) if: matrix.compiler == 'msvc' run: premake5 vs2022 - name: Set up problem matching uses: ammaraskar/msvc-problem-matcher@master - name: Build ${{matrix.arch}} ${{matrix.configuration}} ${{matrix.compiler}} binaries run: msbuild /m /p:Configuration=${{matrix.configuration}} /p:Platform=${{matrix.platform}} build/iw4-validator.sln - name: Upload ${{matrix.arch}} ${{matrix.configuration}} ${{matrix.compiler}} binaries uses: actions/upload-artifact@main with: name: windows-${{matrix.arch}}-${{matrix.configuration}}-${{matrix.compiler}} path: | build/bin/${{matrix.arch}}/${{matrix.configuration}}/iw4-validator.exe build/bin/${{matrix.arch}}/${{matrix.configuration}}/iw4-validator.pdb build-linux: name: Build Linux runs-on: ubuntu-latest container: ubuntu:noble strategy: fail-fast: false matrix: configuration: - release arch: - x86 - amd64 - arm64 steps: - name: Install g++ and multilib run: | apt-get update apt-get install -y wget tar git make gcc g++ gcc-multilib g++-multilib - name: Check out files uses: actions/checkout@main with: submodules: true fetch-depth: 0 lfs: false - name: Install dependencies (arm64) if: matrix.arch == 'arm64' run: | apt-get update apt-get install -y crossbuild-essential-arm64 - name: Install dependencies (x86) if: matrix.arch == 'x86' run: | dpkg --add-architecture i386 apt-get update apt-get -y install gcc-multilib g++-multilib - name: Install Premake5 uses: diamante0018/setup-premake@master with: version: ${{ env.PREMAKE_VERSION }} - name: Generate project files run: premake5 gmake - name: Set up problem matching uses: ammaraskar/gcc-problem-matcher@master - name: Set up CC environment variable if: matrix.arch == 'arm64' run: | echo "CC=aarch64-linux-gnu-gcc" >> $GITHUB_ENV - name: Set up CXX environment variable if: matrix.arch == 'arm64' run: | echo "CXX=aarch64-linux-gnu-g++" >> $GITHUB_ENV - name: Build ${{matrix.arch}} ${{matrix.configuration}} binaries run: | make -C build config=${{matrix.configuration}}_${{matrix.arch}} -j$(nproc) - name: Upload ${{matrix.arch}} ${{matrix.configuration}} binaries uses: actions/upload-artifact@main with: name: linux-${{matrix.arch}}-${{matrix.configuration}} path: | build/bin/${{matrix.arch}}/${{matrix.configuration}}/iw4-validator deploy: name: Deploy artifacts needs: [build-linux, build-windows] runs-on: ubuntu-latest if: github.ref_type == 'tag' steps: - name: Setup main environment run: echo "ALTERWARE_MASTER_PATH=${{ secrets.ALTERWARE_MASTER_SSH_PATH }}" >> $GITHUB_ENV - name: Download Release binaries uses: actions/download-artifact@main with: name: windows-x64-release # Set up committer info and GPG key - name: Install SSH key uses: shimataro/ssh-key-action@v2.7.0 with: key: ${{ secrets.ALTERWARE_MASTER_SSH_PRIVATE_KEY }} known_hosts: 'just-a-placeholder-so-we-dont-get-errors' - name: Add known hosts run: ssh-keyscan -H ${{ secrets.ALTERWARE_MASTER_SSH_ADDRESS }} >> ~/.ssh/known_hosts - name: Upload iw4-validator binary run: rsync -avz iw4-validator.exe ${{ secrets.ALTERWARE_MASTER_SSH_USER }}@${{ secrets.ALTERWARE_MASTER_SSH_ADDRESS }}:${{ env.ALTERWARE_MASTER_PATH }}/tools/