Skip to content

Commit b249331

Browse files
committed
ci: split OSP integration tests to nightly + add ASan/UBSan
PR CI was burning runner time on 40 OSP integration workflows that each spin up multiple matrix jobs, install a Debian container, install .debs, and run upstream test suites -- on every push. That's the runner-throttling we've been hitting. Move all of that to nightly. OSP workflows -> reusable + dispatch-only ========================================= 40 workflows converted from `on: pull_request + push` to `on: workflow_call + workflow_dispatch`. PRs no longer trigger them. The `wait_for_smoke` job inside each is removed -- nightly doesn't have a smoke gate (smoke gates the open-PR fast feedback loop, not scheduled runs). Upstream matrices restored where Phase A had trimmed them: - curl: curl_ref back to [curl-8_4_0, curl-7_88_1] - openssh: openssh_ref back to [V_10_0_P2, V_9_9_P1] - git-ssh-dr: key_type back to all four, iterations back to 10 The 40 OSPs: bind9, cjose, curl, debian-package, git-ssh-dr, grpc, hostap, iperf, krb5, libcryptsetup, libeac3, libfido2, libhashkit2, libnice, liboauth2, librelp, libssh2, libtss2, libwebsockets, net-snmp, nginx, openldap, opensc, openssh, openvpn, pam-pkcs11, ppp, python3-ntp, qt5network5, rsync, socat, sscep, sssd, stunnel, systemd, tcpdump, tnftp, tpm2-tools, x11vnc, xmlsec. New nightly orchestrator (.github/workflows/nightly-osp.yml) ============================================================ `schedule: 0 6 * * *` + workflow_dispatch. Fans out all 40 OSP workflows in parallel via `uses:` and aggregates results in a `notify` job that: - Always runs (`if: always()`) so failures don't suppress the report. - Parses `toJSON(needs)` to build pass/fail lists with jq: to_entries[] | select(.value.result != "success") | "\(.key) (\(.value.result))" (the `[]` stream is load-bearing -- `map(...)` then `.[].key` inside a string template is malformed jq.) - Posts a green/red Slack attachment to SLACK_WEBHOOK_URL, with `curl -fsS` so HTTP errors actually fail the workflow. - Writes the same summary to $GITHUB_STEP_SUMMARY so the run page is readable even when SLACK_WEBHOOK_URL isn't set. - SLACK_WEBHOOK_URL is read at JOB-level env so the step `if:` can see it. Step-level env is not in scope for that step's own `if:`. ASan + UBSan workflow (.github/workflows/sanitizers.yml) ======================================================== Builds OpenSSL, wolfSSL, and wolfProvider from source under -fsanitize=address,undefined -fno-omit-frame-pointer -fno-sanitize-recover=all -static-libasan, then runs do-cmd-tests.sh against the instrumented binaries. ASAN_OPTIONS and UBSAN_OPTIONS set to halt on first hit so we don't drown in cascades. Versions come from _discover-versions.yml. Gated on smoke. Runs on PR. wait_for_smoke kept where it matters ==================================== After the OSP move, the PR-triggered workflows that build wolfProvider all gate on smoke: simple, cmdline, fips-ready, openssl-version, seed-src, multi-compiler, sanitizers. codespell stays ungated (it doesn't build wolfprov). Requires repo secret SLACK_WEBHOOK_URL for the Slack push to fire; absent it the workflow still runs and writes the summary to the job output.
1 parent fddae3e commit b249331

47 files changed

Lines changed: 725 additions & 1377 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/bind9.yml

Lines changed: 8 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,23 @@
11
name: Bind9 Tests
22

3-
# START OF COMMON SECTION
3+
# OSP integration test for Bind9 Tests. Runs nightly via the
4+
# Nightly OSP Suite orchestrator (.github/workflows/nightly-osp.yml)
5+
# or manually via workflow_dispatch. NOT triggered on PR/push --
6+
# PR CI focuses on smoke + simple + cheap internal checks.
7+
48
on:
5-
push:
6-
branches: [ 'master', 'main', 'release/**' ]
7-
pull_request:
8-
branches: [ '*' ]
9-
types: [opened, synchronize, reopened, ready_for_review]
10-
paths-ignore:
11-
- '**.md'
12-
- 'docs/**'
13-
- 'LICENSE*'
14-
- '.github/ISSUE_TEMPLATE/**'
15-
- '.github/dependabot.yml'
16-
- '.gitignore'
17-
- 'AUTHORS'
18-
- 'COPYING'
19-
- 'README*'
20-
- 'CHANGELOG*'
9+
workflow_call: {}
10+
workflow_dispatch: {}
2111

