Skip to content

Commit 3c71718

Browse files
committed
ci: twister: Run Linux jobs inside container
The GitHub Actions runner may occasionally lose communication with the server (i.e. get denial-of-service'ed) when running twister directly on the runner host. To work around this, run twister inside a container, which is isolated from the GitHub Actions runner pod, as does the Zephyr main CI twister workflow. This commit also reworks the existing environment-specific steps for the CI Docker image environment. Signed-off-by: Stephanos Ioannidis <[email protected]>
1 parent 4c236b2 commit 3c71718

File tree

1 file changed

+33
-64
lines changed

1 file changed

+33
-64
lines changed

.github/workflows/twister.yml

Lines changed: 33 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ jobs:
6464

6565
outputs:
6666
runner: ${{ steps.plan.outputs.runner }}
67+
container: ${{ steps.plan.outputs.container }}
6768
subset: ${{ steps.plan.outputs.subset }}
6869
size: ${{ steps.plan.outputs.size }}
6970

@@ -73,11 +74,23 @@ jobs:
7374
run: |
7475
# Resolve runner type
7576
case "${{ github.event.inputs.host }}" in
76-
linux-x86_64) runner="zephyr-runner-v2-linux-x64-4xlarge";;
77-
linux-aarch64) runner="zephyr-runner-v2-linux-arm64-4xlarge";;
78-
macos-x86_64) runner="zephyr-runner-v2-macos-arm64-2xlarge";;
79-
macos-aarch64) runner="zephyr-runner-v2-macos-arm64-2xlarge";;
80-
windows-x86_64) runner="zephyr-runner-v2-windows-x64-2xlarge";;
77+
linux-x86_64)
78+
runner="zephyr-runner-v2-linux-x64-4xlarge"
79+
container="ghcr.io/zephyrproject-rtos/ci:v0.28.3"
80+
;;
81+
linux-aarch64)
82+
runner="zephyr-runner-v2-linux-arm64-4xlarge"
83+
container="ghcr.io/zephyrproject-rtos/ci:v0.28.3"
84+
;;
85+
macos-x86_64)
86+
runner="zephyr-runner-v2-macos-arm64-2xlarge"
87+
;;
88+
macos-aarch64)
89+
runner="zephyr-runner-v2-macos-arm64-2xlarge"
90+
;;
91+
windows-x86_64)
92+
runner="zephyr-runner-v2-windows-x64-2xlarge"
93+
;;
8194
esac
8295
8396
# Resolve subset count
@@ -94,6 +107,7 @@ jobs:
94107
95108
# Export output variables
96109
echo "runner=${runner}" >> $GITHUB_OUTPUT
110+
echo "container=${container}" >> $GITHUB_OUTPUT
97111
echo "subset=${subset}" >> $GITHUB_OUTPUT
98112
echo "size=${size}" >> $GITHUB_OUTPUT
99113
@@ -102,6 +116,11 @@ jobs:
102116
needs: [ prep ]
103117
runs-on:
104118
group: ${{ needs.prep.outputs.runner }}
119+
container: ${{ needs.prep.outputs.container }}
120+
121+
defaults:
122+
run:
123+
shell: bash
105124

106125
strategy:
107126
fail-fast: false
@@ -131,68 +150,18 @@ jobs:
131150
- name: Set up test environment (Linux)
132151
if: ${{ runner.os == 'Linux' }}
133152
run: |
134-
# Add ccache PPA to install up-to-date ccache
135-
sudo add-apt-repository -y -n ppa:stephanosio/ccache
136-
137153
# Add GitHub CLI source
138-
sudo mkdir -p -m 755 /etc/apt/keyrings
139-
sudo curl -L -o /etc/apt/keyrings/githubcli-archive-keyring.gpg \
140-
https://cli.github.com/packages/githubcli-archive-keyring.gpg
141-
sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg
142-
sudo mkdir -p -m 755 /etc/apt/sources.list.d
143-
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
154+
mkdir -p -m 755 /etc/apt/keyrings
155+
wget -O /etc/apt/keyrings/githubcli-archive-keyring.gpg \
156+
https://cli.github.com/packages/githubcli-archive-keyring.gpg
157+
chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg
158+
mkdir -p -m 755 /etc/apt/sources.list.d
159+
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null
144160
145161
# Install required system packages
146-
sudo apt-get update
147-
sudo apt-get install -y \
148-
ccache \
149-
cmake \
150-
device-tree-compiler \
151-
dfu-util \
152-
dos2unix \
153-
file \
154-
g++ \
155-
gcc \
156-
gh \
157-
git \
158-
gperf \
159-
jq \
160-
libmagic1 \
161-
make \
162-
ninja-build \
163-
protobuf-compiler \
164-
python3-dev \
165-
python3-tk \
166-
python3-venv \
167-
wget \
168-
xz-utils
169-
170-
if [ "${HOSTTYPE}" = "x86_64" ]; then
171-
sudo apt install -y \
172-
g++-multilib \
173-
gcc-multilib
174-
fi
175-
176-
# Set up Rust
177-
## Install Cargo package manager
178-
wget -q -O- "https://sh.rustup.rs" | sh -s -- -y --default-toolchain 1.86
179-
180-
## Make Cargo globally available
181-
PATH=~/.cargo/bin:$PATH
182-
echo "~/.cargo/bin" >> $GITHUB_PATH
183-
184-
## Install uefi-run utility
185-
sudo -E cargo install uefi-run --root /usr
186-
echo "OVMF_FD_PATH=/usr/share/ovmf/OVMF.fd" >> $GITHUB_ENV
187-
188-
## Install Rust target support required by Zephyr
189-
rustup target install riscv32i-unknown-none-elf
190-
rustup target install riscv64imac-unknown-none-elf
191-
rustup target install thumbv6m-none-eabi
192-
rustup target install thumbv7em-none-eabi
193-
rustup target install thumbv7m-none-eabi
194-
rustup target install thumbv8m.main-none-eabi
195-
rustup target install x86_64-unknown-none
162+
apt-get update
163+
apt-get install -y \
164+
gh
196165
197166
# Set environment variables
198167
echo "TAR=tar" >> $GITHUB_ENV

0 commit comments

Comments
 (0)