forked from google/angle
-
Notifications
You must be signed in to change notification settings - Fork 3
154 lines (149 loc) · 5.53 KB
/
Copy pathbuild.yml
File metadata and controls
154 lines (149 loc) · 5.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
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