2212
concurrency:
2313
group: ${{ github.workflow }}-${{ github.ref }}
2414
cancel-in-progress: true
25-
# END OF COMMON SECTION
26-
2715
jobs:
28-
wait_for_smoke:
29-
name: Wait for smoke
30-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
31-
runs-on: ubuntu-22.04
32-
timeout-minutes: 35
33-
steps:
34-
- uses: actions/checkout@v4
35-
with:
36-
fetch-depth: 1
37-
- uses: ./.github/actions/wait-for-smoke
38-
with:
39-
github-token: ${{ secrets.GITHUB_TOKEN }}
40-
4116
discover_versions:
42-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
4317
uses: ./.github/workflows/_discover-versions.yml
4418

4519
build_wolfprovider:
46-
needs: [wait_for_smoke, discover_versions]
47-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
20+
needs: discover_versions
4821
uses: ./.github/workflows/build-wolfprovider.yml
4922
with:
5023
wolfssl_ref: ${{ matrix.wolfssl_ref }}
@@ -60,7 +33,6 @@ jobs:
6033
replace_default: [ true ]
6134

6235
test_bind:
63-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
6436
runs-on: ubuntu-22.04
6537
needs: [build_wolfprovider, discover_versions]
6638
container:

.github/workflows/cjose.yml

Lines changed: 8 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,23 @@
11
name: cjose Tests
22

3-
# START OF COMMON SECTION
3+
# OSP integration test for cjose Tests. Runs nightly via the
4+
# Nightly OSP Suite orchestrator (.github/workflows/nightly-osp.yml)
5+
# or manually via workflow_dispatch. NOT triggered on PR/push --
6+
# PR CI focuses on smoke + simple + cheap internal checks.
7+
48
on:
5-
push:
6-
branches: [ 'master', 'main', 'release/**' ]
7-
pull_request:
8-
branches: [ '*' ]
9-
types: [opened, synchronize, reopened, ready_for_review]
10-
paths-ignore:
11-
- '**.md'
12-
- 'docs/**'
13-
- 'LICENSE*'
14-
- '.github/ISSUE_TEMPLATE/**'
15-
- '.github/dependabot.yml'
16-
- '.gitignore'
17-
- 'AUTHORS'
18-
- 'COPYING'
19-
- 'README*'
20-
- 'CHANGELOG*'
9+
workflow_call: {}
10+
workflow_dispatch: {}
2111

2212
concurrency:
2313
group: ${{ github.workflow }}-${{ github.ref }}
2414
cancel-in-progress: true
25-
# END OF COMMON SECTION
26-
2715
jobs:
28-
wait_for_smoke:
29-
name: Wait for smoke
30-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
31-
runs-on: ubuntu-22.04
32-
timeout-minutes: 35
33-
steps:
34-
- uses: actions/checkout@v4
35-
with:
36-
fetch-depth: 1
37-
- uses: ./.github/actions/wait-for-smoke
38-
with:
39-
github-token: ${{ secrets.GITHUB_TOKEN }}
40-
4116
discover_versions:
42-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
4317
uses: ./.github/workflows/_discover-versions.yml
4418

4519
build_wolfprovider:
46-
needs: [wait_for_smoke, discover_versions]
47-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
20+
needs: discover_versions
4821
uses: ./.github/workflows/build-wolfprovider.yml
4922
with:
5023
wolfssl_ref: ${{ matrix.wolfssl_ref }}
@@ -60,7 +33,6 @@ jobs:
6033
replace_default: [ true ]
6134

6235
test_cjose:
63-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
6436
runs-on: ubuntu-22.04
6537
needs: [build_wolfprovider, discover_versions]
6638
# Run inside Debian Bookworm to match packaging environment

.github/workflows/cmdline.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,21 @@ concurrency:
2525
# END OF COMMON SECTION
2626

2727
jobs:
28+
wait_for_smoke:
29+
name: Wait for smoke
30+
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
31+
runs-on: ubuntu-22.04
32+
timeout-minutes: 35
33+
steps:
34+
- uses: actions/checkout@v4
35+
with:
36+
fetch-depth: 1
37+
- uses: ./.github/actions/wait-for-smoke
38+
with:
39+
github-token: ${{ secrets.GITHUB_TOKEN }}
40+
2841
cmdtest_test:
42+
needs: wait_for_smoke
2943
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
3044
name: Command line test
3145
runs-on: ubuntu-22.04

.github/workflows/curl.yml

Lines changed: 9 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,23 @@
11
name: Curl Tests
22

