-
Notifications
You must be signed in to change notification settings - Fork 125
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add docker compose based test environment for Linux #687
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
Docker based testing | ||
-------------------- | ||
|
||
This directory contains helper files used for running west's tests in Docker on | ||
various Linux runtimes. It was originally developed for release testing. | ||
|
||
Run "./run-tests.sh" in this directory to run the tests. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
FROM archlinux:latest | ||
CMD ["/west/docker-testing/in-container-test.sh"] | ||
|
||
RUN pacman -Syu --noconfirm \ | ||
git \ | ||
python-pip \ | ||
&& pacman -Scc --noconfirm | ||
|
||
RUN pip3 install --break-system-packages tox |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
# It would be nicer to consolidate the common user/volumes | ||
# boilerplate, but there wasn't enough time to figure out if it was | ||
# possible at time of writing. Improvements welcome. | ||
|
||
services: | ||
west-arch: | ||
build: arch | ||
environment: | ||
WEST_TOX_OUT: /west/docker-testing/outdir/arch | ||
WEST_TOX_OUT_IN_HOST: ${WEST_IN_HOST}/docker-testing/outdir/arch | ||
|
||
user: ${MY_UID}:${MY_GID} | ||
volumes: | ||
- /etc/passwd:/etc/passwd:ro | ||
- /etc/group:/etc/group:ro | ||
- ..:/west | ||
|
||
west-debian-12: | ||
build: debian-12 | ||
environment: | ||
WEST_TOX_OUT: /west/docker-testing/outdir/debian-12 | ||
WEST_TOX_OUT_IN_HOST: ${WEST_IN_HOST}/docker-testing/outdir/debian-12 | ||
|
||
user: ${MY_UID}:${MY_GID} | ||
volumes: | ||
- /etc/passwd:/etc/passwd:ro | ||
- /etc/group:/etc/group:ro | ||
- ..:/west | ||
|
||
west-debian-testing: | ||
build: debian-testing | ||
environment: | ||
WEST_TOX_OUT: /west/docker-testing/outdir/debian-testing | ||
WEST_TOX_OUT_IN_HOST: ${WEST_IN_HOST}/docker-testing/outdir/debian-testing | ||
|
||
user: ${MY_UID}:${MY_GID} | ||
volumes: | ||
- /etc/passwd:/etc/passwd:ro | ||
- /etc/group:/etc/group:ro | ||
- ..:/west | ||
|
||
west-fedora-38: | ||
build: fedora-38 | ||
environment: | ||
WEST_TOX_OUT: /west/docker-testing/outdir/fedora-38 | ||
WEST_TOX_OUT_IN_HOST: ${WEST_IN_HOST}/docker-testing/outdir/fedora-38 | ||
|
||
user: ${MY_UID}:${MY_GID} | ||
volumes: | ||
- /etc/passwd:/etc/passwd:ro | ||
- /etc/group:/etc/group:ro | ||
- ..:/west | ||
|
||
west-ubuntu-22.04: | ||
build: ubuntu-22.04 | ||
environment: | ||
WEST_TOX_OUT: /west/docker-testing/outdir/ubuntu-22.04 | ||
WEST_TOX_OUT_IN_HOST: ${WEST_IN_HOST}/docker-testing/outdir/ubuntu-22.04 | ||
|
||
user: ${MY_UID}:${MY_GID} | ||
volumes: | ||
- /etc/passwd:/etc/passwd:ro | ||
- /etc/group:/etc/group:ro | ||
- ..:/west | ||
|
||
west-ubuntu-23.04: | ||
build: ubuntu-23.04 | ||
environment: | ||
WEST_TOX_OUT: /west/docker-testing/outdir/ubuntu-23.04 | ||
WEST_TOX_OUT_IN_HOST: ${WEST_IN_HOST}/docker-testing/outdir/ubuntu-23.04 | ||
|
||
user: ${MY_UID}:${MY_GID} | ||
volumes: | ||
- /etc/passwd:/etc/passwd:ro | ||
- /etc/group:/etc/group:ro | ||
- ..:/west |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
FROM debian:bookworm | ||
CMD ["/west/docker-testing/in-container-test.sh"] | ||
|
||
RUN apt-get update \ | ||
&& apt-get install -y \ | ||
git \ | ||
python3-pip \ | ||
&& rm -rf /var/lib/apt/lists/* | ||
|
||
RUN pip3 install --break-system-packages tox |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
FROM debian:testing | ||
CMD ["/west/docker-testing/in-container-test.sh"] | ||
|
||
RUN apt-get update \ | ||
&& apt-get install -y \ | ||
git \ | ||
python3-pip \ | ||
&& rm -rf /var/lib/apt/lists/* | ||
|
||
RUN pip3 install --break-system-packages tox |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
FROM fedora:38 | ||
CMD ["/west/docker-testing/in-container-test.sh"] | ||
|
||
RUN dnf install -y \ | ||
git \ | ||
python3-pip \ | ||
&& dnf clean dbcache | ||
|
||
RUN pip3 install tox |
Original file line number | Diff line number | Diff line change | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,38 @@ | ||||||||||
#!/bin/bash | ||||||||||
|
||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
It does not catch everything but it catches a lot. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Its omission is intentional in this file -- see error handling being done manually below. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
The only problem with |
||||||||||
# This is the test script that runs in the containers themselves. | ||||||||||
|
||||||||||
WEST=/west | ||||||||||
|
||||||||||
die() { | ||||||||||
if [ ! -z "$@" ]; then | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. "$@" expands to multiple strings. That's not what you want here
Suggested change
Or even just:
Suggested change
Or Then for consistency:
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. BTW you don't HAVE to |
||||||||||
echo "error: $@" >&2 | ||||||||||
else | ||||||||||
echo "error: unknown error in $0" | ||||||||||
fi | ||||||||||
exit 1 | ||||||||||
} | ||||||||||
|
||||||||||
main() | ||||||||||
{ | ||||||||||
# Verify the container environment set up meets this script's requirements. | ||||||||||
[ ! -z "$WEST_TOX_OUT" ] || die "missing $WEST_TOX_OUT" | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
The fewer negations the better and copy/paste of |
||||||||||
[ ! -z "$WEST_TOX_OUT_IN_HOST" ] || die "missing $WEST_TOX_OUT_IN_HOST" | ||||||||||
[ -d "$WEST" ] || die "missing $WEST in the container" | ||||||||||
|
||||||||||
TOX_LOG="$WEST_TOX_OUT/tox.log" | ||||||||||
TOX_LOG_IN_HOST="$WEST_TOX_OUT_IN_HOST/tox.log" | ||||||||||
WEST_TESTDIR="/tmp/west" | ||||||||||
|
||||||||||
mkdir "$WEST_TOX_OUT" || die "failed to make $WEST_TOX_OUT in container ($WEST_TOX_OUT_IN_HOST in host)" | ||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nit
Suggested change
(No need for a backslash in this case) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. How likely is this |
||||||||||
|
||||||||||
git clone -q "$WEST" "$WEST_TESTDIR" || die "failed to clone west to $WEST_TESTDIR in container" | ||||||||||
cd "$WEST_TESTDIR" | ||||||||||
|
||||||||||
echo "running tox, output in $TOX_LOG_IN_HOST in host" | ||||||||||
tox run >"$TOX_LOG" 2>&1 || die "tox failed" | ||||||||||
|
||||||||||
cp -R htmlcov "$WEST_TOX_OUT" || die "failed to copy coverage to $WEST_TOX_OUT_IN_HOST/htmlcov in host" | ||||||||||
} | ||||||||||
|
||||||||||
main "$@" |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
#!/bin/bash | ||
|
||
# This is the top-level test script that runs in the host. | ||
|
||
HERE=$(dirname "$0") | ||
|
||
[ -d "$HERE/outdir" ] && rm -r "$HERE/outdir" | ||
|
||
set -e | ||
mkdir "$HERE/outdir" | ||
export MY_UID=$(id -u) | ||
export MY_GID=$(id -g) | ||
export WEST_IN_HOST=$(realpath "$HERE/..") | ||
docker-compose up --force-recreate --build |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
FROM ubuntu:22.04 | ||
CMD ["/west/docker-testing/in-container-test.sh"] | ||
|
||
RUN apt-get update \ | ||
&& apt-get install -y \ | ||
git \ | ||
python3-pip \ | ||
&& rm -rf /var/lib/apt/lists/* | ||
|
||
RUN pip3 install tox |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
FROM ubuntu:23.04 | ||
CMD ["/west/docker-testing/in-container-test.sh"] | ||
|
||
RUN apt-get update \ | ||
&& apt-get install -y \ | ||
git \ | ||
python3-pip \ | ||
&& rm -rf /var/lib/apt/lists/* | ||
|
||
RUN pip3 install --break-system-packages tox |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Forgot this: this script is more than big enough to deserve a
main()
function.Very small change, all the benefits listed in: