Skip to content

Build ANGLE

Build ANGLE #60

Workflow file for this run

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