3-
# START OF COMMON SECTION
3+
# OSP integration test for Curl Tests. Runs nightly via the
4+
# Nightly OSP Suite orchestrator (.github/workflows/nightly-osp.yml)
5+
# or manually via workflow_dispatch. NOT triggered on PR/push --
6+
# PR CI focuses on smoke + simple + cheap internal checks.
7+
48
on:
5-
push:
6-
branches: [ 'master', 'main', 'release/**' ]
7-
pull_request:
8-
branches: [ '*' ]
9-
types: [opened, synchronize, reopened, ready_for_review]
10-
paths-ignore:
11-
- '**.md'
12-
- 'docs/**'
13-
- 'LICENSE*'
14-
- '.github/ISSUE_TEMPLATE/**'
15-
- '.github/dependabot.yml'
16-
- '.gitignore'
17-
- 'AUTHORS'
18-
- 'COPYING'
19-
- 'README*'
20-
- 'CHANGELOG*'
9+
workflow_call: {}
10+
workflow_dispatch: {}
2111

2212
concurrency:
2313
group: ${{ github.workflow }}-${{ github.ref }}
2414
cancel-in-progress: true
25-
# END OF COMMON SECTION
26-
2715
jobs:
28-
wait_for_smoke:
29-
name: Wait for smoke
30-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
31-
runs-on: ubuntu-22.04
32-
timeout-minutes: 35
33-
steps:
34-
- uses: actions/checkout@v4
35-
with:
36-
fetch-depth: 1
37-
- uses: ./.github/actions/wait-for-smoke
38-
with:
39-
github-token: ${{ secrets.GITHUB_TOKEN }}
40-
4116
discover_versions:
42-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
4317
uses: ./.github/workflows/_discover-versions.yml
4418

4519
build_wolfprovider:
46-
needs: [wait_for_smoke, discover_versions]
47-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
20+
needs: discover_versions
4821
uses: ./.github/workflows/build-wolfprovider.yml
4922
with:
5023
wolfssl_ref: ${{ matrix.wolfssl_ref }}
@@ -60,7 +33,6 @@ jobs:
6033
replace_default: [ true ]
6134

6235
test_curl:
63-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
6436
runs-on: ubuntu-22.04
6537
needs: [build_wolfprovider, discover_versions]
6638
container:
@@ -72,8 +44,7 @@ jobs:
7244
strategy:
7345
fail-fast: false
7446
matrix:
75-
# PR runs latest curl only. Older refs are exercised at release time.
76-
curl_ref: [ 'curl-8_4_0' ]
47+
curl_ref: [ 'curl-8_4_0', 'curl-7_88_1' ]
7748
wolfssl_ref: ${{ fromJson(needs.discover_versions.outputs.wolfssl_ref_array) }}
7849
openssl_ref: ${{ fromJson(needs.discover_versions.outputs.openssl_ref_array) }}
7950
fips_ref: [ 'FIPS', 'non-FIPS' ]

.github/workflows/debian-package.yml

Lines changed: 8 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,23 @@
11
name: Debian Package Test
22

3-
# START OF COMMON SECTION
3+
# OSP integration test for Debian Package Test. Runs nightly via the
4+
# Nightly OSP Suite orchestrator (.github/workflows/nightly-osp.yml)
5+
# or manually via workflow_dispatch. NOT triggered on PR/push --
6+
# PR CI focuses on smoke + simple + cheap internal checks.
7+
48
on:
5-
push:
6-
branches: [ 'master', 'main', 'release/**' ]
7-
pull_request:
8-
branches: [ '*' ]
9-
types: [opened, synchronize, reopened, ready_for_review]
10-
paths-ignore:
11-
- '**.md'
12-
- 'docs/**'
13-
- 'LICENSE*'
14-
- '.github/ISSUE_TEMPLATE/**'
15-
- '.github/dependabot.yml'
16-
- '.gitignore'
17-
- 'AUTHORS'
18-
- 'COPYING'
19-
- 'README*'
20-
- 'CHANGELOG*'
9+
workflow_call: {}
10+
workflow_dispatch: {}
2111

2212
concurrency:
2313
group: ${{ github.workflow }}-${{ github.ref }}
2414
cancel-in-progress: true
25-
# END OF COMMON SECTION
26-
2715
jobs:
28-
wait_for_smoke:
29-
name: Wait for smoke
30-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
31-
runs-on: ubuntu-22.04
32-
timeout-minutes: 35
33-
steps:
34-
- uses: actions/checkout@v4
35-
with:
36-
fetch-depth: 1
37-
- uses: ./.github/actions/wait-for-smoke
38-
with:
39-
github-token: ${{ secrets.GITHUB_TOKEN }}
40-
4116
discover_versions:
42-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
4317
uses: ./.github/workflows/_discover-versions.yml
4418

