complement feature vector; upload artifacts

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk
2025-05-11 10:33:56 +00:00
parent aa45bfe8d5
commit 9a1fdf390e
8 changed files with 81 additions and 105 deletions

View File

@@ -54,6 +54,7 @@ on:
jobs: jobs:
bake: bake:
if: ${{fromJSON(inputs.machines)[0] != null}}
name: ${{matrix.bake_target}} ${{matrix.cargo_profile}} ${{matrix.rust_toolchain}} ${{matrix.feat_set}} ${{matrix.sys_name}} ${{matrix.sys_version}} ${{matrix.sys_target}} name: ${{matrix.bake_target}} ${{matrix.cargo_profile}} ${{matrix.rust_toolchain}} ${{matrix.feat_set}} ${{matrix.sys_name}} ${{matrix.sys_version}} ${{matrix.sys_target}}
runs-on: ${{matrix.machine}} runs-on: ${{matrix.machine}}
strategy: strategy:
@@ -76,7 +77,7 @@ jobs:
with: with:
persist-credentials: false persist-credentials: false
- name: Bake - name: Bake ${{matrix.bake_target}}
env: env:
bake_target: ${{matrix.bake_target}} bake_target: ${{matrix.bake_target}}
cargo_profile: ${{matrix.cargo_profile}} cargo_profile: ${{matrix.cargo_profile}}
@@ -94,4 +95,4 @@ jobs:
CI_PRINT_BAKE: ${{inputs.print_bake}} CI_PRINT_BAKE: ${{inputs.print_bake}}
run: | run: |
docker/bake.sh ${{matrix.bake_target}} docker/bake.sh "${{matrix.bake_target}}"

View File

@@ -51,10 +51,6 @@ on:
type: boolean type: boolean
default: true default: true
description: Pre-build cargo dependency targets description: Pre-build cargo dependency targets
show_docs:
type: boolean
default: true
description: Pre-build cargo rustdoc targets
jobs: jobs:
systems: systems:
@@ -145,21 +141,3 @@ jobs:
machines: ${{inputs.machines}} machines: ${{inputs.machines}}
excludes: ${{inputs.excludes}} excludes: ${{inputs.excludes}}
includes: ${{inputs.includes}} includes: ${{inputs.includes}}
docs:
if: ${{ !failure() && !cancelled() && inputs.show_docs }}
name: Docs
needs: [deps]
uses: ./.github/workflows/bake.yml
with:
bake_targets: '["docs"]'
cargo_profiles: ${{inputs.cargo_profiles}}
feat_sets: ${{inputs.feat_sets}}
rust_toolchains: ${{inputs.rust_toolchains}}
sys_names: ${{inputs.sys_names}}
sys_versions: ${{inputs.sys_versions}}
rust_targets: ${{inputs.rust_targets}}
sys_targets: ${{inputs.sys_targets}}
machines: ${{inputs.machines}}
excludes: ${{inputs.excludes}}
includes: ${{inputs.includes}}

View File

