name: Testing on: workflow_call: inputs: cargo_profiles: type: string description: Cargo profiles feat_sets: type: string description: Cargo feature groups rust_toolchains: type: string description: Rust toolchains sys_names: type: string description: System names sys_versions: type: string description: System versions rust_targets: type: string description: Rust targets sys_targets: type: string description: System targets machines: type: string description: Hardware platform vector excludes: type: string default: '[]' description: Matrix exclusions includes: type: string default: '[]' description: Matrix inclusions complement: type: boolean default: true complement_feat_sets: type: string default: '["all"]' complement_runner: type: string jobs: unit: if: > contains(fromJSON(inputs.cargo_profiles), fromJSON('["test"]')[0]) && contains(fromJSON(inputs.feat_sets), fromJSON('["all"]')[0]) && contains(fromJSON(inputs.rust_toolchains), fromJSON('["nightly"]')[0]) && contains(fromJSON(inputs.sys_targets), fromJSON('["x86_64-v1-linux-gnu"]')[0]) name: Unit uses: ./.github/workflows/bake.yml with: bake_targets: '["unit"]' cargo_profiles: '["test"]' feat_sets: '["all"]' rust_toolchains: ${{inputs.rust_toolchains}} sys_names: ${{inputs.sys_names}} sys_versions: ${{inputs.sys_versions}} rust_targets: ${{inputs.rust_targets}} sys_targets: '["x86_64-v1-linux-gnu"]' machines: ${{inputs.machines}} excludes: ${{inputs.excludes}} includes: ${{inputs.includes}} smoke: if: > !failure() && !cancelled() && inputs.cargo_profiles && inputs.machines name: Smoke uses: ./.github/workflows/bake.yml with: bake_targets: '["smoke", "smoke-valgrind"]' 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}} includes: ${{inputs.includes}} excludes: > [ {"cargo_profile": "test", "feat_set": "default"}, {"cargo_profile": "test", "feat_set": "none", "bake_target": "smoke-valgrind"}, {"cargo_profile": "test", "rust_toolchain": "stable"}, {"cargo_profile": "test", "rust_target": "aarch64-unknown-linux-gnu"}, {"cargo_profile": "test", "sys_target": "x86_64-v2-linux-gnu"}, {"cargo_profile": "test", "sys_target": "x86_64-v3-linux-gnu"}, {"cargo_profile": "release", "rust_toolchain": "nightly"}, {"cargo_profile": "release", "rust_toolchain": "stable", "feat_set": "none"}, {"cargo_profile": "release", "bake_target": "smoke-valgrind"}, {"cargo_profile": "release-debuginfo", "rust_toolchain": "nightly"}, {"cargo_profile": "release-debuginfo", "rust_toolchain": "stable", "feat_set": "none"}, {"cargo_profile": "release-debuginfo", "bake_target": "smoke"}, {"cargo_profile": "release-debuginfo", "rust_target": "aarch64-unknown-linux-gnu"}, {"cargo_profile": "release-native", "rust_toolchain": "stable"}, {"cargo_profile": "release-native", "feat_set": "none"}, {"cargo_profile": "release-native", "feat_set": "default"}, {"cargo_profile": "release-native", "bake_target": "smoke-valgrind"}, {"cargo_profile": "release-native", "rust_target": "aarch64-unknown-linux-gnu"}, {"cargo_profile": "release-native", "sys_target": "x86_64-v2-linux-gnu"}, {"cargo_profile": "release-native", "sys_target": "x86_64-v3-linux-gnu"}, {"cargo_profile": "release-native", "sys_target": "x86_64-v4-linux-gnu"}, {"rust_target": "aarch64-unknown-linux-gnu", "feat_set": "none"}, {"rust_target": "aarch64-unknown-linux-gnu", "feat_set": "default"}, {"rust_target": "aarch64-unknown-linux-gnu", "sys_target": "x86_64-v1-linux-gnu"}, {"rust_target": "aarch64-unknown-linux-gnu", "sys_target": "x86_64-v2-linux-gnu"}, {"rust_target": "aarch64-unknown-linux-gnu", "sys_target": "x86_64-v3-linux-gnu"}, {"rust_target": "aarch64-unknown-linux-gnu", "sys_target": "x86_64-v4-linux-gnu"}, {"rust_target": "x86_64-unknown-linux-gnu", "sys_target": "aarch64-v8-linux-gnu"}, {"sys_target": "aarch64-v8-linux-gnu", "machine": "X64"}, {"sys_target": "x86_64-v1-linux-gnu", "machine": "ARM64"}, {"sys_target": "x86_64-v2-linux-gnu", "machine": "ARM64"}, {"sys_target": "x86_64-v2-linux-gnu", "feat_set": "none"}, {"sys_target": "x86_64-v2-linux-gnu", "feat_set": "default"}, {"sys_target": "x86_64-v3-linux-gnu", "machine": "ARM64"}, {"sys_target": "x86_64-v3-linux-gnu", "feat_set": "none"}, {"sys_target": "x86_64-v3-linux-gnu", "feat_set": "default"}, {"sys_target": "x86_64-v3-linux-gnu", "bake_target": "smoke-valgrind"}, {"sys_target": "x86_64-v4-linux-gnu", "machine": "ARM64"}, {"sys_target": "x86_64-v4-linux-gnu", "feat_set": "none"}, {"sys_target": "x86_64-v4-linux-gnu", "feat_set": "default"}, {"sys_target": "x86_64-v4-linux-gnu", "bake_target": "smoke-valgrind"}, ] complement: if: > !failure() && !cancelled() && inputs.complement && contains(fromJSON(inputs.cargo_profiles), fromJSON('["test"]')[0]) && contains(fromJSON(inputs.complement_feat_sets), fromJSON('["all"]')[0]) && contains(fromJSON(inputs.rust_toolchains), fromJSON('["nightly"]')[0]) && contains(fromJSON(inputs.sys_targets), fromJSON('["x86_64-v1-linux-gnu"]')[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: '["x86_64-v1-linux-gnu"]' machines: ${{inputs.machines}} runner: ${{inputs.complement_runner}} excludes: ${{inputs.excludes}} includes: ${{inputs.includes}} compliance: if: > !failure() && !cancelled() && inputs.complement && inputs.machines && contains(fromJSON(inputs.cargo_profiles), fromJSON('["test"]')[0]) && contains(fromJSON(inputs.feat_sets), fromJSON('["all"]')[0]) && contains(fromJSON(inputs.rust_toolchains), fromJSON('["nightly"]')[0]) && contains(fromJSON(inputs.sys_targets), fromJSON('["x86_64-v1-linux-gnu"]')[0]) name: Matrix Compliance needs: [complement] runs-on: ["${{matrix.machine}}", "${{inputs.complement_runner}}"] concurrency: group: complement-cant-walk-and-chew-bubblegum cancel-in-progress: false strategy: fail-fast: false matrix: cargo_profile: ${{fromJSON('["test"]')}} feat_set: ${{fromJSON(inputs.complement_feat_sets)}} rust_toolchain: ${{fromJSON('["nightly"]')}} sys_name: ${{fromJSON(inputs.sys_names)}} sys_version: ${{fromJSON(inputs.sys_versions)}} rust_target: ${{fromJSON(inputs.rust_targets)}} sys_target: ${{fromJSON('["x86_64-v1-linux-gnu"]')}} machine: ${{fromJSON(inputs.machines)}} exclude: ${{fromJSON(inputs.excludes)}} include: ${{fromJSON(inputs.includes)}} steps: - uses: actions/checkout@v3 - name: Execute id: execute env: cargo_profile: ${{matrix.cargo_profile}} rust_toolchain: ${{matrix.rust_toolchain}} rust_target: ${{matrix.rust_target}} feat_set: ${{matrix.feat_set}} sys_name: ${{matrix.sys_name}} sys_target: ${{matrix.sys_target}} sys_version: ${{matrix.sys_version}} machine: ${{matrix.machine}} run: | docker/complement.sh - if: success() || failure() && steps.execute.outcome == 'failure' name: Extract id: extract env: name: complement_tester__${{matrix.sys_name}}__${{matrix.sys_version}}__${{matrix.sys_target}} tag: latest run: | cid=$(cat "$name") docker cp "$cid:/usr/src/complement/new_results.jsonl" tests/test_results/complement/test_results.jsonl - if: success() || failure() && steps.execute.outcome == 'failure' name: Upload New Results id: upload-result uses: actions/upload-artifact@v4 with: name: complement_results-${{matrix.feat_set}}-${{matrix.sys_name}}-${{matrix.sys_target}}.jsonl path: ./tests/test_results/complement/test_results.jsonl - if: failure() && steps.execute.outcome == 'failure' name: Upload Failure Output id: upload-output uses: actions/upload-artifact@v4 with: name: complement_output-${{matrix.feat_set}}-${{matrix.sys_name}}-${{matrix.sys_target}}.jsonl path: ./complement.jsonl if-no-files-found: ignore - name: Accept id: accept run: | git diff --exit-code --color --color-moved