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-beta2" jobs: build-win: name: Build Windows runs-on: windows-latest strategy: fail-fast: false matrix: configuration: - debug - release arch: - x64 - arm64 include: - arch: x64 platform: x64 - arch: arm64 platform: arm64 steps: - name: Check out files uses: actions/checkout@main with: submodules: true fetch-depth: 0 # NOTE - If LFS ever starts getting used during builds, switch this to true! 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 run: premake5 vs2022 - name: Set up problem matching uses: ammaraskar/msvc-problem-matcher@master - name: Build ${{matrix.arch}} ${{matrix.configuration}} binaries <<<<<<< HEAD run: msbuild /m /v:minimal /p:Configuration=${{matrix.configuration}} /p:Platform=${{matrix.platform}} build/master-server.sln ======= run: msbuild /m /v:minimal /p:Configuration=${{matrix.configuration}} /p:Platform=${{matrix.platform}} build/alterware-master.sln >>>>>>> 27c2b2b75b56e54dcfbec690dd086946a45587d7 - name: Upload ${{matrix.arch}} ${{matrix.configuration}} binaries uses: actions/upload-artifact@main with: name: windows-${{matrix.arch}}-${{matrix.configuration}} path: | build/bin/${{matrix.arch}}/${{matrix.configuration}}/master-server.exe build/bin/${{matrix.arch}}/${{matrix.configuration}}/master-server.pdb build-linux: name: Build Linux runs-on: ubuntu-latest strategy: fail-fast: false matrix: configuration: - debug - release arch: - x64 steps: - name: Check out files uses: actions/checkout@main with: submodules: true fetch-depth: 0 # NOTE - If LFS ever starts getting used during builds, switch this to true! lfs: false - name: Install dependencies (x64) if: matrix.arch == 'x64' run: | sudo apt-get update sudo apt-get install libcurl4-gnutls-dev -y - name: Install Premake5 uses: diamante0018/setup-premake@master with: version: ${{ env.PREMAKE_VERSION }} - name: Generate project files run: premake5 --cc=clang gmake2 - 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$(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}}/master-server build-macos: name: Build macOS runs-on: macos-13 strategy: fail-fast: false matrix: configuration: - debug - release arch: - x64 - arm64 steps: - name: Check out files uses: actions/checkout@main with: submodules: true fetch-depth: 0 # NOTE - If LFS ever starts getting used during builds, switch this to true! lfs: false - name: Install Premake5 uses: diamante0018/setup-premake@master with: version: ${{ env.PREMAKE_VERSION }} - name: Generate project files run: premake5 gmake2 - 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: | <<<<<<< HEAD build/bin/${{matrix.arch}}/${{matrix.configuration}}/master-server ======= build/bin/${{matrix.arch}}/${{matrix.configuration}}/alterware-master >>>>>>> 27c2b2b75b56e54dcfbec690dd086946a45587d7 deploy: name: Deploy artifacts needs: [build-win, build-linux, build-macos] runs-on: ubuntu-latest <<<<<<< HEAD if: github.event_name == 'push' && github.ref == 'refs/heads/master' steps: - name: Setup main environment if: github.ref == 'refs/heads/master' run: echo "MASTER_SERVER_PATH=${{ secrets.MASTER_SERVER_SSH_PATH }}" >> $GITHUB_ENV ======= if: github.ref_type == 'tag' steps: - name: Setup main environment run: echo "ALTERWARE_MASTER_SERVER_PATH=${{ secrets.ALTERWARE_MASTER_SERVER_SSH_PATH }}" >> $GITHUB_ENV >>>>>>> 27c2b2b75b56e54dcfbec690dd086946a45587d7 - name: Download Release binaries uses: actions/download-artifact@main with: name: linux-x64-release - name: Install SSH key uses: shimataro/ssh-key-action@v2.7.0 with: <<<<<<< HEAD key: ${{ secrets.MASTER_SERVER_SSH_PRIVATE_KEY }} known_hosts: 'just-a-placeholder-so-we-dont-get-errors' - name: Add known hosts run: ssh-keyscan -H ${{ secrets.MASTER_SERVER_SSH_ADDRESS }} >> ~/.ssh/known_hosts - name: Upload release binary run: rsync -avz master-server ${{ secrets.MASTER_SERVER_SSH_USER }}@${{ secrets.MASTER_SERVER_SSH_ADDRESS }}:${{ env.MASTER_SERVER_PATH }}/ - name: Publish changes run: ssh ${{ secrets.MASTER_SERVER_SSH_USER }}@${{ secrets.MASTER_SERVER_SSH_ADDRESS }} ${{ secrets.SSH_SERVER_PUBLISH_COMMAND }} ======= 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-win, build-linux, 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 Docker Buildx uses: docker/setup-buildx-action@v3.2.0 - name: Login to DockerHub uses: docker/login-action@v3.1.0 with: username: ${{ secrets.DOCKERHUB_USER }} password: ${{ secrets.DOCKERHUB_TOKEN }} - id: meta uses: docker/metadata-action@v5.5.1 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@v5.1.0 with: context: . platforms: linux/amd64 push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max >>>>>>> 27c2b2b75b56e54dcfbec690dd086946a45587d7