4519
build_wolfprovider:
46-
needs: [wait_for_smoke, discover_versions]
47-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
20+
needs: discover_versions
4821
uses: ./.github/workflows/build-wolfprovider.yml
4922
with:
5023
wolfssl_ref: ${{ matrix.wolfssl_ref }}
@@ -60,7 +33,6 @@ jobs:
6033
replace_default: [ true, false ]
6134

6235
libwolfprov-replace-default:
63-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
6436
name: libwolfprov ${{ matrix.replace_default && 'replace-default' || 'standalone' }} ${{ matrix.fips_ref }}
6537
runs-on: ubuntu-22.04
6638
needs: [build_wolfprovider, discover_versions]

.github/workflows/fips-ready.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,21 @@ concurrency:
2525
# END OF COMMON SECTION
2626

2727
jobs:
28+
wait_for_smoke:
29+
name: Wait for smoke
30+
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
31+
runs-on: ubuntu-22.04
32+
timeout-minutes: 35
33+
steps:
34+
- uses: actions/checkout@v4
35+
with:
36+
fetch-depth: 1
37+
- uses: ./.github/actions/wait-for-smoke
38+
with:
39+
github-token: ${{ secrets.GITHUB_TOKEN }}
40+
2841
fips_ready_test:
42+
needs: wait_for_smoke
2943
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
3044
name: FIPS Ready Bundle Test
3145
runs-on: ubuntu-22.04

.github/workflows/git-ssh-dr.yml

Lines changed: 10 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,23 @@
11
name: Git SSH Default Replace Tests
22

3+
# OSP integration test for Git SSH Default Replace Tests. Runs nightly via the
4+
# Nightly OSP Suite orchestrator (.github/workflows/nightly-osp.yml)
5+
# or manually via workflow_dispatch. NOT triggered on PR/push --
6+
# PR CI focuses on smoke + simple + cheap internal checks.
7+
38
on:
4-
push:
5-
branches: [ 'master', 'main', 'release/**' ]
6-
pull_request:
7-
branches: [ '*' ]
8-
types: [opened, synchronize, reopened, ready_for_review]
9-
paths-ignore:
10-
- '**.md'
11-
- 'docs/**'
12-
- 'LICENSE*'
13-
- '.github/ISSUE_TEMPLATE/**'
14-
- '.github/dependabot.yml'
15-
- '.gitignore'
16-
- 'AUTHORS'
17-
- 'COPYING'
18-
- 'README*'
19-
- 'CHANGELOG*'
9+
workflow_call: {}
10+
workflow_dispatch: {}
2011

2112
concurrency:
2213
group: ${{ github.workflow }}-${{ github.ref }}
2314
cancel-in-progress: true
24-
2515
jobs:
26-
wait_for_smoke:
27-
name: Wait for smoke
28-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
29-
runs-on: ubuntu-22.04
30-
timeout-minutes: 35
31-
steps:
32-
- uses: actions/checkout@v4
33-
with:
34-
fetch-depth: 1
35-
- uses: ./.github/actions/wait-for-smoke
36-
with:
37-
github-token: ${{ secrets.GITHUB_TOKEN }}
38-
3916
discover_versions:
40-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
4117
uses: ./.github/workflows/_discover-versions.yml
4218

4319
build_wolfprovider:
44-
needs: [wait_for_smoke, discover_versions]
45-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
20+
needs: discover_versions
4621
uses: ./.github/workflows/build-wolfprovider.yml
4722
with:
4823
wolfssl_ref: ${{ matrix.wolfssl_ref }}
@@ -58,7 +33,6 @@ jobs:
5833
replace_default: [ true ]
5934

6035
git-ssh-default-replace-test:
61-
if: github.event_name != 'pull_request' || github.event.pull_request.draft == false
6236
runs-on: ubuntu-22.04
6337
container:
6438
image: ghcr.io/${{ github.event.pull_request && github.event.pull_request.head.repo.owner.login || github.repository_owner }}/wolfprovider-test-deps:bookworm
@@ -74,10 +48,8 @@ jobs:
7448
openssl_ref: ${{ fromJson(needs.discover_versions.outputs.openssl_ref_array) }}
7549
fips_ref: [ 'FIPS', 'non-FIPS' ]
7650
replace_default: [ true ]
77-
# PR matrix: 2 of 4 key types and 3 iterations.
78-
# Other key_types and longer soak runs are exercised at release time.
79-
key_type: [ 'rsa', 'ed25519' ]
80-
iterations: [ 3 ]
51+
key_type: [ 'rsa', 'ecdsa', 'ed25519', 'chacha20-poly1305' ]
52+
iterations: [ 10 ] # Total of 80 runs
8153
# force_fail collapsed into sequential runs in the test step
8254
env:
8355
WOLFSSL_PACKAGES_PATH: /tmp/wolfssl-packages

0 commit comments

Comments
 (0)