Skip to content

Commit 90751a1

Browse files
committed
ci/package_core: refactor to prepare multi-package
* Generate CORE_ARTIFACT every step so that multi-package is possible via matrix iterations in the next commit. * Convert gen_package_index_json.sh to take parameters instead of environment variables. * Export the name of the package from get_board_details.sh. * Rework package_core.sh so that it is easily extendable to multiple packages. Signed-off-by: Luca Burelli <[email protected]>
1 parent 86a82db commit 90751a1

File tree

5 files changed

+84
-45
lines changed

5 files changed

+84
-45
lines changed

.github/workflows/package_core.yml

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@ jobs:
1313
CCACHE_IGNOREOPTIONS: -specs=*
1414
outputs:
1515
CORE_TAG: ${{ env.CORE_TAG }}
16-
CORE_ARTIFACT: ${{ env.CORE_ARTIFACT }}
16+
CORE_HASH: ${{ env.CORE_HASH }}
1717
ALL_BOARD_DATA: ${{ env.ALL_BOARD_DATA }}
1818
steps:
1919
- name: Install OS dependencies
2020
working-directory: /opt
2121
run: |
22+
sudo apt-get remove --purge man-db -y # skips the mandb triggers
2223
sudo apt-get update
2324
sudo apt-get install -y --no-install-recommends git cmake wget python3-pip ninja-build ccache
2425
@@ -32,9 +33,15 @@ jobs:
3233
- name: Initialize Zephyr environment
3334
run: |
3435
yes | ./extra/bootstrap.sh -o=--filter=tree:0
35-
echo "CORE_TAG=$(git describe --tags --exact-match || git describe --always)" >> "$GITHUB_ENV"
36-
echo "CORE_ARTIFACT=ArduinoCore-zephyr-$(git describe --always)" >> "$GITHUB_ENV"
37-
echo "ALL_BOARD_DATA=$(extra/get_board_details.sh | jq -cr 'sort_by(.variant)')" >> "$GITHUB_ENV"
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+
39+
- name: Map output packages
40+
# needs the above env vars to be usable
41+
run: |
42+
echo "CORE_TAG=$(git describe --tags --exact-match 2>/dev/null || echo $CORE_HASH)" >> "$GITHUB_ENV"
43+
echo "ARTIFACTS=$(jq -c '["zephyr"] + (map(.artifact) | unique)' <<< ${ALL_BOARD_DATA})" >> "$GITHUB_ENV"
44+
echo "SUB_ARCHES=$(jq -c 'map(.subarch) | unique' <<< ${ALL_BOARD_DATA})" >> "$GITHUB_ENV"
3845
3946
- name: ccache
4047
uses: hendrikmuhs/[email protected]
@@ -48,18 +55,21 @@ jobs:
4855
4956
- name: Package core
5057
run: |
58+
PACKAGE=zephyr
59+
CORE_ARTIFACT=ArduinoCore-$PACKAGE-${CORE_HASH}
5160
./extra/package_core.sh ${CORE_TAG} distrib/${CORE_ARTIFACT}.tar.bz2
5261
5362
- name: Archive core
5463
uses: actions/upload-artifact@v4
5564
with:
56-
name: ${{ env.CORE_ARTIFACT }}
57-
path: distrib/${{ env.CORE_ARTIFACT }}.tar.bz2
65+
name: ArduinoCore-zephyr-${{ env.CORE_HASH }}
66+
path: distrib/*.tar.bz2
5867

5968
test-core:
6069
name: Test on ${{ matrix.board }}
6170
runs-on: ubuntu-latest
62-
needs: package-core
71+
needs:
72+
- package-core
6373
strategy:
6474
matrix:
6575
include:
@@ -68,15 +78,15 @@ jobs:
6878
env:
6979
PLAT: arduino:zephyr
7080
FQBN: arduino:zephyr:${{ matrix.board }}
71-
CORE_ARTIFACT: ${{ needs.package-core.outputs.CORE_ARTIFACT }}
81+
CORE_ARTIFACT: ArduinoCore-zephyr-${{ needs.package-core.outputs.CORE_HASH }}
7282
steps:
7383
- uses: actions/download-artifact@v4
7484
with:
7585
name: ${{ env.CORE_ARTIFACT }}
7686

7787
- name: Set up core
7888
run: |
79-
tar xf ${CORE_ARTIFACT}.tar.bz2
89+
tar xf ${CORE_ARTIFACT}.tar.bz2 # will create ArduinoCore-zephyr/
8090
echo "REPORT_FILE=$(echo ${FQBN} | tr ':' '-').json" >> $GITHUB_ENV
8191
8292
- name: Create Blink sketch
@@ -209,8 +219,7 @@ jobs:
209219
id-token: write
210220
contents: read
211221
env:
212-
CORE_ARTIFACT: ${{ needs.package-core.outputs.CORE_ARTIFACT }}
213-
ARTIFACT_FILE: ${{ needs.package-core.outputs.CORE_ARTIFACT }}.tar.bz2
222+
CORE_ARTIFACT: ArduinoCore-zephyr-${{ needs.package-core.outputs.CORE_HASH }}
214223
steps:
215224
- uses: actions/download-artifact@v4
216225
with:
@@ -223,7 +232,7 @@ jobs:
223232
aws-region: ${{ secrets.AWS_REGION }}
224233

225234
- name: Upload artifact
226-
run: aws s3 cp ${ARTIFACT_FILE} s3://${{ secrets.S3_BUCKET }}/
235+
run: aws s3 cp ArduinoCore-*.tar.bz2 s3://${{ secrets.S3_BUCKET }}/
227236

228237
publish-json:
229238
name: Publish json
@@ -232,12 +241,9 @@ jobs:
232241
needs:
233242
- package-core
234243
- test-core
235-
- publish-core
236244
env:
237-
CORE_ARTIFACT: ${{ needs.package-core.outputs.CORE_ARTIFACT }}
238-
ARTIFACT_FILE: ${{ needs.package-core.outputs.CORE_ARTIFACT }}.tar.bz2
245+
CORE_ARTIFACT: ArduinoCore-zephyr-${{ needs.package-core.outputs.CORE_HASH }}
239246
CORE_TAG: ${{ needs.package-core.outputs.CORE_TAG }}
240-
PACKAGE_INDEX_JSON: zephyr-core-${{ needs.package-core.outputs.CORE_TAG }}.json
241247
steps:
242248
- uses: actions/checkout@v4
243249
with:
@@ -251,12 +257,15 @@ jobs:
251257
with:
252258
name: ${{ env.CORE_ARTIFACT }}
253259

254-
# uses: ARTIFACT_FILE CORE_TAG PACKAGE_INDEX_JSON
255260
- name: Prepare package index snippet
256-
run: ./extra/gen_package_index_json.sh
261+
run: |
262+
PACKAGE=zephyr
263+
ARTIFACT_FILE=ArduinoCore-${PACKAGE}-${CORE_HASH}.tar.bz2
264+
PACKAGE_JSON=ArduinoCore-${PACKAGE}-${CORE_TAG}.json
265+
./extra/gen_package_index_json.sh ${CORE_TAG} ${ARTIFACT_FILE} > ${PACKAGE_JSON}
257266
258267
- name: Archive package index snippet
259268
uses: actions/upload-artifact@v4
260269
with:
261-
name: ${{ env.PACKAGE_INDEX_JSON }}
262-
path: ${{ env.PACKAGE_INDEX_JSON }}
270+
name: ArduinoCore-zephyr-${{ env.CORE_TAG }}-jsons
271+
path: ArduinoCore-*-${{ env.CORE_TAG }}.json

extra/bootstrap.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#!/bin/bash
22

3+
set -e
4+
35
if [ ! -f platform.txt ]; then
46
echo Launch this script from the root core folder as ./extra/bootstrap.sh
57
exit 2

extra/gen_package_index_json.sh

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,22 @@
11
#!/bin/bash
22

3-
if [ -z "$CORE_TAG" ]; then
4-
echo "This script can be used in Github CI only."
3+
if [ $# -ne 2 ] ; then
4+
echo "Usage: $0 <core_tag> <artifact_file>"
55
exit 1
66
fi
77

8-
cat extra/zephyr-core-template.json | sed \
8+
PACKAGE=zephyr
9+
CORE_TAG=$1
10+
ARTIFACT_FILE=$2
11+
12+
if [ ! -f "$ARTIFACT_FILE" ] ; then
13+
echo "Artifact file '$ARTIFACT_FILE' not found" 1>&2
14+
exit 1
15+
fi
16+
17+
JSON_TEMPLATE="extra/zephyr-core-template.json"
18+
cat $JSON_TEMPLATE | sed \
919
-e "s/__CORE_TAG__/$CORE_TAG/" \
10-
-e "s/__ARTIFACT_FILE__/$ARTIFACT_FILE/" \
20+
-e "s/__ARTIFACT_FILE__/$(basename $ARTIFACT_FILE)/" \
1121
-e "s/__ARTIFACT_HASH__/$(sha256sum $ARTIFACT_FILE | awk '{print $1}')/" \
12-
-e "s/__ARTIFACT_SIZE__/$(stat -c %s $ARTIFACT_FILE)/" \
13-
> $PACKAGE_INDEX_JSON
22+
-e "s/__ARTIFACT_SIZE__/$(stat -c %s $ARTIFACT_FILE)/" | jq .

extra/get_board_details.sh

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ get_boards() {
77
get_board_field() {
88
board=$1
99
field=$2
10-
cat boards.txt | sed -e 's/#.*//' | grep -E "^$board\\.build\\.$field=" | cut -d '=' -f2- | sed -e 's/"/\"/g'
10+
cat boards.txt | sed -e 's/#.*//' | grep -E "^$board\\.$field=" | cut -d '=' -f2- | sed -e 's/"/\"/g'
1111
}
1212