@@ -18,7 +18,7 @@ env:
jobs: jobs:
deps: deps:
if: ${{ vars.CI_VERBOSE_DEPS || false }} if: ${{fromJSON(vars.CI_VERBOSE_DEPS || 'true')}}
name: Deps name: Deps
uses: ./.github/workflows/deps.yml uses: ./.github/workflows/deps.yml
with: with:
@@ -27,7 +27,7 @@ jobs:
rust_toolchains: ${{vars.RUST_TOOLCHAINS}} rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
rust_targets: ${{vars.RUST_TARGETS}} rust_targets: ${{vars.RUST_TARGETS}}
sys_names: ${{vars.SYS_NAMES}} sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.sys_TARGETS}} sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}} sys_versions: ${{vars.SYS_VERSIONS}}
machines: ${{vars.MACHINES}} machines: ${{vars.MACHINES}}
@@ -42,7 +42,7 @@ jobs:
rust_toolchains: ${{vars.RUST_TOOLCHAINS}} rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
rust_targets: ${{vars.RUST_TARGETS}} rust_targets: ${{vars.RUST_TARGETS}}
sys_names: ${{vars.SYS_NAMES}} sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.sys_TARGETS}} sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}} sys_versions: ${{vars.SYS_VERSIONS}}
machines: ${{vars.MACHINES}} machines: ${{vars.MACHINES}}
excludes: '[{"cargo_profile": "release-debuginfo", "rust_toolchain": "nightly"}]' excludes: '[{"cargo_profile": "release-debuginfo", "rust_toolchain": "nightly"}]'
@@ -58,7 +58,7 @@ jobs:
rust_toolchains: ${{vars.RUST_TOOLCHAINS}} rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
rust_targets: ${{vars.RUST_TARGETS}} rust_targets: ${{vars.RUST_TARGETS}}
sys_names: ${{vars.SYS_NAMES}} sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.sys_TARGETS}} sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}} sys_versions: ${{vars.SYS_VERSIONS}}
machines: ${{vars.MACHINES}} machines: ${{vars.MACHINES}}
complement: ${{fromJSON(vars.COMPLEMENT || 'true')}} complement: ${{fromJSON(vars.COMPLEMENT || 'true')}}
@@ -75,7 +75,7 @@ jobs:
sys_names: ${{vars.SYS_NAMES}} sys_names: ${{vars.SYS_NAMES}}
sys_versions: ${{vars.SYS_VERSIONS}} sys_versions: ${{vars.SYS_VERSIONS}}
rust_targets: ${{vars.RUST_TARGETS}} rust_targets: ${{vars.RUST_TARGETS}}
sys_targets: ${{vars.sys_TARGETS}} sys_targets: ${{vars.SYS_TARGETS}}
machines: ${{vars.MACHINES}} machines: ${{vars.MACHINES}}
excludes: '[{"cargo_profile": "test"}, {"feat_set": "none"}]' excludes: '[{"cargo_profile": "test"}, {"feat_set": "none"}]'
@@ -91,10 +91,10 @@ jobs:
sys_names: ${{vars.SYS_NAMES}} sys_names: ${{vars.SYS_NAMES}}
sys_versions: ${{vars.SYS_VERSIONS}} sys_versions: ${{vars.SYS_VERSIONS}}
rust_targets: ${{vars.RUST_TARGETS}} rust_targets: ${{vars.RUST_TARGETS}}
sys_targets: ${{vars.sys_TARGETS}} sys_targets: ${{vars.SYS_TARGETS}}
machines: ${{vars.MACHINES}} machines: ${{vars.MACHINES}}
excludes: '[{"cargo_profile": "test"}, {"feat_set": "none"}]' excludes: '[{"cargo_profile": "test"}, {"feat_set": "none"}]'
docker_id: ${{vars.DOCKER_ID}} docker_repo: ${{vars.DOCKER_REPO}}
secrets: secrets:
ghcr_token: ${{ secrets.GHCR_TOKEN }} ghcr_token: ${{ secrets.GHCR_TOKEN }}

View File

@@ -36,16 +36,16 @@ on:
type: string type: string
default: '[]' default: '[]'
description: Matrix inclusions description: Matrix inclusions
docker_id: docker_repo:
type: string type: string
description: DockerHub ID description: DockerHub Repository
secrets: secrets:
ghcr_token: ghcr_token:
dockerhub_token: dockerhub_token:
jobs: jobs:
containers: containers:
if: ${{ !failure() && !cancelled() && inputs.docker_id }} if: ${{ !failure() && !cancelled() && inputs.docker_repo }}
name: Publish containers name: Publish containers
runs-on: ${{matrix.machine}} runs-on: ${{matrix.machine}}
permissions: write-all permissions: write-all
@@ -77,7 +77,7 @@ jobs:
uses: docker/login-action@v3 uses: docker/login-action@v3
with: with:
registry: docker.io registry: docker.io
username: ${{ inputs.docker_id }} username: ${{ github.actor }}
password: ${{ secrets.dockerhub_token }} password: ${{ secrets.dockerhub_token }}
- name: Bake - name: Bake
@@ -93,10 +93,10 @@ jobs:
machine: ${{matrix.machine}} machine: ${{matrix.machine}}
acct: ${{github.actor}} acct: ${{github.actor}}
repo: ${{github.repository}} repo: ${{github.repository}}
docker_repo: ${{inputs.docker_id}} docker_repo: ${{inputs.docker_repo}}
run: | run: |
docker/bake.sh ${{matrix.bake_target}} docker/bake.sh "${{matrix.bake_target}}"
packages: packages:
if: ${{ !failure() && !cancelled() && contains(fromJSON(inputs.feat_sets), fromJSON('["all"]')[0]) }} if: ${{ !failure() && !cancelled() && contains(fromJSON(inputs.feat_sets), fromJSON('["all"]')[0]) }}

