| Message ID | 20251101062447.3388795-2-cedric.hombourger@siemens.com |
|---|---|
| State | Superseded |
| Headers | show |
| Series | [v2,1/1] test: provide ci_shell as a convenience wrapper | expand |
On 01.11.25 07:24, 'Cedric Hombourger' via isar-users wrote: > Ease use of the container environment that may be used to run > tests from this project by adding a `scripts/ci_shell` script > to invoke `kas-container` for you. The script uses a simple > kas fragment (`kas/ci-shell.yml`) to use your existing copy > of the Isar code checkout: this makes it easier to test your > work-in-progress changes. Lastly, `ci_setup.sh` will produce > less output (e.g. when installing dependencies) and will > print a few hints to remind users with useful commands. > > Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com> > --- > CONTRIBUTING.md | 52 +++++++++++---------------------------------- > kas/ci-shell.yml | 19 +++++++++++++++++ > scripts/ci_setup.sh | 32 +++++++++++++++++++++++----- > scripts/ci_shell | 18 ++++++++++++++++ > 4 files changed, 76 insertions(+), 45 deletions(-) > create mode 100644 kas/ci-shell.yml > create mode 100755 scripts/ci_shell > > diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md > index 07621232..6970477b 100644 > --- a/CONTRIBUTING.md > +++ b/CONTRIBUTING.md > @@ -81,54 +81,26 @@ Plan merges to `master` so that both fit the two-week window; short extensions s > by launching CI tests scripts. The procedure is described below: > > ``` > - git clone https://github.com/siemens/kas > - cat > kas.yml <<EOF > - header: > - version: 14 > - build_system: isar > - defaults: > - repos: > - patches: > - repo: isar > - repos: > - isar: > - url: "http://github.com:/ilbers/isar" > - branch: next > - layers: > - meta: > - meta-isar: > - EOF > - kas/kas-container shell --command /work/isar/scripts/ci_setup.sh kas.yml > + ./scripts/ci_shell > ``` > > - In kas shell: > + This will spawn a shell where you may just run: > > ``` > - cd /work/isar/testsuite > - avocado run citest.py -t dev --max-parallel-tasks=1 > + trun citest.py -t dev --max-parallel-tasks=1 > ``` > > - Your git-formatpatches may be listed in the `kas.yml` file as illustrated below: > + Note: (`trun` is an alias for `avocado run`). > > - ``` > - ... > - repos: > - isar: > - url: "http://github.com:/ilbers/isar" > - branch: next > - patches: > - 0001: > - path: /work/0001-my-contribution-to-isar.patch > - layers: > - meta: > - meta-isar: > - ``` > - > - Perform the above steps from a clean directory for your CI run to be as close as > - possible to the environment that our project maintainers will be using. That > - directory would contain: *.patch isar/ kas/ kas.yml > + The container has `/work` bind-mounted to your local copy of the Isar code > + base (and therefore with your changes). Make sure to track upstream changes > + and regularly rebase your tree: your patches shall be sent against the latest > + HEAD available when submitting. Keep an eye on changes while your series are > + under review: you may need to send a refreshed version if contributions from > + others were accepted and touch the same areas (make sure to re-run the test > + suite after rebasing). > > - Be also mindful of community-provided resources such as deb.debian.org or > + Be mindful of community-provided resources such as deb.debian.org or > snapshot.debian.org and consider using a caching proxy in your setup to > reduce traffic as much as possible. > > diff --git a/kas/ci-shell.yml b/kas/ci-shell.yml > new file mode 100644 > index 00000000..16ce8b42 > --- /dev/null > +++ b/kas/ci-shell.yml > @@ -0,0 +1,19 @@ > +# This software is a part of Isar. > +# Copyright (C) 2023-2024 ilbers GmbH > + > +header: > + version: 14 > + > +build_system: isar > + > +repos: > + isar: > + layers: > + meta: > + meta-isar: > + meta-test: > + > +bblayers_conf_header: > + standard: | > + BBPATH = "${TOPDIR}" > + BBFILES ?= "" This is a redundant copy of kas/isar.yaml. Just use the latter. > diff --git a/scripts/ci_setup.sh b/scripts/ci_setup.sh > index f373d1c0..03cf3452 100755 > --- a/scripts/ci_setup.sh > +++ b/scripts/ci_setup.sh > @@ -9,24 +9,46 @@ gpg_key=/etc/apt/trusted.gpg.d/debian-isar.gpg > [ -f "${gpg_key}" ] || { > wget -q http://deb.isar-build.org/debian-isar.key -O- \ > | gpg --dearmor \ > - | sudo dd of="${gpg_key}" > + | sudo dd of="${gpg_key}" status=none > } > > list=/etc/apt/sources.list.d/10-isar_build.list > [ -f "${list}" ] || { > echo "deb [signed-by=/etc/apt/trusted.gpg.d/debian-isar.gpg] \ > http://deb.isar-build.org/debian-isar bookworm-isar main" \ > - | sudo tee /etc/apt/sources.list.d/10-isar_build.list > + | sudo tee /etc/apt/sources.list.d/10-isar_build.list >/dev/null > } > > +echo "🔍 Checking dependencies..." > tools="avocado qemu-system-aarch64 qemu-system-arm qemu-system-i386 qemu-system-x86_64" > need_install=0 > for tool in ${tools}; do > which "${tool}" || need_install=1 > done > [ "${need_install}" = "0" ] || { > - sudo apt-get update > - sudo apt-get install -y avocado qemu-system-arm qemu-system-x86 > + echo "⏳ Installing missing dependencies..." > + ( > + sudo apt-get update > + sudo apt-get install -y avocado qemu-system-arm qemu-system-x86 > + ) >/dev/null > } > > -exec /container-entrypoint ${*} > +( > + cat <<' EOF' > + alias tlist="avocado list" > + alias trun="avocado run" > + cd /work/testsuite > + EOF > +) | sudo tee -a /etc/profile.d/ci.sh >/dev/null > + > +cat <<'EOF' > + > +💡 Use "tlist citest.py" to list existing test cases > +💡 Use "trun citest.py:TestClass.test_method" to run a specific test > +💡 Use "trun -p sstate=1 citest.py" to enable sstate > + > +✅ Test environment ready for use! > + > +EOF > + > +exec /container-entrypoint bash -l > diff --git a/scripts/ci_shell b/scripts/ci_shell > new file mode 100755 > index 00000000..bcb7ffeb > --- /dev/null > +++ b/scripts/ci_shell > @@ -0,0 +1,18 @@ > +#!/bin/bash > +# A simple wrapper to run a container to run CI tests > +# > +# Cedric Hombourger <cedric.hombourger@siemens.com> > +# Copyright (c) Siemens AG, 2025 > +# SPDX-License-Identifier: MIT > + > +self=${0} > +topdir=$(readlink -f $(dirname ${self})/..) > + > +export KAS_BUILD_DIR=$(mktemp -d) > +cleanup() { > + rm -rf --one-file-system ${KAS_BUILD_DIR} > +} > +trap "cleanup" EXIT > + > +cd ${topdir} > +kas/kas-container shell --command /work/scripts/ci_setup.sh kas/ci-shell.yml Having an even easier start wrapper for the testsuite is definitely welcome. To make the startup times even shorter, we could furthermore host a prebuilt kas-derived test container image on ghcr.io. Jan
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 07621232..6970477b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -81,54 +81,26 @@ Plan merges to `master` so that both fit the two-week window; short extensions s by launching CI tests scripts. The procedure is described below: ``` - git clone https://github.com/siemens/kas - cat > kas.yml <<EOF - header: - version: 14 - build_system: isar - defaults: - repos: - patches: - repo: isar - repos: - isar: - url: "http://github.com:/ilbers/isar" - branch: next - layers: - meta: - meta-isar: - EOF - kas/kas-container shell --command /work/isar/scripts/ci_setup.sh kas.yml + ./scripts/ci_shell ``` - In kas shell: + This will spawn a shell where you may just run: ``` - cd /work/isar/testsuite - avocado run citest.py -t dev --max-parallel-tasks=1 + trun citest.py -t dev --max-parallel-tasks=1 ``` - Your git-formatpatches may be listed in the `kas.yml` file as illustrated below: + Note: (`trun` is an alias for `avocado run`). - ``` - ... - repos: - isar: - url: "http://github.com:/ilbers/isar" - branch: next - patches: - 0001: - path: /work/0001-my-contribution-to-isar.patch - layers: - meta: - meta-isar: - ``` - - Perform the above steps from a clean directory for your CI run to be as close as - possible to the environment that our project maintainers will be using. That - directory would contain: *.patch isar/ kas/ kas.yml + The container has `/work` bind-mounted to your local copy of the Isar code + base (and therefore with your changes). Make sure to track upstream changes + and regularly rebase your tree: your patches shall be sent against the latest + HEAD available when submitting. Keep an eye on changes while your series are + under review: you may need to send a refreshed version if contributions from + others were accepted and touch the same areas (make sure to re-run the test + suite after rebasing). - Be also mindful of community-provided resources such as deb.debian.org or + Be mindful of community-provided resources such as deb.debian.org or snapshot.debian.org and consider using a caching proxy in your setup to reduce traffic as much as possible. diff --git a/kas/ci-shell.yml b/kas/ci-shell.yml new file mode 100644 index 00000000..16ce8b42 --- /dev/null +++ b/kas/ci-shell.yml @@ -0,0 +1,19 @@ +# This software is a part of Isar. +# Copyright (C) 2023-2024 ilbers GmbH + +header: + version: 14 + +build_system: isar + +repos: + isar: + layers: + meta: + meta-isar: + meta-test: + +bblayers_conf_header: + standard: | + BBPATH = "${TOPDIR}" + BBFILES ?= "" diff --git a/scripts/ci_setup.sh b/scripts/ci_setup.sh index f373d1c0..03cf3452 100755 --- a/scripts/ci_setup.sh +++ b/scripts/ci_setup.sh @@ -9,24 +9,46 @@ gpg_key=/etc/apt/trusted.gpg.d/debian-isar.gpg [ -f "${gpg_key}" ] || { wget -q http://deb.isar-build.org/debian-isar.key -O- \ | gpg --dearmor \ - | sudo dd of="${gpg_key}" + | sudo dd of="${gpg_key}" status=none } list=/etc/apt/sources.list.d/10-isar_build.list [ -f "${list}" ] || { echo "deb [signed-by=/etc/apt/trusted.gpg.d/debian-isar.gpg] \ http://deb.isar-build.org/debian-isar bookworm-isar main" \ - | sudo tee /etc/apt/sources.list.d/10-isar_build.list + | sudo tee /etc/apt/sources.list.d/10-isar_build.list >/dev/null } +echo "🔍 Checking dependencies..." tools="avocado qemu-system-aarch64 qemu-system-arm qemu-system-i386 qemu-system-x86_64" need_install=0 for tool in ${tools}; do which "${tool}" || need_install=1 done [ "${need_install}" = "0" ] || { - sudo apt-get update - sudo apt-get install -y avocado qemu-system-arm qemu-system-x86 + echo "⏳ Installing missing dependencies..." + ( + sudo apt-get update + sudo apt-get install -y avocado qemu-system-arm qemu-system-x86 + ) >/dev/null } -exec /container-entrypoint ${*} +( + cat <<' EOF' + alias tlist="avocado list" + alias trun="avocado run" + cd /work/testsuite + EOF +) | sudo tee -a /etc/profile.d/ci.sh >/dev/null + +cat <<'EOF' + +💡 Use "tlist citest.py" to list existing test cases +💡 Use "trun citest.py:TestClass.test_method" to run a specific test +💡 Use "trun -p sstate=1 citest.py" to enable sstate + +✅ Test environment ready for use! + +EOF + +exec /container-entrypoint bash -l diff --git a/scripts/ci_shell b/scripts/ci_shell new file mode 100755 index 00000000..bcb7ffeb --- /dev/null +++ b/scripts/ci_shell @@ -0,0 +1,18 @@ +#!/bin/bash +# A simple wrapper to run a container to run CI tests +# +# Cedric Hombourger <cedric.hombourger@siemens.com> +# Copyright (c) Siemens AG, 2025 +# SPDX-License-Identifier: MIT + +self=${0} +topdir=$(readlink -f $(dirname ${self})/..) + +export KAS_BUILD_DIR=$(mktemp -d) +cleanup() { + rm -rf --one-file-system ${KAS_BUILD_DIR} +} +trap "cleanup" EXIT + +cd ${topdir} +kas/kas-container shell --command /work/scripts/ci_setup.sh kas/ci-shell.yml
Ease use of the container environment that may be used to run tests from this project by adding a `scripts/ci_shell` script to invoke `kas-container` for you. The script uses a simple kas fragment (`kas/ci-shell.yml`) to use your existing copy of the Isar code checkout: this makes it easier to test your work-in-progress changes. Lastly, `ci_setup.sh` will produce less output (e.g. when installing dependencies) and will print a few hints to remind users with useful commands. Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com> --- CONTRIBUTING.md | 52 +++++++++++---------------------------------- kas/ci-shell.yml | 19 +++++++++++++++++ scripts/ci_setup.sh | 32 +++++++++++++++++++++++----- scripts/ci_shell | 18 ++++++++++++++++ 4 files changed, 76 insertions(+), 45 deletions(-) create mode 100644 kas/ci-shell.yml create mode 100755 scripts/ci_shell