name: Build and Upload nightly game builds on: workflow_dispatch: inputs: build-defines: type: string description: Build defines to use default: '-DGITHUB_BUILD' save-artifact: type: boolean description: Save the build artifact to Github Actions (sends to itch otherwise) default: false push: paths-ignore: - '**/Dockerfile' - '.github/workflows/build-docker-image.yml' jobs: build-game-on-host: strategy: matrix: include: - target: windows - target: macos runs-on: - ${{ matrix.target }} defaults: run: shell: bash steps: - name: Make git happy run: | git config --global --replace-all safe.directory $GITHUB_WORKSPACE - name: Get checkout token uses: actions/create-github-app-token@v1 id: app_token with: app-id: ${{ vars.APP_ID }} private-key: ${{ secrets.APP_PEM }} owner: ${{ github.repository_owner }} - name: Checkout repo uses: funkincrew/ci-checkout@v6 with: submodules: 'recursive' token: ${{ steps.app_token.outputs.token }} persist-credentials: false - name: Setup build environment uses: ./.github/actions/setup-haxe with: gh-token: ${{ steps.app_token.outputs.token }} - name: Setup HXCPP dev commit run: | cd .haxelib/hxcpp/git/tools/hxcpp haxe compile.hxml cd ../../../../.. - name: Build game if: ${{ matrix.target == 'windows' }} run: | haxelib run lime build windows -v -release ${{ github.event.inputs.build-defines }} timeout-minutes: 120 - name: Build game if: ${{ matrix.target != 'windows' }} run: | haxelib run lime build ${{ matrix.target }} -v -release --times ${{ github.event.inputs.build-defines }} timeout-minutes: 120 - name: Save build artifact to Github Actions if: ${{ github.event.inputs.save-artifact }} uses: actions/upload-artifact@v4 with: name: build-${{ matrix.target }} path: export/release/${{matrix.target}}/bin/ - name: Upload build artifacts uses: ./.github/actions/upload-itch with: butler-key: ${{ secrets.BUTLER_API_KEY}} target: ${{ matrix.target }} build-game-in-container: runs-on: build-set container: ghcr.io/funkincrew/build-dependencies:latest strategy: matrix: include: - target: linux - target: html5 defaults: run: shell: bash steps: - name: Get checkout token uses: actions/create-github-app-token@v1 id: app_token with: app-id: ${{ vars.APP_ID }} private-key: ${{ secrets.APP_PEM }} owner: ${{ github.repository_owner }} - name: Checkout repo uses: funkincrew/ci-checkout@v6 with: submodules: 'recursive' token: ${{ steps.app_token.outputs.token }} persist-credentials: false - name: Config haxelib run: | haxelib --never newrepo echo "HAXEPATH=$(haxelib config)" >> "$GITHUB_ENV" - name: Restore cached dependencies id: cache-hmm uses: actions/cache@v4 with: path: .haxelib key: haxe-hmm-${{ runner.os }}-${{ hashFiles('**/hmm.json') }} - if: ${{ steps.cache-hmm.outputs.cache-hit != 'true' }} name: Install dependencies run: | git config --global 'url.https://x-access-token:${{ steps.app_token.outputs.token }}@github.com/.insteadOf' https://github.com/ git config --global advice.detachedHead false haxelib --global run hmm install -q cd .haxelib/hxcpp/git/tools/hxcpp && haxe compile.hxml - if: ${{ matrix.target != 'html5' }} name: Restore hxcpp cache uses: actions/cache@v4 with: path: /usr/share/hxcpp key: haxe-hxcpp-${{ runner.os }}-${{ github.ref_name }}-${{ github.sha }} restore-keys: haxe-hxcpp-${{ runner.os }}-${{ github.ref_name }} - name: Build game run: | haxelib run lime build ${{ matrix.target }} -v -release --times ${{ github.event.inputs.build-defines }} timeout-minutes: 120 - name: Save build artifact to Github Actions if: ${{ github.event.inputs.save-artifact }} uses: actions/upload-artifact@v4 with: name: build-${{ matrix.target }} path: export/release/${{matrix.target}}/bin/ - name: Upload build artifacts uses: ./.github/actions/upload-itch with: butler-key: ${{ secrets.BUTLER_API_KEY}} target: ${{ matrix.target }}