name: Builds on: push: paths-ignore: - '.github/**' - '.vscode/**' - 'docs/**' - 'LICENSE-EXCEPTIONS.md' - 'LICENSE.md' - 'README.md' pull_request: paths-ignore: - '.github/**' - '.vscode/**' - 'docs/**' - 'LICENSE-EXCEPTIONS.md' - 'LICENSE.md' - 'README.md' env: GODOT_BASE_DOWNLOAD_URL: https://github.com/godotengine/godot GODOT_VERSION: 4.2.1 GODOT_VERSION_TYPE: stable OPENVIC_BASE_BRANCH: master concurrency: group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}}-macos cancel-in-progress: true jobs: build: runs-on: ${{matrix.os}} name: ${{matrix.name}} permissions: write-all strategy: fail-fast: false matrix: include: - identifier: windows-debug os: windows-latest name: 🏁 Windows Debug target: template_debug platform: windows arch: x86_64 - identifier: windows-release os: windows-latest name: 🏁 Windows Release target: template_release platform: windows arch: x86_64 - identifier: macos-debug os: macos-latest name: 🍎 macOS (universal) Debug target: template_debug platform: macos arch: universal - identifier: macos-release os: macos-latest name: 🍎 macOS (universal) Release target: template_release platform: macos arch: universal - identifier: linux-debug os: ubuntu-latest name: 🐧 Linux Debug runner: ubuntu-20.04 target: template_debug platform: linux arch: x86_64 - identifier: linux-release os: ubuntu-latest name: 🐧 Linux Release runner: ubuntu-20.04 target: template_release platform: linux arch: x86_64 steps: - name: Checkout project uses: actions/checkout@v4.1.1 with: submodules: recursive - name: Setup OpenVic build cache uses: OpenVicProject/openvic-cache@master with: cache-name: ${{ matrix.identifier }} base-branch: ${{ env.OPENVIC_BASE_BRANCH }} continue-on-error: true - name: Setup Environment uses: OpenVicProject/openvic-env@master - name: Set up Python uses: actions/setup-python@v5.0.0 with: python-version: "3.x" - name: Set up SCons shell: bash run: | python -c "import sys; print(sys.version)" python -m pip install scons scons --version - name: Linux dependencies if: ${{ matrix.platform == 'linux' }} run: | sudo apt-get update -qq sudo apt-get install -qqq build-essential pkg-config g++ --version sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 12 sudo update-alternatives --set g++ /usr/bin/g++-12 g++ --version - name: Setup MinGW for Windows/MinGW build if: ${{ matrix.platform == 'windows' }} uses: OpenVicProject/mingw-cache@master - name: Compile Extension uses: OpenVicProject/openvic-build@master with: platform: ${{ matrix.platform }} target: ${{ matrix.target }} bin-dir: "game/bin/" sconsflags: arch=${{ matrix.arch }} - name: Delete compilation files if: ${{ matrix.platform == 'windows' }} run: | Remove-Item game/bin/openvic/* -Include *.exp,*.lib,*.pdb -Force - name: Upload extension artifact uses: actions/upload-artifact@v4.3.0 with: name: ${{ github.event.repository.name }}-${{ matrix.identifier }}-extension path: | ${{ github.workspace }}/game/bin/openvic/* godot-debug-checks: runs-on: ubuntu-latest needs: [build] name: Peform Godot Debug Checks steps: - name: Checkout project uses: actions/checkout@v4.1.1 - name: Setup Environment uses: OpenVicProject/openvic-env@master - name: Download artifact uses: actions/download-artifact@v4.1.1 with: path: game/bin/openvic pattern: ${{ github.event.repository.name }}-*-extension merge-multiple: true - name: Export pack file id: export_game uses: Spartan322/godot-export@master with: godot_executable_download_url: ${{env.GODOT_LINUX_URL}} godot_export_templates_download_url: ${{env.GODOT_TEMPLATE_URL}} relative_project_path: ./game export_as_pack: true export_debug: true cache: true relative_export_path: ./game/export - run: mv "./game/export/LinuxX11 x86_64/OpenVic.x86_64.pck" ./game/export/${{ github.event.repository.name }}.pck - name: Upload pack artifact uses: actions/upload-artifact@v4.3.0 with: name: ${{ github.event.repository.name }}-debug-pck compression-level: 9 path: | ./game/export/${{ github.event.repository.name }}.pck export: runs-on: ubuntu-latest needs: [build] permissions: write-all name: Export steps: - name: Checkout project uses: actions/checkout@v4.1.1 - name: Setup Environment uses: OpenVicProject/openvic-env@master - name: Download artifact uses: actions/download-artifact@v4.1.1 with: path: game/bin/openvic pattern: ${{ github.event.repository.name }}-*-extension merge-multiple: true - name: Install WINE id: wine_install run: | sudo apt update sudo apt install --fix-missing wine64 echo "WINE_PATH=$(which wine64)" >> $GITHUB_OUTPUT - name: Export game id: export_game uses: Spartan322/godot-export@master with: godot_executable_download_url: ${{env.GODOT_LINUX_URL}} godot_export_templates_download_url: ${{env.GODOT_TEMPLATE_URL}} relative_project_path: ./game archive_output: true cache: true wine_path: ${{ steps.wine_install.outputs.WINE_PATH }} - name: Create release if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') uses: ncipollo/release-action@v1.13.0 with: allowUpdates: true omitNameDuringUpdate: true omitBodyDuringUpdate: true token: ${{ secrets.GITHUB_TOKEN }} artifacts: ${{ steps.export_game.outputs.archive_directory }}/* - name: Upload artifact uses: actions/upload-artifact@v4.3.0 with: name: ${{ github.event.repository.name }} retention-days: 30 compression-level: 9 path: | ${{ steps.export_game.outputs.archive_directory }} merge-files: runs-on: ubuntu-latest needs: [export] name: 📚 Merge Files steps: - name: Download extension artifacts uses: actions/download-artifact@v4.1.1 if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') with: path: artifacts pattern: ${{ github.event.repository.name }}-*-extension merge-multiple: true - name: Merge extension artifacts uses: actions/upload-artifact/merge@v4.3.0 with: delete-merged: true name: ${{ github.event.repository.name }}-extension pattern: ${{ github.event.repository.name }}-*-extension - name: Archive release uses: thedoctor0/zip-release@0.7.6 if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') with: type: "zip" filename: "release/libopenvic.zip" directory: "${{ github.workspace }}/artifacts" - name: Upload extension release asset uses: ncipollo/release-action@v1.13.0 if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') with: allowUpdates: true omitNameDuringUpdate: true omitBodyDuringUpdate: true token: ${{ secrets.GITHUB_TOKEN }} artifacts: release/*