1313
for BOARD in $(get_boards); do
14-
VARIANT=$(get_board_field $BOARD "variant")
15-
TARGET=$(get_board_field $BOARD "zephyr_target")
16-
ARGS=$(get_board_field $BOARD "zephyr_args")
17-
HALS=$(get_board_field $BOARD "zephyr_hals")
14+
NAME=$(get_board_field $BOARD "name")
15+
VARIANT=$(get_board_field $BOARD "build\\.variant")
16+
TARGET=$(get_board_field $BOARD "build\\.zephyr_target")
17+
ARGS=$(get_board_field $BOARD "build\\.zephyr_args")
18+
HALS=$(get_board_field $BOARD "build\\.zephyr_hals")
1819

1920
if [ -z "$TARGET" ] ; then
2021
echo "error: missing '$BOARD.build.zephyr_target'" 1>&2
@@ -25,5 +26,14 @@ for BOARD in $(get_boards); do
2526
exit 1
2627
fi
2728

28-
echo "{ \"board\": \"$BOARD\", \"variant\": \"$VARIANT\", \"target\": \"$TARGET\", \"args\": \"$ARGS\", \"hals\": \"$HALS\" }"
29+
cat << EOF
30+
{
31+
"name": "$NAME",
32+
"board": "$BOARD",
33+
"variant": "$VARIANT",
34+
"target": "$TARGET",
35+
"args": "$ARGS",
36+
"hals": "$HALS",
37+
}
38+
EOF
2939
done | jq -crs .

