Build ANGLE #60
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 ANGLE | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| types: [ opened, reopened ] | |
| workflow_dispatch: | |
| jobs: | |
| check-cache-date: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| reverify-cache: ${{ steps.check.outputs.reverify-cache }} | |
| steps: | |
| - name: Update cache once a week | |
| id: check | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| if gh cache list -R AngelAuraMC/angle --json createdAt -q '.[0].createdAt' | grep -q .; then | |
| echo "Cache exists" | |
| else | |
| echo "No cache found" | |
| echo "reverify-cache=true" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| fi | |
| if (( $(date +%s) < $(( $(date -d "$(gh cache list -R AngelAuraMC/angle --json createdAt -q '.[0].createdAt')" +%s) + 604800 )) )); then | |
| echo "Cache is new enough" | |
| echo "reverify-cache=false" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "Cache needs updating" | |
| echo "reverify-cache=true" >> "$GITHUB_OUTPUT" | |
| fi | |
| update-build-environment-cache: | |
| needs: check-cache-date | |
| permissions: | |
| actions: write | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| # Do not remove this checkout else gclient sync gets confused on what rev of ANGLE to checkout | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| # if: needs.check-cache-date.outputs.reverify-cache == 'true' is spammed throughout this job because the job itself can't be skipped if we are to use needs for the build job | |
| - name: Restore environment from cache | |
| if: needs.check-cache-date.outputs.reverify-cache == 'true' | |
| id: cached-environment-restore | |
| uses: actions/cache/restore@v4 | |
| with: | |
| path: ./ | |
| key: ios_and_android-build-environment | |
| - name: Verify cached environment is valid | |
| if: needs.check-cache-date.outputs.reverify-cache == 'true' | |
| run: | | |
| if [ ! -d "depot_tools" ] ; then | |
| git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git | |
| fi | |
| export PATH="$PWD/depot_tools:$PATH" | |
| gclient config --spec 'solutions = [ | |
| { | |
| "name": ".", | |
| "url": "https://chromium.googlesource.com/angle/angle.git", | |
| "deps_file": "DEPS", | |
| "managed": False, | |
| "custom_vars": {}, | |
| }, | |
| ] | |
| target_os = ["ios", "android"]' | |
| gclient sync -Rf --no-history --with_branch_heads | |
| - name: Remove non-crossplatform files that cause build issues | |
| if: needs.check-cache-date.outputs.reverify-cache == 'true' | |
| run: | | |
| rm -rf third_party/llvm-build # This only contains linux files if ran on a linux machine, it has to be deleted so gclient can fetch the files for macOS/iOS instead | |
| # Stupid workaround, see https://github.com/azu/github-actions-overwrite-cache-example and https://github.com/actions/cache/issues/342 | |
| - name: Delete Previous Cache | |
| if: needs.check-cache-date.outputs.reverify-cache == 'true' | |
| run: | | |
| gh cache delete "${{ steps.cached-environment-restore.outputs.cache-primary-key }}" --repo $GITHUB_REPOSITORY || echo "Cache not found. Skipping delete." | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Save environment to cache | |
| if: needs.check-cache-date.outputs.reverify-cache == 'true' | |
| uses: actions/cache/save@v4 | |
| with: | |
| path: ./ | |
| key: ios_and_android-build-environment | |
| build: | |
| needs: update-build-environment-cache | |
| strategy: | |
| matrix: | |
| include: | |
| - os: android | |
| arch: arm64 | |
| runs-on: ubuntu-24.04 | |
| - os: android | |
| arch: arm | |
| runs-on: ubuntu-24.04 | |
| - os: android | |
| arch: x86 | |
| runs-on: ubuntu-24.04 | |
| - os: android | |
| arch: x64 | |
| runs-on: ubuntu-24.04 | |
| - os: ios | |
| arch: arm64 | |
| runs-on: macos-15 | |
| runs-on: ${{ matrix.runs-on }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Restore environment from cache | |
| id: cached-environment-restore | |
| uses: actions/cache/restore@v4 | |
| with: | |
| path: ./ | |
| key: ios_and_android-build-environment | |
| - name: Fetch, verify, and setup build environment | |
| run: | | |
| export PATH="$PWD/depot_tools:$PATH" | |
| echo "$PWD/depot_tools" >> $GITHUB_PATH | |
| gclient config --spec 'solutions = [ | |
| { | |
| "name": ".", | |
| "url": "https://chromium.googlesource.com/angle/angle.git", | |
| "deps_file": "DEPS", | |
| "managed": False, | |
| "custom_vars": {}, | |
| }, | |
| ] | |
| target_os = ["${{ matrix.os }}"]' | |
| gclient sync -Rf --no-history --with_branch_heads | |
| - name: Build ANGLE | |
| run: | | |
| gn gen out/${{ matrix.os }}-${{ matrix.arch }} | |
| autoninja -C out/${{ matrix.os }}-${{ matrix.arch }} | |
| - name: Setup tmate session if failed | |
| if: ${{ failure() }} | |
| uses: mxschmitt/action-tmate@v3 | |
| - name: Upload builds | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ANGLE-${{ matrix.os }}-${{ matrix.arch }} | |
| path: out/${{ matrix.os }}-${{ matrix.arch }} | |
| - name: Upload shared library | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ANGLE-${{ matrix.os }}-${{ matrix.arch }}.so | |
| path: | | |
| out/${{ matrix.os }}-${{ matrix.arch }}/lib*.so | |
| !out/${{ matrix.os }}-${{ matrix.arch }}/*.so.TOC |