Skip to content

Commit e533767

Browse files
committed
wip debug
1 parent dcc6f59 commit e533767

File tree

1 file changed

+6
-328
lines changed

1 file changed

+6
-328
lines changed

.github/workflows/package_core.yml

Lines changed: 6 additions & 328 deletions
Original file line numberDiff line numberDiff line change
@@ -5,341 +5,19 @@ on:
55
- pull_request
66

77
jobs:
8-
build-env:
9-
name: Prepare build environment
10-
runs-on: ubuntu-latest
11-
outputs:
12-
CORE_TAG: ${{ env.CORE_TAG }}
13-
CORE_HASH: ${{ env.CORE_HASH }}
14-
ALL_BOARD_DATA: ${{ env.ALL_BOARD_DATA }}
15-
ARTIFACTS: ${{ env.ARTIFACTS }}
16-
SUB_ARCHES: ${{ env.SUB_ARCHES }}
17-
steps:
18-
19-
- name: Install OS dependencies
20-
working-directory: /opt
21-
run: |
22-
sudo apt-get remove --purge man-db -y # skips the mandb triggers
23-
sudo apt-get update
24-
sudo apt-get install -y --no-install-recommends git cmake wget python3-pip ninja-build
25-
26-
- uses: actions/checkout@v4
27-
with:
28-
submodules: 'recursive'
29-
fetch-depth: 0
30-
persist-credentials: false
31-
fetch-tags: true
32-
33-
- name: Initialize Zephyr environment
34-
run: |
35-
yes | ./extra/bootstrap.sh -o=--filter=tree:0
36-
echo "CORE_HASH=$(git describe --always)" >> "$GITHUB_ENV"
37-
echo "ALL_BOARD_DATA=$(extra/get_board_details.sh | jq -c 'sort_by(.variant)')" >> "$GITHUB_ENV"
38-
echo "## Building \`$(extra/get_core_version.sh)\`" >> "$GITHUB_STEP_SUMMARY"
39-
40-
- name: Map output packages
41-
# needs the above env vars to be usable
42-
run: |
43-
echo "CORE_TAG=$(git describe --tags --exact-match 2>/dev/null || echo $CORE_HASH)" >> "$GITHUB_ENV"
44-
echo "ARTIFACTS=$(jq -c '["zephyr"] + (map(.artifact) | unique)' <<< ${ALL_BOARD_DATA})" >> "$GITHUB_ENV"
45-
echo "SUB_ARCHES=$(jq -c 'map(.subarch) | unique' <<< ${ALL_BOARD_DATA})" >> "$GITHUB_ENV"
46-
47-
(cd && tar cphf - .cmake work zephyr-sdk-* | zstd > build-env.tar.zstd)
48-
tar cphf - cores/arduino/api | zstd > arduino-api.tar.zstd
49-
50-
- name: Archive build environment
51-
uses: actions/upload-artifact@v4
52-
with:
53-
name: build-env
54-
path: ~/build-env.tar.zstd
55-
56-
- name: Archive API snapshot
57-
uses: actions/upload-artifact@v4
58-
with:
59-
name: arduino-api
60-
path: arduino-api.tar.zstd
61-
62-
build-board:
63-
name: Build loader for ${{ matrix.board }}
64-
runs-on: ubuntu-latest
65-
needs:
66-
- build-env
67-
env:
68-
CCACHE_IGNOREOPTIONS: -specs=*
69-
ARTIFACT_TAG: ${{ needs.build-env.outputs.CORE_HASH }}-${{ matrix.board }}
70-
strategy:
71-
matrix:
72-
include:
73-
${{ fromJSON( needs.build-env.outputs.ALL_BOARD_DATA ) }}
74-
fail-fast: false
75-
steps:
76-
- uses: actions/download-artifact@v4
77-
with:
78-
path: /home/runner
79-
name: build-env
80-
81-
- name: Restore build environment
82-
run: |
83-
sudo apt-get remove --purge man-db -y # skips the mandb triggers
84-
sudo apt-get update
85-
sudo apt-get install -y --no-install-recommends git cmake wget python3-pip ninja-build ccache
86-
(cd ~ && tar --use-compress-program=unzstd -xpf build-env.tar.zstd && rm build-env.tar.zstd)
87-
88-
- name: ccache
89-
uses: hendrikmuhs/[email protected]
90-
with:
91-
verbose: 1
92-
key: ${{ github.job }}-${{ matrix.board }}
93-
94-
- name: Build loader
95-
shell: bash
96-
run: |
97-
REPORT=reports/zephyr-${{ matrix.variant }}
98-
mkdir -p reports
99-
if ! ./extra/build.sh ${{ matrix.board }} 1> >(tee $REPORT.stdout) 2> >(tee $REPORT.stderr) ; then
100-
echo "### :x: ${{ matrix.board }} (\`${{ matrix.variant }}\`) build errors" > $GITHUB_STEP_SUMMARY
101-
echo >> $GITHUB_STEP_SUMMARY
102-
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
103-
cat $REPORT.stderr >> $GITHUB_STEP_SUMMARY
104-
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
105-
exit 1
106-
fi
107-
108-
# look for warnings (errors are a happy path!)
109-
grep -i "warning:" $REPORT.stdout > $REPORT.warnings || true
110-
111-
# extract the memory usage table (from the header to the first non-% line)
112-
cat $REPORT.stdout | sed -n '/^Memory region/,/^[^%]*$/p' | head -n -1 \
113-
| awk 'BEGIN {split("B KB MB GB", u); for(i in u) m[u[i]]=1024^(i-1)} /:/ {print "[\"" $1 "\"," $2*m[$3] "," $4*m[$5] "]"}' \
114-
| sort | jq -s > $REPORT.meminfo
115-
116-
- name: Get build job ID
117-
id: job_id
118-
if: ${{ success() || failure() }}
119-
uses: actions/github-script@main
120-
with:
121-
script: |
122-
const { data: workflow_run } = await github.rest.actions.listJobsForWorkflowRun({
123-
owner: context.repo.owner,
124-
repo: context.repo.repo,
125-
run_id: context.runId
126-
});
127-
const job_name = `Build loader for ${{ matrix.board }}`
128-
return workflow_run.jobs.find((job) => job.name === job_name).id;
129-
130-
- name: Package board artifacts
131-
if: ${{ !cancelled() }}
132-
run: |
133-
# Add job ID report
134-
echo ${{ steps.job_id.outputs.result }} > $REPORT.jobid
135-
echo "REPORT_FILES<<EOF" >> $GITHUB_ENV
136-
ls reports/* >> $GITHUB_ENV
137-
echo "EOF" >> $GITHUB_ENV
138-
139-
# Archive built binaries (and build dir on failure)
140-
[ "${{ job.status }}" == "failure" ] && FULL_BUILD_DIR="build/${{ matrix.variant }}/"
141-
tar chf - \
142-
firmwares/*${{ matrix.variant }}* \
143-
variants/${{ matrix.variant }}/ \
144-
${FULL_BUILD_DIR} \
145-
| zstd > binaries-${ARTIFACT_TAG}.tar.zstd
146-
147-
- name: Archive board binaries
148-
if: ${{ !cancelled() }}
149-
uses: actions/upload-artifact@v4
150-
with:
151-
name: ${{ format('{0}binaries-{1}', (job.status == 'failure') && 'failed-' || '', env.ARTIFACT_TAG) }}
152-
path: binaries-${{ env.ARTIFACT_TAG }}.tar.zstd
153-
154-
- name: Archive build reports
155-
if: ${{ !cancelled() }}
156-
uses: actions/upload-artifact@v4
157-
with:
158-
name: build-report-${{ env.ARTIFACT_TAG }}
159-
path: ${{ env.REPORT_FILES }}
160-
161-
package-core:
162-
name: Package ${{ matrix.artifact }}
163-
runs-on: ubuntu-latest
164-
needs:
165-
- build-env
166-
- build-board
167-
env:
168-
ALL_BOARD_DATA: ${{ needs.build-env.outputs.ALL_BOARD_DATA }}
169-
CORE_ARTIFACT: ArduinoCore-${{ matrix.artifact }}-${{ needs.build-env.outputs.CORE_HASH }}
170-
CORE_TAG: ${{ needs.build-env.outputs.CORE_TAG }}
171-
strategy:
172-
matrix:
173-
artifact: ${{ fromJSON( needs.build-env.outputs.ARTIFACTS ) }}
174-
fail-fast: false
175-
if: ${{ !cancelled() && needs.build-env.result == 'success' }}
176-
steps:
177-
- uses: actions/checkout@v4
178-
with:
179-
submodules: 'recursive'
180-
fetch-depth: 0
181-
persist-credentials: false
182-
fetch-tags: true
183-
184-
- uses: actions/download-artifact@v4
185-
with:
186-
path: .
187-
name: arduino-api
188-
189-
- uses: actions/download-artifact@v4
190-
with:
191-
path: .
192-
pattern: binaries-*
193-
merge-multiple: true
194-
195-
- name: Package core
196-
run: |
197-
rm -f cores/arduino/api # remove broken symlink
198-
tar --use-compress-program=unzstd -xpf arduino-api.tar.zstd
199-
for f in binaries-*.tar.zstd ; do
200-
tar --use-compress-program=unzstd -xpf $f
201-
done
202-
./extra/package_core.sh ${{ matrix.artifact }} ${CORE_TAG} distrib/${CORE_ARTIFACT}.tar.bz2
203-
204-
- uses: actions/upload-artifact@v4
205-
if: ${{ success() || failure() }}
206-
with:
207-
name: ${{ env.CORE_ARTIFACT }}
208-
path: distrib/${{ env.CORE_ARTIFACT }}.tar.bz2
209-
210-
cleanup-build:
211-
name: Clean up intermediates
212-
runs-on: ubuntu-latest
213-
needs:
214-
- package-core
215-
steps:
216-
- uses: geekyeggo/[email protected]
217-
with:
218-
name: |
219-
arduino-api
220-
binaries-*
221-
build-env
222-
failOnError: false
223-
224-
test-core:
225-
name: Test ${{ matrix.subarch }}:${{ matrix.board }}
226-
runs-on: ubuntu-latest
227-
needs:
228-
- build-env
229-
- package-core
230-
strategy:
231-
matrix:
232-
include:
233-
${{ fromJSON( needs.build-env.outputs.ALL_BOARD_DATA ) }}
234-
fail-fast: false
235-
env:
236-
PLAT: arduino:${{ matrix.subarch }}
237-
FQBN: arduino:${{ matrix.subarch }}:${{ matrix.board }}
238-
CORE_ARTIFACT: ArduinoCore-${{ matrix.artifact }}-${{ needs.build-env.outputs.CORE_HASH }}
239-
ARTIFACT_TAG: ${{ needs.build-env.outputs.CORE_HASH }}-${{ matrix.board }}
240-
if: ${{ !cancelled() && needs.build-env.result == 'success' }}
241-
steps:
242-
- uses: actions/checkout@v4
243-
with:
244-
fetch-depth: 0
245-
persist-credentials: false
246-
sparse-checkout: |
247-
extra/ci_test_list.sh
248-
extra/artifacts/
249-
250-
- uses: actions/download-artifact@v4
251-
with:
252-
name: ${{ env.CORE_ARTIFACT }}
253-
254-
- name: Set up core
255-
run: |
256-
tar xf ${CORE_ARTIFACT}.tar.bz2 # will create ArduinoCore-zephyr/
257-
echo "REPORT_FILE=$(echo ${FQBN} | tr ':' '-').json" >> $GITHUB_ENV
258-
259-
- name: Get test sketches
260-
run: |
261-
# sets ALL_TESTS and ALL_LIBRARIES env vars
262-
extra/ci_test_list.sh ${{ matrix.artifact }} ${{ matrix.variant }}
263-
264-
- name: Compile tests for ${{ matrix.board }}
265-
uses: pillo79/compile-sketches@next
266-
with:
267-
fqbn: ${{ env.FQBN }}
268-
platforms: |
269-
# Use Board Manager version first, to install the toolchain
270-
- name: ${{ env.PLAT }}
271-
- name: ${{ env.PLAT }}
272-
source-path: "ArduinoCore-zephyr"
273-
sketch-paths: |
274-
${{ env.ALL_TESTS }}
275-
libraries: |
276-
${{ env.ALL_LIBRARIES }}
277-
cli-compile-flags: |
278-
- '--build-property'
279-
- 'compiler.c.extra_flags=-Wno-type-limits -Wno-missing-field-initializers'
280-
- '--build-property'
281-
- 'compiler.cpp.extra_flags=-Wno-type-limits -Wno-missing-field-initializers'
282-
verbose: 'false'
283-
enable-deltas-report: 'false'
284-
enable-issues-report: 'true'
285-
always-succeed: 'true'
286-
287-
- name: Get test job ID
288-
id: job_id
289-
if: ${{ success() || failure() }}
290-
uses: actions/github-script@main
291-
with:
292-
script: |
293-
const { data: workflow_run } = await github.rest.actions.listJobsForWorkflowRun({
294-
owner: context.repo.owner,
295-
repo: context.repo.repo,
296-
run_id: context.runId
297-
});
298-
const job_name = `Test ${{ matrix.subarch }}:${{ matrix.board }}`
299-
return workflow_run.jobs.find((job) => job.name === job_name).id;
300-
301-
- name: Prepare log
302-
if: ${{ success() || failure() }}
303-
run: |
304-
[ ! -f sketches-reports/${REPORT_FILE} ] && mkdir -p sketches-reports && echo "{}" > sketches-reports/${REPORT_FILE}
305-
sed -i -e 's!/home/runner/.arduino15/packages/arduino/hardware/zephyr/[^/]*/!!g' sketches-reports/${REPORT_FILE}
306-
cat sketches-reports/${REPORT_FILE} | jq -cr ". += { job_id: ${{ steps.job_id.outputs.result }} }" > ${REPORT_FILE} && mv ${REPORT_FILE} sketches-reports/
307-
308-
- uses: actions/upload-artifact@v4
309-
if: ${{ success() || failure() }}
310-
with:
311-
name: test-report-${{ env.ARTIFACT_TAG }}
312-
path: sketches-reports/*
313-
3148
inspect-logs:
3159
name: Analyze logs
31610
runs-on: ubuntu-latest
317-
needs:
318-
- build-env
319-
- package-core
320-
- test-core
321-
if: ${{ !cancelled() && needs.build-env.result == 'success' }}
322-
env:
323-
ALL_BOARD_DATA: ${{ needs.build-env.outputs.ALL_BOARD_DATA }}
32411
steps:
325-
- uses: actions/checkout@v4
326-
with:
327-
fetch-depth: 0
328-
persist-credentials: false
329-
330-
- uses: actions/download-artifact@v4
331-
with:
332-
path: .
333-
pattern: "*-report-*"
334-
merge-multiple: true
335-
33612
# Collect and summarize logs
33713
- run: |
33814
mkdir -p reports
15+
33916
echo ${{ github.event.pull_request.number }} > pr_number
340-
extra/ci_inspect_logs.py reports/result reports/summary reports/full_log
341-
echo "CI_RESULT=$(cat reports/result)" > $GITHUB_OUTPUT
342-
if ${{ github.event_name != 'pull_request' && 'true' || 'false' }}; then
17+
echo "CI_RESULT=PASSED" > $GITHUB_OUTPUT
18+
echo "summary text" > reports/summary
19+
echo "full log" > reports/full_log
20+
if [ "${{ github.event_name }}" != "pull_request" ]; then
34321
cat reports/summary >> $GITHUB_STEP_SUMMARY
34422
fi
34523
cat reports/full_log >> $GITHUB_STEP_SUMMARY
@@ -368,7 +46,7 @@ jobs:
36846
steps:
36947
- name: CI run result
37048
run: |
371-
exit ${{ ((needs.inspect-logs.CI_RESULT == 'PASSED') && !contains(needs.*.result, 'failure')) && '0' || '1' }}
49+
exit ${{ ((needs.inspect-logs.outputs.CI_RESULT == 'PASSED') && !contains(needs.*.result, 'failure')) && '0' || '1' }}
37250
37351
publish-core:
37452
name: Publish core

0 commit comments

Comments
 (0)