Merge pull request #132 from alterware/ci/update-premake5 #463
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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-beta8" | |
| jobs: | |
| build-windows: | |
| name: Build Windows | |
| runs-on: windows-latest | |
| 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/alterware-master.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}}/alterware-master.exe | |
| build/bin/${{matrix.arch}}/${{matrix.configuration}}/alterware-master.pdb | |
| build-linux: | |
| name: Build Linux | |
| runs-on: ubuntu-latest | |
| container: ubuntu:noble | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| configuration: | |
| - release | |
| arch: | |
| - amd64 | |
| steps: | |
| - name: Enable i386 architecture | |
| if: ${{ matrix.build_arch == 'x86' }} | |
| run: dpkg --add-architecture i386 | |
| - name: Install base packages | |
| run: | | |
| apt-get update | |
| apt-get install -y wget tar git make curl | |
| - name: Check out files | |
| uses: actions/checkout@main | |
| with: | |
| submodules: true | |
| fetch-depth: 0 | |
| lfs: false | |
| - name: Configure gcc | |
| uses: ./.github/actions/configure-gcc | |
| with: | |
| gcc_version: 14 | |
| enable_x86: ${{ case(matrix.build_arch == 'x86', 'true', 'false') }} | |
| - name: Install Premake5 | |
| uses: diamante0018/setup-premake@master | |
| with: | |
| version: ${{ env.PREMAKE_VERSION }} | |
| - name: Install Mold | |
| uses: rui314/setup-mold@staging | |
| - name: Generate project files | |
| working-directory: ${{ github.workspace }} | |
| run: premake5 gmake | |
| - name: Set up problem matching | |
| uses: ammaraskar/gcc-problem-matcher@master | |
| - name: Build ${{matrix.arch}} ${{matrix.configuration}} binaries | |
| working-directory: ${{ github.workspace }} | |
| 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}}/alterware-master | |
| prebuild-linux-arm64: | |
| name: Prebuild Linux | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check out files | |
| uses: actions/checkout@main | |
| with: | |
| submodules: true | |
| fetch-depth: 0 | |
| lfs: false | |
| - name: Install Premake5 | |
| uses: diamante0018/setup-premake@master | |
| with: | |
| version: ${{ env.PREMAKE_VERSION }} | |
| - name: Generate project files | |
| run: premake5 --cc=clang gmake | |
| - name: Upload project files | |
| uses: actions/upload-artifact@main | |
| with: | |
| name: linux-project-files | |
| path: | | |
| build/ | |
| build-linux-arm64: | |
| name: Build Linux | |
| runs-on: ${{ matrix.os }} | |
| needs: prebuild-linux-arm64 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| configuration: | |
| - release | |
| arch: | |
| - arm64 | |
| include: | |
| - arch: arm64 | |
| os: ubuntu-24.04-arm | |
| steps: | |
| - name: Check out files | |
| uses: actions/checkout@main | |
| with: | |
| submodules: true | |
| fetch-depth: 0 | |
| lfs: false | |
| - name: Create the build directory | |
| run: mkdir -p build | |
| - name: Download project files | |
| uses: actions/download-artifact@main | |
| with: | |
| name: linux-project-files | |
| path: build/ | |
| - name: Build ${{matrix.arch}} ${{matrix.configuration}} binaries | |
| working-directory: ${{ github.workspace }} | |
| run: | | |
| pushd build | |
| make config=${{matrix.configuration}}_${{matrix.arch}} -j$(nproc) | |
| env: | |
| CC: clang | |
| CXX: clang++ | |
| - 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}}/alterware-master | |
| build-macos: | |
| name: Build macOS | |
| runs-on: macos-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| configuration: | |
| - release | |
| arch: | |
| - amd64 | |
| - arm64 | |
| steps: | |
| - name: Check out files | |
| uses: actions/checkout@main | |
| with: | |
| submodules: true | |
| fetch-depth: 0 | |
| lfs: false | |
| - 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: Build ${{matrix.arch}} ${{matrix.configuration}} binaries | |
| run: | | |
| pushd build | |
| make config=${{matrix.configuration}}_${{matrix.arch}} -j$(sysctl -n hw.logicalcpu) | |
| - name: Upload ${{matrix.arch}} ${{matrix.configuration}} binaries | |
| uses: actions/upload-artifact@main | |
| with: | |
| name: macos-${{matrix.arch}}-${{matrix.configuration}} | |
| path: | | |
| build/bin/${{matrix.arch}}/${{matrix.configuration}}/alterware-master | |
| deploy: | |
| name: Deploy artifacts | |
| needs: [build-windows, build-linux, build-linux-arm64, build-macos] | |
| runs-on: ubuntu-latest | |
| if: github.ref_type == 'tag' | |
| steps: | |
| - name: Setup main environment | |
| run: echo "ALTERWARE_MASTER_SERVER_PATH=${{ secrets.ALTERWARE_MASTER_SERVER_SSH_PATH }}" >> $GITHUB_ENV | |
| - name: Download Release binaries | |
| uses: actions/download-artifact@main | |
| with: | |
| name: linux-amd64-release | |
| - name: Install SSH key | |
| uses: shimataro/ssh-key-action@v2.7.0 | |
| with: | |
| key: ${{ secrets.ALTERWARE_MASTER_SERVER_SSH_PRIVATE_KEY }} | |
| known_hosts: 'just-a-placeholder-so-we-dont-get-errors' | |
| - name: Add known hosts | |
| run: ssh-keyscan -H ${{ secrets.ALTERWARE_MASTER_SERVER_SSH_ADDRESS }} >> ~/.ssh/known_hosts | |
| - name: Upload release binary | |
| run: rsync -avz alterware-master ${{ secrets.ALTERWARE_MASTER_SERVER_SSH_USER }}@${{ secrets.ALTERWARE_MASTER_SERVER_SSH_ADDRESS }}:${{ env.ALTERWARE_MASTER_SERVER_PATH }}/ | |
| - name: Publish changes | |
| run: ssh ${{ secrets.ALTERWARE_MASTER_SERVER_SSH_USER }}@${{ secrets.ALTERWARE_MASTER_SERVER_SSH_ADDRESS }} ${{ secrets.ALTERWARE_SSH_SERVER_PUBLISH_COMMAND }} | |
| docker: | |
| name: Create Docker Image | |
| needs: [build-windows, build-linux, build-linux-arm64, build-macos] | |
| runs-on: ubuntu-latest | |
| if: github.ref_type == 'tag' | |
| steps: | |
| - name: Check out files | |
| uses: actions/checkout@main | |
| with: | |
| sparse-checkout: | | |
| Dockerfile | |
| README.md | |
| sparse-checkout-cone-mode: false | |
| - name: Download Release binaries | |
| uses: actions/download-artifact@main | |
| - name: Compress Binaries | |
| run: | | |
| for dir in */; do | |
| if [[ $dir == *"windows"* ]]; then | |
| cd "$dir" && zip -r "../${dir%/}.zip" . && cd .. | |
| else | |
| tar -czvf "${dir%/}.tar.gz" -C "$dir" . | |
| fi | |
| done | |
| shell: bash | |
| - name: Setup QEMU | |
| uses: docker/setup-qemu-action@v3.7.0 | |
| - name: Setup Docker Buildx | |
| uses: docker/setup-buildx-action@v3.12.0 | |
| - name: Login to DockerHub | |
| uses: docker/login-action@v3.6.0 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USER }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - id: meta | |
| uses: docker/metadata-action@v5.10.0 | |
| with: | |
| images: | | |
| alterware/master-server | |
| tags: | | |
| ${{ github.ref_name }} | |
| latest | |
| - name: Build and Push Docker Image | |
| id: build-and-push | |
| uses: docker/build-push-action@v6.18.0 | |
| with: | |
| context: . | |
| platforms: linux/amd64,linux/arm64 | |
| push: true | |
| tags: ${{ steps.meta.outputs.tags }} | |
| labels: ${{ steps.meta.outputs.labels }} | |
| cache-from: type=gha | |
| cache-to: type=gha,mode=max |