-
-
Notifications
You must be signed in to change notification settings - Fork 8
360 lines (318 loc) · 11.8 KB
/
update.yml
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
name: Update
on:
workflow_dispatch:
inputs:
sdk:
description: "Version of Playdate SDK"
default: latest
type: string
required: true
source:
description: "Source ref used to build bindings. Uses `github.ref`` by default."
required: false
sha:
description: "Source SHA used to build bindings. Uses `github.sha`` by default."
required: false
# push:
# branches: [main, master]
schedule:
- cron: "0 15 * * 1,3,5"
env:
CARGO_INCREMENTAL: 1
CARGO_NET_RETRY: 10
RUSTUP_MAX_RETRIES: 10
CARGO_TERM_COLOR: always
CARGO_TERM_PROGRESS_WHEN: never
# logging:
CARGO_PLAYDATE_LOG: trace
# allow modify source for bindings generator:
PD_BUILD_PREBUILT: 1
permissions:
contents: write
jobs:
new-branch:
name: Branch
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- name: Input
run: |
echo "ref: ${{ github.ref }}, ${{ github.ref_name }}"
echo "inputs: ${{ github.event.inputs.source }}, ${{ github.event.inputs.sha }}"
echo "default branch: ${{ github.event.repository.default_branch }}"
echo "Will checkout ${{ github.event.inputs.source || github.ref }}"
- name: Checkout Master
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.source || github.ref || github.event.repository.default_branch }}
- name: Base branch name
id: base
if: ${{ github.ref_type == 'branch' }}
run: echo "value=${{ github.ref_name }}" >> "$GITHUB_OUTPUT"
- name: Work branch name
id: work_branch
run: |
NAME_SUFFIX="${{ (github.ref_type == 'branch' && github.ref_name) || (github.event.inputs.sha || github.sha) }}"
echo "value=api/sys/pre-build/$NAME_SUFFIX" >> "$GITHUB_OUTPUT"
echo "suffix: '$NAME_SUFFIX'"
- name: Create Branch
id: branch
uses: peterjgrainger/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
branch: refs/heads/${{ steps.work_branch.outputs.value }}
sha: ${{ github.event.inputs.sha || github.sha }}
- name: Created
run: 'echo "Created: ${{ steps.branch.outputs.created }}"'
# if not created => rebase to master
- name: ReSync Branch
if: ${{ steps.branch.outputs.created == 'false' }}
uses: Joao208/[email protected]
with:
PERSONAL_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_NAME: ${{ steps.work_branch.outputs.value }}
DEFAULT_BRANCH: ${{ github.event.inputs.source || steps.base.outputs.value || github.event.repository.default_branch }}
outputs:
working: ${{ steps.work_branch.outputs.value }}
base: ${{ github.event.inputs.source || steps.base.outputs.value || github.event.repository.default_branch }}
pre-gen:
name: Gen ${{ matrix.features.name }} (${{ matrix.os }})
defaults:
run:
shell: bash
needs: new-branch
runs-on: ${{ matrix.os }}
strategy:
fail-fast: true
matrix:
os:
- macos-14
- ubuntu-latest
- windows-latest
sdk:
- ${{ github.event.inputs.sdk || 'latest' }}
features:
- v: >-
bindings-documentation
bindings-derive-debug
name: default
- v: >-
bindings-documentation
bindings-derive-default
bindings-derive-eq
bindings-derive-copy
bindings-derive-debug
bindings-derive-hash
bindings-derive-ord
bindings-derive-partialeq
bindings-derive-partialord
name: full
steps:
- name: Inputs
run: |
echo "I: SDK version: ${{ github.event.inputs.sdk }}"
echo "M: SDK version: ${{ matrix.sdk }}"
echo "Base branch: ${{ needs.new-branch.outputs.base }}"
echo "Working branch: ${{ needs.new-branch.outputs.working }}"
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ needs.new-branch.outputs.working }}
- name: Cache
uses: actions/cache@v4
with:
path: |
target/
~/.cargo
key: ${{ runner.os }}-update-${{ hashFiles('Cargo.lock') }}
- name: Install Deps
uses: ./.github/actions/tools-deps
- name: Install Playdate SDK ${{ matrix.sdk }}
id: sdk
uses: pd-rs/get-playdate-sdk@main
with:
version: ${{ matrix.sdk }}
custom-url: ${{ matrix.sdk == 'beta' && ((runner.os == 'macOS' && secrets.SDK_BETA_MACOS) || (runner.os == 'Linux' && secrets.SDK_BETA_LINUX) || (runner.os == 'Windows' && secrets.SDK_BETA_WINDOWS)) || '' }}
- name: SDK ${{ steps.sdk.outputs.version }} installed
run: which pdc && pdc --version
- name: Install targets (mac)
if: runner.os == 'macOS'
run: |
rustup target add aarch64-apple-darwin
rustup target add x86_64-apple-darwin
- name: Install targets (win)
if: runner.os == 'Windows'
run: |
rustup target add x86_64-pc-windows-msvc
rustup target add aarch64-pc-windows-msvc
- name: Git Pull
run: git pull
- name: Host
run: >-
cargo build -p=playdate-sys --features="${{ matrix.features.v }}"
${{ runner.os == 'macOS' && '--target=aarch64-apple-darwin --target=x86_64-apple-darwin' || '' }}
${{ runner.os == 'Windows' && '--target=x86_64-pc-windows-msvc --target=aarch64-pc-windows-msvc' || '' }}
- name: Device
if: ${{ matrix.os == 'ubuntu-latest' }}
run: cargo build -p=playdate-sys --features="${{ matrix.features.v }}" --target=thumbv7em-none-eabihf
- name: Format
run: rustfmt api/sys/gen/*.rs
- name: Test (host)
# env: # uncomment when all bindings for min-supported-SDK will be there
# IGNORE_EXISTING_PLAYDATE_SDK: 1
# PLAYDATE_USE_PREBUILT_VERSION: ${{ steps.sdk.outputs.version }}
run: |
cargo test -p=playdate-sys --features="lang-items ${{ matrix.features.v }}"
cargo test -p=playdate-sys --features="lang-items ${{ matrix.features.v }}" --release
- name: Test (device)
if: ${{ matrix.os == 'ubuntu-latest' }}
# env: # uncomment when all bindings for min-supported-SDK will be there
# IGNORE_EXISTING_PLAYDATE_SDK: 1
# PLAYDATE_USE_PREBUILT_VERSION: ${{ steps.sdk.outputs.version }}
run: |
cargo build -p=playdate-sys --features="lang-items ${{ matrix.features.v }}" --target=thumbv7em-none-eabihf -Zbuild-std=core,alloc
cargo build -p=playdate-sys --features="lang-items ${{ matrix.features.v }}" --target=thumbv7em-none-eabihf -Zbuild-std=core,alloc --release
- name: Commit
continue-on-error: true
id: commit
uses: EndBug/add-and-commit@v9
with:
add: ./api/sys/gen/*.rs
author_name: Update Bot
author_email: [email protected]
committer_name: Update Bot
message: >-
Automated build pre-built bindings for ${{ steps.sdk.outputs.version }}
on ${{ runner.os }}-${{ runner.arch }}
with features: ${{ matrix.features.name }}
pull: "--rebase --autostash"
push: true
- name: Committed
if: ${{ steps.commit.outcome =='success' }}
run: |
echo "Committed: ${{ steps.commit.outputs.committed }}"
echo "Pushed: ${{ steps.commit.outputs.pushed }}"
echo "SHA: ${{ steps.commit.outputs.commit_sha }}"
changes:
name: Changes
needs: [new-branch, pre-gen]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ needs.new-branch.outputs.working }}
fetch-depth: 10
# Maybe better just checkout and then
# git rev-list --ancestry-path ${{ needs.new-branch.outputs.base || github.event.repository.default_branch }}..${{ needs.new-branch.outputs.working }}
# It's faster, simplier and less deps.
- name: Changes
id: changes
continue-on-error: true
uses: tj-actions/changed-files@v44
with:
skip_initial_fetch: "false"
sha: ${{ needs.new-branch.outputs.working }}
base_sha: ${{ needs.new-branch.outputs.base || github.event.repository.default_branch }}
- name: List changed files
if: steps.changes.outcome == 'success'
env:
ALL_CHANGED_FILES: ${{ steps.changes.outputs.all_changed_files }}
run: |
for file in ${ALL_CHANGED_FILES}; do
echo "$file was changed"
done
outputs:
changes: ${{ steps.changes.outputs.all_changed_files }}
changed: ${{ steps.changes.outputs.all_changed_files && 'true' || ' ' }}
bump:
name: Bump
needs: [new-branch, pre-gen, changes]
runs-on: ubuntu-latest
continue-on-error: true # Workspaces are not supported yet
if: needs.changes.outputs.changed == 'true'
defaults:
run:
shell: bash
permissions:
pull-requests: write
contents: write
steps:
- uses: actions/checkout@v4
with:
ref: ${{ needs.new-branch.outputs.working }}
- name: Install cargo semver tool
uses: baptiste0928/cargo-install@v3
with:
crate: cargo-semver-tool
- name: Bump Version
run: cd ./api/sys && cargo semver bump
- name: Commit
id: commit
uses: EndBug/[email protected]
with:
add: ./api/sys/Cargo.toml
author_name: Bump Bot
author_email: [email protected]
committer_name: Bump Bot
message: Automated bump sys crate version
pull: "--rebase --autostash"
push: true
- name: Committed
run: |
echo "Committed: ${{ steps.commit.outputs.committed }}"
echo "Pushed: ${{ steps.commit.outputs.pushed }}"
echo "SHA: ${{ steps.commit.outputs.commit_sha }}"
pr:
name: PR
needs: [new-branch, pre-gen, bump, tests]
runs-on: ubuntu-latest
defaults:
run:
shell: bash
permissions:
pull-requests: write
contents: write
steps:
- name: Inputs
run: |
echo "Base branch: ${{ needs.new-branch.outputs.base }}"
echo "Working branch: ${{ needs.new-branch.outputs.working }}"
- uses: actions/checkout@v4
with:
ref: ${{ needs.new-branch.outputs.working }}
- name: Create PR
id: pr
uses: TreTuna/[email protected]
with:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
FROM_BRANCH: refs/heads/${{ needs.new-branch.outputs.working }}
TO_BRANCH: ${{ needs.new-branch.outputs.base || github.event.repository.default_branch }}
PULL_REQUEST_TITLE: Update pre-built bindings
PULL_REQUEST_BODY: |
- [x] Pre-built bindings just updated.
- [${{ needs.bump.result == 'success' && 'x' || ' ' }}] Bump sys crate
- [${{ needs.tests.result == 'success' && 'x' || ' ' }}] Tests passed
PULL_REQUEST_IS_DRAFT: false
CONTENT_COMPARISON: true
REVIEWERS: '["boozook"]'
outputs:
number: ${{ steps.pr.outputs.PULL_REQUEST_NUMBER }}
url: ${{ steps.pr.outputs.PULL_REQUEST_URL }}
tests:
name: Tests
needs: [new-branch, pre-gen, changes]
if: needs.changes.outputs.changed == 'true'
uses: ./.github/workflows/tests.yml
secrets: inherit
permissions:
actions: read
contents: read
pull-requests: write
checks: write
issues: write
with:
ref: ${{ needs.new-branch.outputs.working }}