View File

@@ -38,6 +38,9 @@ on:
complement: complement:
type: boolean type: boolean
default: true default: true
complement_feat_sets:
type: string
default: '["all"]'
jobs: jobs:
unit: unit:
@@ -73,44 +76,27 @@ jobs:
excludes: '[{"cargo_profile": "release", "rust_toolchain": "nightly"}, {"cargo_profile": "release-debuginfo", "rust_toolchain": "nightly"}, {"cargo_profile": "test", "feat_set": "default"}]' excludes: '[{"cargo_profile": "release", "rust_toolchain": "nightly"}, {"cargo_profile": "release-debuginfo", "rust_toolchain": "nightly"}, {"cargo_profile": "test", "feat_set": "default"}]'
includes: ${{inputs.includes}} includes: ${{inputs.includes}}
complement_tester:
if: ${{inputs.complement && contains(fromJSON(inputs.cargo_profiles), fromJSON('["test"]')[0]) && contains(fromJSON(inputs.feat_sets), fromJSON('["all"]')[0]) && contains(fromJSON(inputs.rust_toolchains), fromJSON('["nightly"]')[0])}}
name: Complement Tester
uses: ./.github/workflows/bake.yml
with:
bake_targets: '["complement-tester"]'
cargo_profiles: '["test"]'
feat_sets: '["all"]'
rust_toolchains: '["nightly"]'
sys_names: ${{inputs.sys_names}}
sys_versions: ${{inputs.sys_versions}}
rust_targets: ${{inputs.rust_targets}}
sys_targets: ${{inputs.sys_targets}}
machines: ${{inputs.machines}}
excludes: ${{inputs.excludes}}
includes: ${{inputs.includes}}
complement_testee:
if: ${{inputs.complement && contains(fromJSON(inputs.cargo_profiles), fromJSON('["test"]')[0]) && contains(fromJSON(inputs.feat_sets), fromJSON('["all"]')[0]) && contains(fromJSON(inputs.rust_toolchains), fromJSON('["nightly"]')[0])}}
name: Complement Testee
uses: ./.github/workflows/bake.yml
with:
bake_targets: '["complement-testee"]'
cargo_profiles: '["test"]'
feat_sets: '["all"]'
rust_toolchains: '["nightly"]'
sys_names: ${{inputs.sys_names}}
sys_versions: ${{inputs.sys_versions}}
rust_targets: ${{inputs.rust_targets}}
sys_targets: ${{inputs.sys_targets}}
machines: ${{inputs.machines}}
excludes: ${{inputs.excludes}}
includes: ${{inputs.includes}}
complement: complement:
if: ${{inputs.complement && contains(fromJSON(inputs.cargo_profiles), fromJSON('["test"]')[0]) && contains(fromJSON(inputs.feat_sets), fromJSON('["all"]')[0]) && contains(fromJSON(inputs.rust_toolchains), fromJSON('["nightly"]')[0])}}
name: Complement
uses: ./.github/workflows/bake.yml
with:
bake_targets: '["complement-tester", "complement-testee"]'
cargo_profiles: '["test"]'
feat_sets: ${{inputs.complement_feat_sets}}
rust_toolchains: '["nightly"]'
sys_names: ${{inputs.sys_names}}
sys_versions: ${{inputs.sys_versions}}
rust_targets: ${{inputs.rust_targets}}
sys_targets: ${{inputs.sys_targets}}
machines: ${{inputs.machines}}
excludes: ${{inputs.excludes}}
includes: ${{inputs.includes}}
compliance:
if: ${{inputs.complement && contains(fromJSON(inputs.cargo_profiles), fromJSON('["test"]')[0]) && contains(fromJSON(inputs.feat_sets), fromJSON('["all"]')[0]) && contains(fromJSON(inputs.rust_toolchains), fromJSON('["nightly"]')[0])}} if: ${{inputs.complement && contains(fromJSON(inputs.cargo_profiles), fromJSON('["test"]')[0]) && contains(fromJSON(inputs.feat_sets), fromJSON('["all"]')[0]) && contains(fromJSON(inputs.rust_toolchains), fromJSON('["nightly"]')[0])}}
name: Matrix Compliance name: Matrix Compliance
needs: [complement_tester, complement_testee] needs: [complement]
runs-on: ${{matrix.machine}} runs-on: ${{matrix.machine}}
concurrency: concurrency:
group: complement-cant-walk-and-chew-bubblegum group: complement-cant-walk-and-chew-bubblegum
@@ -120,8 +106,8 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
cargo_profile: ${{fromJSON('["test"]')}} cargo_profile: ${{fromJSON('["test"]')}}
feat_set: ${{fromJSON(inputs.complement_feat_sets)}}
rust_toolchain: ${{fromJSON('["nightly"]')}} rust_toolchain: ${{fromJSON('["nightly"]')}}
feat_set: ${{fromJSON('["all"]')}}
sys_name: ${{fromJSON(inputs.sys_names)}} sys_name: ${{fromJSON(inputs.sys_names)}}
sys_version: ${{fromJSON(inputs.sys_versions)}} sys_version: ${{fromJSON(inputs.sys_versions)}}
rust_target: ${{fromJSON(inputs.rust_targets)}} rust_target: ${{fromJSON(inputs.rust_targets)}}
@@ -147,7 +133,7 @@ jobs:
run: | run: |
docker/complement.sh docker/complement.sh
- name: Results - name: Extract
id: extract id: extract
env: env:
name: complement_tester__${{matrix.cargo_profile}}__${{matrix.rust_toolchain}}__${{matrix.rust_target}}__${{matrix.feat_set}}__${{matrix.sys_name}}__${{matrix.sys_version}}__${{matrix.sys_target}} name: complement_tester__${{matrix.cargo_profile}}__${{matrix.rust_toolchain}}__${{matrix.rust_target}}__${{matrix.feat_set}}__${{matrix.sys_name}}__${{matrix.sys_version}}__${{matrix.sys_target}}
@@ -156,11 +142,15 @@ jobs:
run: | run: |
cid=$(cat "$name") cid=$(cat "$name")
docker cp "$cid:/usr/src/complement/new_results.jsonl" tests/test_results/complement/test_results.jsonl docker cp "$cid:/usr/src/complement/new_results.jsonl" tests/test_results/complement/test_results.jsonl
git diff --exit-code --color --color-moved
- name: Artifacts - name: Upload
id: upload id: upload
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4
with: with:
name: test_results.${{matrix.feat_set}}.${{matrix.sys_name}}.${{matrix.sys_target}}.jsonl name: test_results.${{matrix.feat_set}}.${{matrix.sys_name}}.${{matrix.sys_target}}.jsonl
path: ./tests/test_results/complement/test_results.jsonl path: ./tests/test_results/complement/test_results.jsonl
- name: Accept
id: accept
run: |
git diff --exit-code --color --color-moved

View File

@@ -22,9 +22,12 @@ COPY <<EOF v3.ext
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names subjectAltName = @alt_names
[alt_names] [alt_names]
DNS.0 = *.docker.internal
DNS.1 = hs1 DNS.1 = hs1
DNS.2 = hs2 DNS.2 = hs2
DNS.3 = hs3 DNS.3 = hs3
DNS.4 = hs4
IP.1 = 127.0.0.1
EOF EOF
RUN <<EOF RUN <<EOF
set -eux set -eux
@@ -38,7 +41,7 @@ RUN <<EOF
-sha256 \ -sha256 \
-key private_key.pem \ -key private_key.pem \
-subj "/C=US/ST=CA/O=MyOrg, Inc./CN=hs1" \ -subj "/C=US/ST=CA/O=MyOrg, Inc./CN=hs1" \
-addext "subjectAltName = DNS:hs1, DNS:hs2, DNS:hs3" \ -addext "subjectAltName = DNS:*.docker.internal DNS:hs1, DNS:hs2, DNS:hs3, DNS:hs4, IP:127.0.0.1" \
-out signing_request.csr -out signing_request.csr
openssl x509 \ openssl x509 \
@@ -167,6 +170,7 @@ EOF
FROM input AS complement-tester FROM input AS complement-tester
ARG complement_verbose=0
ARG complement_debug=0 ARG complement_debug=0
ARG complement_count=1 ARG complement_count=1
ARG complement_parallel=16 ARG complement_parallel=16
@@ -188,11 +192,12 @@ ENV complement_tests="$complement_tests"
ENV complement_skip="$complement_skip" ENV complement_skip="$complement_skip"
ENV complement_run="$complement_run" ENV complement_run="$complement_run"
ENV complement_tests="$complement_tests" ENV complement_tests="$complement_tests"
ENV COMPLEMENT_ALWAYS_PRINT_SERVER_LOGS="$complement_verbose"
ENV COMPLEMENT_HOSTNAME_RUNNING_COMPLEMENT="host.docker.internal" ENV COMPLEMENT_HOSTNAME_RUNNING_COMPLEMENT="host.docker.internal"
ENV COMPLEMENT_HOST_MOUNTS="/var/run/docker.sock:/var/run/docker.sock" ENV COMPLEMENT_HOST_MOUNTS="/var/run/docker.sock:/var/run/docker.sock"
ENV jq_res='{Action: .Action, Test: .Test}' ENV jq_res='{Action: .Action, Test: .Test}'
ENV jq_sel='select((.Action == \"pass\" or .Action == \"fail\" or .Action == \"skip\") and .Test != null)' ENV jq_sel='select((.Action == \"pass\" or .Action == \"fail\" or .Action == \"skip\") and .Test != null)'
ENV jq_tab='([\"RESULT\",\"TEST\"] | (., map(length*\"-\"))), (.[] | [.Action, .Test]) | @tsv' ENV jq_tab='[.Action, .Test] | @tsv'
WORKDIR /usr/src/complement WORKDIR /usr/src/complement
COPY --from=complement-config /complement/old_results.jsonl . COPY --from=complement-config /complement/old_results.jsonl .
COPY <<EOF uwu.sh COPY <<EOF uwu.sh
@@ -210,15 +215,13 @@ COPY <<EOF uwu.sh
-skip="${complement_skip}" -skip="${complement_skip}"
-run="${complement_run}" -run="${complement_run}"
"${complement_tests}" "${complement_tests}"
| jq -c "${jq_sel} | ${jq_res}" | jq --unbuffered -c "${jq_sel} | ${jq_res}"
| tee results.jsonl | tee results.jsonl
| jq -s -r "${jq_tab}" | jq --unbuffered -r "${jq_tab}"
; ;
jq -s -c "sort_by(.Test)[]" < results.jsonl | uniq > new_results.jsonl; jq -s -c "sort_by(.Test)[]" < results.jsonl | uniq > new_results.jsonl;
wc -l old_results.jsonl new_results.jsonl; wc -l old_results.jsonl new_results.jsonl;
diff -w -y -t --width=275 --suppress-common-lines old_results.jsonl new_results.jsonl; diff -w -y -t --width=275 --suppress-common-lines old_results.jsonl new_results.jsonl;
EOF EOF
RUN echo $(tr -d '\n' < uwu.sh) > uwu.sh RUN echo $(tr -d '\n' < uwu.sh) > uwu.sh

