From 9a1fdf390ee4412b8fd546e5513f4632b41edc0e Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Sun, 11 May 2025 10:33:56 +0000 Subject: [PATCH] complement feature vector; upload artifacts Signed-off-by: Jason Volk --- .github/workflows/bake.yml | 5 +-- .github/workflows/deps.yml | 22 ------------ .github/workflows/main.yml | 14 ++++---- .github/workflows/publish.yml | 12 +++---- .github/workflows/test.yml | 68 +++++++++++++++-------------------- docker/Dockerfile.complement | 15 ++++---- docker/bake.hcl | 25 +++++++------ docker/complement.sh | 25 +++++++------ 8 files changed, 81 insertions(+), 105 deletions(-) diff --git a/.github/workflows/bake.yml b/.github/workflows/bake.yml index 2ec1464f..d63c00b9 100644 --- a/.github/workflows/bake.yml +++ b/.github/workflows/bake.yml @@ -54,6 +54,7 @@ on: jobs: 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}} runs-on: ${{matrix.machine}} strategy: @@ -76,7 +77,7 @@ jobs: with: persist-credentials: false - - name: Bake + - name: Bake ${{matrix.bake_target}} env: bake_target: ${{matrix.bake_target}} cargo_profile: ${{matrix.cargo_profile}} @@ -94,4 +95,4 @@ jobs: CI_PRINT_BAKE: ${{inputs.print_bake}} run: | - docker/bake.sh ${{matrix.bake_target}} + docker/bake.sh "${{matrix.bake_target}}" diff --git a/.github/workflows/deps.yml b/.github/workflows/deps.yml index 7c3a6769..6c0f061a 100644 --- a/.github/workflows/deps.yml +++ b/.github/workflows/deps.yml @@ -51,10 +51,6 @@ on: type: boolean default: true description: Pre-build cargo dependency targets - show_docs: - type: boolean - default: true - description: Pre-build cargo rustdoc targets jobs: systems: @@ -145,21 +141,3 @@ jobs: machines: ${{inputs.machines}} excludes: ${{inputs.excludes}} 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}} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4b343032..9e11f8ae 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,7 +18,7 @@ env: jobs: deps: - if: ${{ vars.CI_VERBOSE_DEPS || false }} + if: ${{fromJSON(vars.CI_VERBOSE_DEPS || 'true')}} name: Deps uses: ./.github/workflows/deps.yml with: @@ -27,7 +27,7 @@ jobs: rust_toolchains: ${{vars.RUST_TOOLCHAINS}} rust_targets: ${{vars.RUST_TARGETS}} sys_names: ${{vars.SYS_NAMES}} - sys_targets: ${{vars.sys_TARGETS}} + sys_targets: ${{vars.SYS_TARGETS}} sys_versions: ${{vars.SYS_VERSIONS}} machines: ${{vars.MACHINES}} @@ -42,7 +42,7 @@ jobs: rust_toolchains: ${{vars.RUST_TOOLCHAINS}} rust_targets: ${{vars.RUST_TARGETS}} sys_names: ${{vars.SYS_NAMES}} - sys_targets: ${{vars.sys_TARGETS}} + sys_targets: ${{vars.SYS_TARGETS}} sys_versions: ${{vars.SYS_VERSIONS}} machines: ${{vars.MACHINES}} excludes: '[{"cargo_profile": "release-debuginfo", "rust_toolchain": "nightly"}]' @@ -58,7 +58,7 @@ jobs: rust_toolchains: ${{vars.RUST_TOOLCHAINS}} rust_targets: ${{vars.RUST_TARGETS}} sys_names: ${{vars.SYS_NAMES}} - sys_targets: ${{vars.sys_TARGETS}} + sys_targets: ${{vars.SYS_TARGETS}} sys_versions: ${{vars.SYS_VERSIONS}} machines: ${{vars.MACHINES}} complement: ${{fromJSON(vars.COMPLEMENT || 'true')}} @@ -75,7 +75,7 @@ jobs: sys_names: ${{vars.SYS_NAMES}} sys_versions: ${{vars.SYS_VERSIONS}} rust_targets: ${{vars.RUST_TARGETS}} - sys_targets: ${{vars.sys_TARGETS}} + sys_targets: ${{vars.SYS_TARGETS}} machines: ${{vars.MACHINES}} excludes: '[{"cargo_profile": "test"}, {"feat_set": "none"}]' @@ -91,10 +91,10 @@ jobs: sys_names: ${{vars.SYS_NAMES}} sys_versions: ${{vars.SYS_VERSIONS}} rust_targets: ${{vars.RUST_TARGETS}} - sys_targets: ${{vars.sys_TARGETS}} + sys_targets: ${{vars.SYS_TARGETS}} machines: ${{vars.MACHINES}} excludes: '[{"cargo_profile": "test"}, {"feat_set": "none"}]' - docker_id: ${{vars.DOCKER_ID}} + docker_repo: ${{vars.DOCKER_REPO}} secrets: ghcr_token: ${{ secrets.GHCR_TOKEN }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b1366f48..488d5589 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -36,16 +36,16 @@ on: type: string default: '[]' description: Matrix inclusions - docker_id: + docker_repo: type: string - description: DockerHub ID + description: DockerHub Repository secrets: ghcr_token: dockerhub_token: jobs: containers: - if: ${{ !failure() && !cancelled() && inputs.docker_id }} + if: ${{ !failure() && !cancelled() && inputs.docker_repo }} name: Publish containers runs-on: ${{matrix.machine}} permissions: write-all @@ -77,7 +77,7 @@ jobs: uses: docker/login-action@v3 with: registry: docker.io - username: ${{ inputs.docker_id }} + username: ${{ github.actor }} password: ${{ secrets.dockerhub_token }} - name: Bake @@ -93,10 +93,10 @@ jobs: machine: ${{matrix.machine}} acct: ${{github.actor}} repo: ${{github.repository}} - docker_repo: ${{inputs.docker_id}} + docker_repo: ${{inputs.docker_repo}} run: | - docker/bake.sh ${{matrix.bake_target}} + docker/bake.sh "${{matrix.bake_target}}" packages: if: ${{ !failure() && !cancelled() && contains(fromJSON(inputs.feat_sets), fromJSON('["all"]')[0]) }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dfccb567..bc3e23fd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -38,6 +38,9 @@ on: complement: type: boolean default: true + complement_feat_sets: + type: string + default: '["all"]' jobs: 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"}]' 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: + 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])}} name: Matrix Compliance - needs: [complement_tester, complement_testee] + needs: [complement] runs-on: ${{matrix.machine}} concurrency: group: complement-cant-walk-and-chew-bubblegum @@ -120,8 +106,8 @@ jobs: fail-fast: false matrix: cargo_profile: ${{fromJSON('["test"]')}} + feat_set: ${{fromJSON(inputs.complement_feat_sets)}} rust_toolchain: ${{fromJSON('["nightly"]')}} - feat_set: ${{fromJSON('["all"]')}} sys_name: ${{fromJSON(inputs.sys_names)}} sys_version: ${{fromJSON(inputs.sys_versions)}} rust_target: ${{fromJSON(inputs.rust_targets)}} @@ -147,7 +133,7 @@ jobs: run: | docker/complement.sh - - name: Results + - name: Extract id: extract 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}} @@ -156,11 +142,15 @@ jobs: run: | cid=$(cat "$name") 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 uses: actions/upload-artifact@v4 with: name: test_results.${{matrix.feat_set}}.${{matrix.sys_name}}.${{matrix.sys_target}}.jsonl path: ./tests/test_results/complement/test_results.jsonl + + - name: Accept + id: accept + run: | + git diff --exit-code --color --color-moved diff --git a/docker/Dockerfile.complement b/docker/Dockerfile.complement index 52964762..78e86ea3 100644 --- a/docker/Dockerfile.complement +++ b/docker/Dockerfile.complement @@ -22,9 +22,12 @@ COPY < 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; EOF RUN echo $(tr -d '\n' < uwu.sh) > uwu.sh diff --git a/docker/bake.hcl b/docker/bake.hcl index 5a5829a3..e89e10b9 100644 --- a/docker/bake.hcl +++ b/docker/bake.hcl @@ -1,22 +1,27 @@ -variable "acct" { - default = "$GITHUB_ACTOR" -} +variable "GITHUB_ACTOR" {} +variable "GITHUB_REPOSITORY" {} +variable "GITHUB_REF" {} +variable "GITHUB_REF_SHA" {} +variable "GITHUB_REF_NAME" {} +variable "acct" { + default = "${GITHUB_ACTOR}" +} variable "repo" { - default = "$GITHUB_REPOSITORY" + default = "${GITHUB_REPOSITORY}" } variable "docker_repo" { - default = "$DOCKER_ID" + default = "${repo}" } variable "git_ref" { - default = "$GITHUB_REF" + default = "${GITHUB_REF}" } variable "git_ref_sha" { - default = "$GITHUB_REF_SHA" + default = "${GITHUB_REF_SHA}" } variable "git_ref_name" { - default = "$GITHUB_REF_NAME" + default = "${GITHUB_REF_NAME}" } cargo_feat_sets = { @@ -33,7 +38,7 @@ variable "feat_sets" { default = "[\"none\", \"default\", \"all\"]" } variable "cargo_profiles" { - default = "[\"test\", \"bench\"]" + default = "[\"test\", \"release\"]" } variable "cargo_install_root" { default = "/usr" @@ -554,7 +559,7 @@ target "install" { contexts = { 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]) - 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]) } } diff --git a/docker/complement.sh b/docker/complement.sh index 2b124ba4..ce68855d 100755 --- a/docker/complement.sh +++ b/docker/complement.sh @@ -20,7 +20,7 @@ cargo_profile="${cargo_profile:-$default_cargo_profile}" feat_set="${feat_set:-$default_feat_set}" rust_target="${rust_target:-$default_rust_target}" 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_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}" 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}" sock="/var/run/docker.sock" arg="--name $name -v $sock:$sock --network=host $tester_image ${testee_image}" +set +x if test "$CI_VERBOSE_ENV" = "true"; then date env fi -if test "$CI" = "true"; then - arg="-d $arg" -else - arg="--rm $arg" -fi - docker rm -f "$name" 2>/dev/null 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 - echo -n "$cid" > "$name" + arg="-d $arg" + cid=$(docker run $arg) +else + arg="--rm -a stdout -a stderr $arg" + docker run $arg + exit $? 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 wait "$cid" 2>/dev/null + echo -e "\033[1;42;30mPASS\033[0m"