Bump Zephyr version #571
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build | |
run-name: > | |
${{ github.event_name == 'workflow_dispatch' && | |
format('{0}{1}', | |
'Build', | |
(github.event.inputs.zephyr_version && format(' Zephyr: {0}', github.event.inputs.zephyr_version ) || '') | |
) | |
|| '' | |
}} | |
on: | |
workflow_dispatch: | |
inputs: | |
zephyr_version: | |
description: "Full SHA of Zephyr commit to be used." | |
required: true | |
default: '' | |
push: | |
env: | |
MATRIX_RUNNERS: 60 | |
jobs: | |
Prepare-Workload: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Handle manually-triggered workflows | |
if: ${{ github.event_name == 'workflow_dispatch' }} | |
env: | |
ZEPHYR_VERSION_OVERRIDE: ${{github.event.inputs.zephyr_version}} | |
run: | | |
echo "selected version: $ZEPHYR_VERSION_OVERRIDE" | |
sed -i "/ZEPHYR_VERSION=/c\export ZEPHYR_VERSION=$ZEPHYR_VERSION_OVERRIDE" .env | |
- name: Increase build space | |
run: | | |
echo "Before cleanup" | |
df -H | |
sudo rm -rf /usr/share/dotnet/* | |
sudo rm -rf /usr/local/lib/android/* | |
sudo rm -rf /opt/ghc/* | |
echo "After cleanup" | |
df -H | |
- name: Prepare Zephyr Enviroment | |
run: | | |
# Basic git config to apply patches | |
git config --global user.name 'CI' | |
git config --global user.email '<>' | |
source .env | |
# Download dependencies | |
./scripts/prepare_sources.sh | |
- name: Prepare Workload | |
id: set-matrix | |
run: | | |
source .env | |
./scripts/get_boards_samples_pairs.py -c zephyr.yaml | shuf > boards_sample_pairs | |
echo "matrix=`./scripts/generate_matrix.py`" >> $GITHUB_OUTPUT | |
ls -lah | |
- name: Create .tar.gz archive of the environment | |
run: | | |
tar czf env.tar.gz zephyrproject/ kenning-zephyr-workspace/ zephyr-sdk/ micropython/ boards_sample_pairs | |
- name: Upload environment artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: 'zephyr_env' | |
retention-days: 3 | |
if-no-files-found: error | |
path: | | |
env.tar.gz | |
Build: | |
needs: Prepare-Workload | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: ${{ fromJSON(needs.Prepare-Workload.outputs.matrix) }} | |
fail-fast: false | |
permissions: | |
contents: 'read' | |
id-token: write | |
steps: | |
- name: Maximize build space | |
uses: easimon/maximize-build-space@master | |
with: | |
root-reserve-mb: 6144 | |
swap-size-mb: 1024 | |
remove-dotnet: 'true' | |
remove-android: 'true' | |
remove-haskell: 'true' | |
remove-codeql: 'true' | |
- uses: actions/checkout@v3 | |
- name: Download environment artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: 'zephyr_env' | |
- name: Unpack the build env | |
run: | | |
tar xf env.tar.gz | |
ls -la | |
- name: Prepare build environment | |
run: | | |
source .env | |
# Install Zephyr SDK and pipeline dependencies | |
sudo apt -qq update | |
sudo apt -qq install --no-install-recommends git cmake ninja-build gperf \ | |
ccache dfu-util device-tree-compiler wget \ | |
python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file \ | |
make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1 parallel | |
ls -lah | |
# Setup runtime (SDK) | |
cd zephyr-sdk | |
./setup.sh -t all -h -c | |
export ZEPHYR_SDK_INSTALL_DIR=$(pwd) | |
cd - | |
# Setup runtime (west) | |
cd zephyrproject/zephyr | |
pip3 -q install -r scripts/requirements.txt | |
cd .. | |
west zephyr-export | |
cd .. | |
# Install build script dependencies | |
pip3 -q install -r requirements.txt | |
# Split wokrload between all runners | |
split --numeric-suffixes=1 --suffix-length=3 -n l/${MATRIX_RUNNERS} boards_sample_pairs boards_sample_pairs- | |
# List workload | |
ls -l boards_sample_pairs-* | |
- name: Build matrix | |
run: | | |
source .env | |
echo Zephyr Matrix Runner @${{ matrix.runner }} of ${MATRIX_RUNNERS} | |
# Assign jobs to a runner | |
WORKLOAD=$(printf "%03d" ${{ matrix.runner }}) | |
COUNT=$(wc -l < boards_sample_pairs-${WORKLOAD}) | |
# Start building | |
parallel -j +0 --keep-order --col-sep " " --halt now,fail=1 ./scripts/build.py --config=zephyr.yaml {} -j {#} -J ${COUNT} :::: boards_sample_pairs-${WORKLOAD} | |
- name: Transfer build status results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: status | |
path: | | |
build/**/*-result.json | |
- id: gcp-auth | |
if: ${{github.event_name == 'push' && github.ref == 'refs/heads/main'}} | |
name: GCP Authentcation | |
uses: google-github-actions/auth@v1 | |
with: | |
service_account: ${{ secrets.GCP_SA }} | |
workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} | |
cleanup_credentials: true | |
create_credentials_file: true | |
export_environment_variables: false | |
- name: Set up Cloud SDK | |
if: ${{github.event_name == 'push' && github.ref == 'refs/heads/main'}} | |
uses: google-github-actions/setup-gcloud@v1 | |
env: | |
GOOGLE_GHA_CREDS_PATH: ${{ steps.gcp-auth.outputs.credentials_file_path }} | |
with: | |
version: '>= 363.0.0' | |
- name: Upload artifacts to GCP | |
if: ${{github.event_name == 'push' && github.ref == 'refs/heads/main'}} | |
run: | | |
source .env | |
gsutil -m rsync -r build/ gs://zephyr-samples-builder/zephyr/$ZEPHYR_VERSION | |
Update-version-info: | |
needs: Print-status | |
runs-on: ubuntu-latest | |
if: ${{github.event_name == 'push' && github.ref == 'refs/heads/main'}} | |
concurrency: update_version_info | |
permissions: | |
contents: 'read' | |
id-token: write | |
steps: | |
- name: Increase build space | |
run: | | |
echo "Before cleanup" | |
df -H | |
sudo rm -rf /usr/share/dotnet/* | |
sudo rm -rf /usr/local/lib/android/* | |
sudo rm -rf /opt/ghc/* | |
echo "After cleanup" | |
df -H | |
- uses: actions/checkout@v3 | |
- name: Download environment artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: 'zephyr_env' | |
- name: Unpack the build env | |
run: | | |
tar xf env.tar.gz | |
ls -la | |
- id: gcp-auth | |
name: GCP Authentcation | |
uses: google-github-actions/auth@v1 | |
with: | |
service_account: ${{ secrets.GCP_SA }} | |
workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} | |
cleanup_credentials: true | |
create_credentials_file: true | |
export_environment_variables: false | |
- name: Set up Cloud SDK | |
uses: google-github-actions/setup-gcloud@v1 | |
env: | |
GOOGLE_GHA_CREDS_PATH: ${{ steps.gcp-auth.outputs.credentials_file_path }} | |
with: | |
version: '>= 363.0.0' | |
- name: Update the `latest` file in the bucket. | |
run: | | |
source .env | |
CURRENT_LATEST="" | |
LATEST_REMOTE_FILE="gs://zephyr-samples-builder/zephyr/latest" | |
# If the `latest` file exists, read its contents. | |
! gsutil -q stat $LATEST_REMOTE_FILE \ | |
|| CURRENT_LATEST=$(gsutil cat $LATEST_REMOTE_FILE) | |
cd zephyrproject/zephyr | |
git fetch origin main | |
# if `latest doesn't exist or is older then ZEPHYR_VERSION that was built in this workflow. | |
if [ -z "$CURRENT_LATEST" ] || ! git merge-base --is-ancestor "$ZEPHYR_VERSION" "$CURRENT_LATEST"; then | |
echo $ZEPHYR_VERSION > latest | |
gsutil cp latest $LATEST_REMOTE_FILE | |
gsutil setmeta -h "Cache-Control:no-store" $LATEST_REMOTE_FILE | |
fi | |
- name: Update the `versions` file in the bucket. | |
run: | | |
source .env | |
VERSIONS_REMOTE_FILE="gs://zephyr-samples-builder/zephyr/versions" | |
touch versions | |
# If the `latest` file exists, read its contents. | |
! gsutil -q stat $VERSIONS_REMOTE_FILE \ | |
|| gsutil cp $VERSIONS_REMOTE_FILE versions | |
COUNT_ENTRIES=$(wc -l < versions) | |
echo "The remote file has $COUNT_ENTRIES entries." | |
# Store information about the version. | |
if ! grep -q "$ZEPHYR_VERSION" versions; then | |
echo "New version candidate for the versions file:" | |
echo "$ZEPHYR_VERSION" | tee -a versions | |
gsutil cp versions $VERSIONS_REMOTE_FILE | |
gsutil setmeta -h "Cache-Control:no-store" $VERSIONS_REMOTE_FILE | |
else | |
echo "The version is already present in the versions file:" | |
echo "$ZEPHYR_VERSION" | |
fi | |
Print-status: | |
needs: Build | |
runs-on: ubuntu-latest | |
permissions: | |
contents: 'read' | |
id-token: write | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Download build status results | |
uses: actions/download-artifact@v3 | |
with: | |
name: status | |
path: build/ | |
- name: Install python dependencies | |
run: | | |
pip3 -q install -r requirements.txt | |
- name: Print status | |
run: | | |
source .env | |
./scripts/generate_summary.py -c zephyr.yaml >> $GITHUB_STEP_SUMMARY | |
./scripts/generate_diff.py -c zephyr.yaml || true | |
- id: gcp-auth | |
if: ${{github.event_name == 'push' && github.ref == 'refs/heads/main'}} | |
name: GCP Authentcation | |
uses: google-github-actions/auth@v1 | |
with: | |
service_account: ${{ secrets.GCP_SA }} | |
workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }} | |
cleanup_credentials: true | |
create_credentials_file: true | |
export_environment_variables: false | |
- name: Set up Cloud SDK | |
if: ${{github.event_name == 'push' && github.ref == 'refs/heads/main'}} | |
uses: google-github-actions/setup-gcloud@v1 | |
env: | |
GOOGLE_GHA_CREDS_PATH: ${{ steps.gcp-auth.outputs.credentials_file_path }} | |
with: | |
version: '>= 363.0.0' | |
- name: Upload artifacts to GCP | |
if: ${{github.event_name == 'push' && github.ref == 'refs/heads/main'}} | |
run: | | |
source .env | |
gsutil cp build/result.json gs://zephyr-samples-builder/zephyr/$ZEPHYR_VERSION | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: status | |
path: | | |
build/result.json |