View File

@@ -1,22 +1,27 @@
variable "acct" { variable "GITHUB_ACTOR" {}
default = "$GITHUB_ACTOR" variable "GITHUB_REPOSITORY" {}
} variable "GITHUB_REF" {}
variable "GITHUB_REF_SHA" {}
variable "GITHUB_REF_NAME" {}
variable "acct" {
default = "${GITHUB_ACTOR}"
}
variable "repo" { variable "repo" {
default = "$GITHUB_REPOSITORY" default = "${GITHUB_REPOSITORY}"
} }
variable "docker_repo" { variable "docker_repo" {
default = "$DOCKER_ID" default = "${repo}"
} }
variable "git_ref" { variable "git_ref" {
default = "$GITHUB_REF" default = "${GITHUB_REF}"
} }
variable "git_ref_sha" { variable "git_ref_sha" {
default = "$GITHUB_REF_SHA" default = "${GITHUB_REF_SHA}"
} }
variable "git_ref_name" { variable "git_ref_name" {
default = "$GITHUB_REF_NAME" default = "${GITHUB_REF_NAME}"
} }
cargo_feat_sets = { cargo_feat_sets = {
@@ -33,7 +38,7 @@ variable "feat_sets" {
default = "[\"none\", \"default\", \"all\"]" default = "[\"none\", \"default\", \"all\"]"
} }
variable "cargo_profiles" { variable "cargo_profiles" {
default = "[\"test\", \"bench\"]" default = "[\"test\", \"release\"]"
} }
variable "cargo_install_root" { variable "cargo_install_root" {
default = "/usr" default = "/usr"
@@ -554,7 +559,7 @@ target "install" {
contexts = { contexts = {
input = elem("target:diner", [feat_set, sys_name, sys_version, sys_target]) input = elem("target:diner", [feat_set, sys_name, sys_version, sys_target])
output = elem("target:installer", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) output = elem("target:installer", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target])
docs = elem("target:docs", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target]) #docs = elem("target:docs", [cargo_profile, rust_toolchain, rust_target, feat_set, sys_name, sys_version, sys_target])
} }
} }

