Skip to content

CI: trim macOS jobs in os-check.yml to a curated subset#11

Open
Frauschi wants to merge 1 commit intomasterfrom
claude/optimize-macos-ci-jobs-i1rMO
Open

CI: trim macOS jobs in os-check.yml to a curated subset#11
Frauschi wants to merge 1 commit intomasterfrom
claude/optimize-macos-ci-jobs-i1rMO

Conversation

@Frauschi
Copy link
Copy Markdown
Owner

Summary

os-check.yml was the largest macOS CI consumer: make_check ran 51 configs on
both ubuntu-24.04 and macos-latest, and make_user_settings /
make_user_all also fanned out to macOS. Most of those macOS runs exercise no
Darwin-specific code (DTLS-feature permutations, SHE, OCSP, sniffer, harden-tls,
client/server-disable variants, cryptocb permutations, ...) and only duplicated
Ubuntu signal on a slow runner.

This PR keeps the full 51-config matrix on Ubuntu and reduces macOS to a curated
set chosen for Darwin-specific signal plus broad key-crypto coverage:

  • '' — default build; --enable-sys-ca-certs is auto-on on macOS, so
    this exercises Apple keychain / system trust loading in src/ssl_load.c with
    no Linux equivalent.
  • --enable-all --enable-asn=template — broad key crypto (RSA, ECC, AES,
    SHA-2/3, ChaCha20-Poly1305, Curve25519/448, HMAC, ...) plus
    Security.framework + opensslextra in a single run.
  • --disable-sys-ca-certs — negative test for the only OS that auto-enables
    the flag.
  • DTLS-CID + DTLS13 + secure-renego + PSK + AES-CCM + null cipher — exercises
    Darwin BSD-socket / recvmsg / MTU handling that genuinely differs from Linux.
  • --enable-cryptocb --enable-keygen --enable-cryptocbutils=setkey
    exercises the crypto-callback dispatcher under Apple clang. Not covered by
    --enable-all.

make_user_settings keeps macOS coverage (the user_settings.h header-driven
build path is genuinely distinct from the autotools --enable-all path).
make_user_all is now plain Linux-only without a redundant single-element
matrix. xcode.yml (Xcode IDE / Apple Silicon arm64 / Universal binaries) and
macos-apple-native-cert-validation.yml (Apple Security.framework cert-chain
validation) are unchanged.

Net effect: macOS runner slots in os-check.yml drop from ~53 per push/PR to 6
(5 in make_check::include + 1 in make_user_settings).

Test plan

  • CI on this branch reports 51 Ubuntu jobs and exactly 5 macOS jobs in make check.
  • make_user_settings runs on both ubuntu-24.04 and macos-latest for user_settings_all.h.
  • make_user_all runs on ubuntu-24.04 only.
  • All 5 macOS make check configs pass: '', --enable-all --enable-asn=template, --disable-sys-ca-certs, the DTLS-CID config, and the cryptocb config.
  • xcode.yml and macos-apple-native-cert-validation.yml workflows unaffected.
  • Wall-clock time of the workflow on a PR is meaningfully shorter than a recent run on master.

Caller note

If branch protection on the upstream wolfSSL repo references specific job names
like make check (macos-latest, --enable-she=...), those required status checks
will need to be updated — they will never report again under the new
matrix.

https://claude.ai/code/session_01HUWvib2kMeHpFFMY5NiiNd


Generated by Claude Code

The make_check job ran 51 configs on both ubuntu-24.04 and macos-latest,
and make_user_settings / make_user_all also fanned out onto macOS. Most
of those macOS runs exercised no Darwin-specific code (DTLS permutations,
SHE, cryptocb permutations, OCSP, sniffer, harden-tls, client/server-
disable variants, ...) and only duplicated Ubuntu signal on a slow
runner.

Restructure the workflow into a symmetric pair, each with its own plain
matrix:

  - make_check_linux (69 configs on ubuntu-24.04): the previous 51
    make_check configs merged with the 18 platform-agnostic configs that
    were in the old make_check_linux job. One job now owns all
    Linux-only coverage.

  - make_check_macos (5 configs on macos-latest): each chosen for a
    Darwin-specific reason or for broad key-crypto coverage:

      * ''  -- default; --enable-sys-ca-certs is auto-on on macOS, so
        this exercises Apple keychain / system trust loading in
        src/ssl_load.c that has no Linux equivalent.

      * --enable-all --enable-asn=template  -- broad key crypto (RSA,
        ECC, AES, SHA-2/3, ChaCha20-Poly1305, Curve25519/448, HMAC,
        sniffer, DTLS, OCSP, ...) plus Security.framework and
        opensslextra in a single run. --enable-all does NOT enable
        cryptocb or SHE, so the cryptocb path has its own entry below.

      * --disable-sys-ca-certs  -- validates the configure-time
        auto-enable override and that Security.framework code paths
        compile out cleanly. macOS is the only OS where sys-ca-certs is
        auto-on by default.

      * --enable-dtls --enable-dtlscid --enable-dtls13
        --enable-secure-renegotiation --enable-psk --enable-aesccm
        --enable-nullcipher CPPFLAGS=-DWOLFSSL_STATIC_RSA  -- DTLS over
        BSD sockets on Darwin: connection-ID, fragmented ClientHello,
        secure renegotiation, PSK, AES-CCM, null cipher; exercises
        recvmsg / MTU / datagram handling that genuinely differs from
        Linux.

      * --enable-cryptocb --enable-keygen --enable-cryptocbutils=setkey
        -- crypto-callback dispatcher under Apple clang; verifies the
        cryptocb find / setkey / keygen path compiles and runs on the
        macOS toolchain.

Other jobs in the file:

  - make_user_settings: kept on both ubuntu-24.04 and macos-latest. The
    user_settings.h header-driven build path is genuinely distinct from
    the autotools --enable-all path in make_check_*; macOS-specific
    guard ordering (e.g. WOLFSSL_SYS_CA_CERTS pulling in
    Security.framework) needs to be exercised under Apple clang here.

  - make_user_all, make_user_settings_testwolfcrypt: dropped the
    dead-weight single-element os: [ ubuntu-24.04 ] matrix axes; use
    plain runs-on: ubuntu-24.04.

Net effect: macOS runner slots in os-check.yml drop from ~53 per
push/PR to 6 (5 in make_check_macos + 1 in make_user_settings).
xcode.yml (Xcode IDE / Apple Silicon arm64 / Universal binary builds)
and macos-apple-native-cert-validation.yml (Apple Security.framework
SecTrustEvaluateWithError chain validation, complementary to and
non-overlapping with sys-ca-certs above) are unchanged and continue to
provide their dedicated, distinct macOS coverage.

Note for upstream: branch protection rules that reference the old job
names ("make check", "make check (Linux only)", or any
"(macos-latest, <config>)" matrix combination) will need updating --
those names no longer exist.
@Frauschi Frauschi force-pushed the claude/optimize-macos-ci-jobs-i1rMO branch from 8e4dcb1 to c10ed58 Compare April 27, 2026 09:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants