Docker Complement

Split and reorganize workflows

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk
2025-05-01 07:47:51 +00:00
parent c5de46e3e1
commit 123f130a87
10 changed files with 262 additions and 148 deletions

View File

@@ -58,6 +58,7 @@ env:
jobs:
task:
name: Bake
runs-on: ${{matrix.machine}}
strategy:
fail-fast: false

52
.github/workflows/base.yml vendored Normal file
View File

@@ -0,0 +1,52 @@
name: Base Environment
on:
workflow_call:
jobs:
systems:
name: Base Environment
uses: ./.github/workflows/bake.yml
with:
bake_targets: '["systems"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{vars.DOCKER_ID}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}
buildsys:
name: Build Environment
uses: ./.github/workflows/bake.yml
needs: [systems]
with:
bake_targets: '["buildsys"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{vars.DOCKER_ID}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}
complement:
name: Test Environment
uses: ./.github/workflows/bake.yml
needs: [systems]
with:
bake_targets: '["complement-tester"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{vars.DOCKER_ID}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}

View File

@@ -1,129 +1,16 @@
name: Build
on:
push:
branches:
- main
workflow_dispatch:
inputs:
bake:
type: string
required: false
description: JSON Object of inputs passed to the environment
concurrency:
group: ${{github.workflow}}-${{github.ref}}
cancel-in-progress: true
env:
docker_id: ${{vars.DOCKER_ID}}
inputs: ${{github.event.inputs}}
workflow_call:
jobs:
systems:
name: Base Environment
uses: ./.github/workflows/bake.yml
with:
bake_targets: '["systems"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{github.env.docker_id}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}
buildsys:
name: Build Environment
uses: ./.github/workflows/bake.yml
needs: [systems]
with:
bake_targets: '["buildsys"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{github.env.docker_id}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}
sources:
name: Acquire Source
uses: ./.github/workflows/bake.yml
needs: [buildsys]
with:
bake_targets: '["sources"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{github.env.docker_id}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}
rocksdb:
name: Build RocksDB
uses: ./.github/workflows/bake.yml
needs: [sources]
with:
bake_targets: '["rocksdb"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{github.env.docker_id}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}
deps:
name: Build Dependencies
uses: ./.github/workflows/bake.yml
needs: [rocksdb]
with:
bake_targets: '["deps"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{github.env.docker_id}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}
clippy:
name: Clippy Lints
uses: ./.github/workflows/bake.yml
needs: [deps]
with:
bake_targets: '["clippy"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{github.env.docker_id}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}
install:
name: Install
uses: ./.github/workflows/bake.yml
needs: [deps]
with:
bake_targets: '["install"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{github.env.docker_id}}
docker_id: ${{vars.DOCKER_ID}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
@@ -132,30 +19,14 @@ jobs:
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}
tests-unit:
name: Unit Tests
uses: ./.github/workflows/bake.yml
needs: [deps]
with:
bake_targets: '["tests-unit"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{github.env.docker_id}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}
smoketest:
name: Smoke Tests
complement:
name: Complement Testee
uses: ./.github/workflows/bake.yml
needs: [install]
with:
bake_targets: '["tests-smoke"]'
bake_targets: '["complement-testee"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{github.env.docker_id}}
docker_id: ${{vars.DOCKER_ID}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}

52
.github/workflows/deps.yml vendored Normal file
View File

@@ -0,0 +1,52 @@
name: Dependency Build
on:
workflow_call:
jobs:
sources:
name: Acquire Source
uses: ./.github/workflows/bake.yml
with:
bake_targets: '["sources"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{vars.DOCKER_ID}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}
rocksdb:
name: Build RocksDB
uses: ./.github/workflows/bake.yml
needs: [sources]
with:
bake_targets: '["rocksdb"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{vars.DOCKER_ID}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}
deps:
name: Build Dependencies
uses: ./.github/workflows/bake.yml
needs: [rocksdb]
with:
bake_targets: '["deps"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{vars.DOCKER_ID}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}

20
.github/workflows/lint.yml vendored Normal file
View File

@@ -0,0 +1,20 @@
name: Linting
on:
workflow_call:
jobs:
clippy:
name: Clippy Lints
uses: ./.github/workflows/bake.yml
with:
bake_targets: '["clippy"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{vars.DOCKER_ID}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}

49
.github/workflows/main.yml vendored Normal file
View File

@@ -0,0 +1,49 @@
name: Main
on:
push:
branches:
- "**"
pull_request:
branches:
- "**"
workflow_dispatch:
inputs:
bake:
type: string
required: false
description: JSON Object of inputs passed to the environment
concurrency:
group: ${{github.workflow}}-${{github.ref}}
cancel-in-progress: true
env:
docker_id: ${{vars.DOCKER_ID}}
inputs: ${{github.event.inputs}}
jobs:
base:
name: Base
uses: ./.github/workflows/base.yml
deps:
name: Dependencies
uses: ./.github/workflows/deps.yml
needs: [base]
lint:
name: Linting
uses: ./.github/workflows/lint.yml
needs: [deps]
build:
name: Build
uses: ./.github/workflows/build.yml
needs: [deps]
test:
name: Test
uses: ./.github/workflows/test.yml
needs: [build]

67
.github/workflows/test.yml vendored Normal file
View File

@@ -0,0 +1,67 @@
name: Test
on:
workflow_call:
jobs:
unit:
name: Unit Tests
uses: ./.github/workflows/bake.yml
with:
bake_targets: '["tests-unit"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{vars.DOCKER_ID}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}
smoke:
name: Smoke Tests
uses: ./.github/workflows/bake.yml
with:
bake_targets: '["tests-smoke"]'
cargo_profiles: ${{vars.CARGO_PROFILES}}
docker_id: ${{vars.DOCKER_ID}}
feat_sets: ${{vars.FEAT_SETS}}
machines: ${{vars.MACHINES}}
rust_targets: ${{vars.RUST_TARGETS}}
rust_toolchains: ${{vars.RUST_TOOLCHAINS}}
sys_names: ${{vars.SYS_NAMES}}
sys_targets: ${{vars.SYS_TARGETS}}
sys_versions: ${{vars.SYS_VERSIONS}}
complement:
name: Compliance Tests
needs: [smoke]
runs-on: ${{matrix.machine}}
concurrency: ${{matrix.feat_set}}-${{matrix.sys_name}}-${{matrix.sys_target}}-${{matrix.sys_version}}
strategy:
fail-fast: false
matrix:
cargo_profile: ${{fromJSON(vars.CARGO_PROFILES)}}
feat_set: ${{fromJSON(vars.FEAT_SETS)}}
machine: ${{fromJSON(vars.MACHINES)}}
rust_target: ${{fromJSON(vars.RUST_TARGETS)}}
rust_toolchain: ${{fromJSON(vars.RUST_TOOLCHAINS)}}
sys_name: ${{fromJSON(vars.SYS_NAMES)}}
sys_target: ${{fromJSON(vars.SYS_TARGETS)}}
sys_version: ${{fromJSON(vars.SYS_VERSIONS)}}
steps:
- name: Complement
env:
cargo_profile: ${{matrix.cargo_profile}}
feat_set: ${{matrix.feat_set}}
machine: ${{matrix.machine}}
rust_target: ${{matrix.rust_target}}
rust_toolchain: ${{matrix.rust_toolchain}}
sys_name: ${{matrix.sys_name}}
sys_target: ${{matrix.sys_target}}
sys_version: ${{matrix.sys_version}}
run: |
docker/complement.sh

View File

@@ -102,7 +102,7 @@ COPY <<EOF complement.toml
sender_timeout = 300
sender_idle_timeout = 300
sender_retry_backoff_limit = 300
allow_invalid_tls_certificates_yes_i_know_what_the_fuck_i_am_doing_with_this_and_i_know_this_is_insecure = true
allow_invalid_tls_certificates = true
[global.tls]
certs = "/complement/certificate.crt"
@@ -174,7 +174,7 @@ ARG complement_shuffle=1337
ARG complement_timeout="1h"
ARG complement_run=".*"
ARG complement_skip=""
ARG complement_tags="tuwunel_blacklist"
ARG complement_tags="conduwuit_blacklist"
ARG complement_tests="./tests/..."
ARG complement_base_image
@@ -233,7 +233,7 @@ ARG complement_shuffle=1337
ARG complement_timeout="1h"
ARG complement_run=".*"
ARG complement_skip=""
ARG complement_tags="tuwunel_blacklist"
ARG complement_tags="conduwuit_blacklist"
ARG complement_tests="./tests/..."
ARG complement_base_image

View File

@@ -181,8 +181,8 @@ group "complement" {
targets = [
"complement-tester",
"complement-testee",
"complement-tester-valgrind",
"complement-testee-valgrind",
#"complement-tester-valgrind",
#"complement-testee-valgrind",
]
}

View File

@@ -1,22 +1,24 @@
#!/bin/bash
set -eo pipefail
default_uwu_id="jevolk/tuwunel"
uwu_id=${uwu_id:=$default_uwu_id}
uwu_acct=${uwu_acct:=$(echo $uwu_id | cut -d"/" -f1)}
uwu_repo=${uwu_repo:=$(echo $uwu_id | cut -d"/" -f2)}
default_docker_id="jevolk/tuwunel"
docker_id=${docker_id:=$default_docker_id}
docker_acct=${docker_acct:=$(echo $docker_id | cut -d"/" -f1)}
docker_repo=${docker_repo:=$(echo $docker_id | cut -d"/" -f2)}
CI="${CI:-0}"
CI="${CI:-true}"
BASEDIR=$(dirname "$0")
set -a
runner_name=$(echo $RUNNER_NAME | cut -d"." -f1)
runner_num=$(echo $RUNNER_NAME | cut -d"." -f2)
set +a
###############################################################################
tester_image="complement-tester--none--debian--testing-slim--x86_64-linux-gnu"
testee_image="complement-testee--test--nightly--x86_64-unknown-linux-gnu--none--debian--testing-slim--x86_64-linux-gnu"
name="complement_tester_nightly"
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="--rm --name $name -v $sock:$sock --network=host $tester_image ${testee_image}"