View File

@@ -20,7 +20,7 @@ cargo_profile="${cargo_profile:-$default_cargo_profile}"
feat_set="${feat_set:-$default_feat_set}" feat_set="${feat_set:-$default_feat_set}"
rust_target="${rust_target:-$default_rust_target}" rust_target="${rust_target:-$default_rust_target}"
rust_toolchain="${rust_toolchain:-$default_rust_toolchain}" rust_toolchain="${rust_toolchain:-$default_rust_toolchain}"
sys_name="${sys_names:-$default_sys_name}" sys_name="${sys_name:-$default_sys_name}"
sys_target="${sys_target:-$default_sys_target}" sys_target="${sys_target:-$default_sys_target}"
sys_version="${sys_version:-$default_sys_version}" sys_version="${sys_version:-$default_sys_version}"
@@ -30,37 +30,36 @@ set +a
############################################################################### ###############################################################################
set -x
tester_image="complement-tester--${feat_set}--${sys_name}--${sys_version}--${sys_target}" tester_image="complement-tester--${feat_set}--${sys_name}--${sys_version}--${sys_target}"
testee_image="complement-testee--${cargo_profile}--${rust_toolchain}--${rust_target}--${feat_set}--${sys_name}--${sys_version}--${sys_target}" testee_image="complement-testee--${cargo_profile}--${rust_toolchain}--${rust_target}--${feat_set}--${sys_name}--${sys_version}--${sys_target}"
name="complement_tester__${cargo_profile}__${rust_toolchain}__${rust_target}__${feat_set}__${sys_name}__${sys_version}__${sys_target}" name="complement_tester__${cargo_profile}__${rust_toolchain}__${rust_target}__${feat_set}__${sys_name}__${sys_version}__${sys_target}"
sock="/var/run/docker.sock" sock="/var/run/docker.sock"
arg="--name $name -v $sock:$sock --network=host $tester_image ${testee_image}" arg="--name $name -v $sock:$sock --network=host $tester_image ${testee_image}"
set +x
if test "$CI_VERBOSE_ENV" = "true"; then if test "$CI_VERBOSE_ENV" = "true"; then
date date
env env
fi fi
if test "$CI" = "true"; then
arg="-d $arg"
else
arg="--rm $arg"
fi
docker rm -f "$name" 2>/dev/null docker rm -f "$name" 2>/dev/null
trap 'set +x; date; echo -e "\033[1;41;37mFAIL\033[0m"' ERR trap 'set +x; date; echo -e "\033[1;41;37mFAIL\033[0m"' ERR
set -x -e
cid=$(docker run $arg)
set +x
if test "$CI" = "true"; then if test "$CI" = "true"; then
echo -n "$cid" > "$name" arg="-d $arg"
cid=$(docker run $arg)
else
arg="--rm -a stdout -a stderr $arg"
docker run $arg
exit $?
fi fi
trap 'docker container stop $cid; set +x; date; echo -e "\033[1;41;37mFAIL\033[0m"' INT echo -n "$cid" > "$name"
trap 'docker container stop $cid; set +x; date; echo -e "\033[1;41;37mFAIL\033[0m"' INT
docker logs -f "$cid" docker logs -f "$cid"
docker wait "$cid" 2>/dev/null docker wait "$cid" 2>/dev/null
echo -e "\033[1;42;30mPASS\033[0m" echo -e "\033[1;42;30mPASS\033[0m"