extra/package_core.sh

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,40 @@ if [ -z "$1" ]; then
88
fi
99

1010
if [ ! -f platform.txt ]; then
11-
echo "Launch this script from the root core folder as ./extra/package_core.sh VERSION"
11+
echo "Launch this script from the root core folder."
1212
exit 2
1313
fi
1414

15-
PACKAGE=ArduinoCore-zephyr
15+
PACKAGE=zephyr
1616
VERSION=$1
1717
OUTPUT_FILE=${2:-distrib/${PACKAGE}-${VERSION}.tar.bz2}
1818

1919
# create a temporary platform.txt file with the correct version
2020
TEMP_PLATFORM=$(mktemp -p . | sed 's/\.\///')
2121
sed -e "s/^version=.*/version=${VERSION}/" platform.txt > ${TEMP_PLATFORM}
2222

23-
TEMP_LIST=$(mktemp)
24-
echo ${TEMP_PLATFORM} > ${TEMP_LIST}
23+
declutter_file() {
24+
[ -f "$1" ] || return 0
25+
cat "$1" | sed -e 's/\s*#.*//' | grep -v '^\s*$'
26+
}
2527

26-
# import a basic list of files and directories
27-
cat extra/package_core.inc | sed -e 's/\s*#.*//' | grep -v '^\s*$' >> ${TEMP_LIST}
28-
29-
# add the board-specific files
28+
# create the list of files and directories to include
29+
TEMP_INC=$(mktemp -p . | sed 's/\.\///')
30+
echo ${TEMP_PLATFORM} >> ${TEMP_INC}
31+
declutter_file extra/package_core.inc >> ${TEMP_INC}
3032
extra/get_board_details.sh | jq -cr '.[]' | while read -r item; do
3133
variant=$(jq -cr '.variant' <<< "$item")
32-
echo "variants/${variant}/" >> ${TEMP_LIST}
33-
ls firmwares/zephyr-${variant}.* >> ${TEMP_LIST}
34+
echo "::info::`${variant}`"
35+
echo "variants/${variant}/" >> ${TEMP_INC}
36+
ls firmwares/zephyr-${variant}.* >> ${TEMP_INC}
3437
done
35-
cat ${TEMP_LIST}
38+
39+
# create the list of files and directories to exclude
40+
TEMP_EXC=$(mktemp -p . | sed 's/\.\///')
41+
declutter_file extra/package.exc >> ${TEMP_EXC}
42+
3643
mkdir -p $(dirname ${OUTPUT_FILE})
37-
tar -cjhf ${OUTPUT_FILE} -X extra/package_core.exc -T ${TEMP_LIST} --transform "s,${TEMP_PLATFORM},platform.txt," --transform "s,^,${PACKAGE}/,"
38-
rm -f ${TEMP_LIST} ${TEMP_PLATFORM}
44+
tar -cjhf ${OUTPUT_FILE} -X ${TEMP_EXC} -T ${TEMP_INC} \
45+
--transform "s,${TEMP_PLATFORM},platform.txt," \
46+
--transform "s,^,ArduinoCore-zephyr/,"
47+
rm -f ${TEMP_INC} ${TEMP_EXC} ${TEMP_PLATFORM}

0 commit comments

Comments
 (0)