mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-07-06 16:00:50 +02:00
dd2f9d3ab8
The 10 GB, LRU-evicted, PR-scoped Actions cache was being thrashed - the
docker simulator buildx layers (~6 GiB), plus per-PR ccache and apt-archive
writes whose keys never hit - which kept evicting the shared ccache, while
the apt mirror timed out often enough to break PR CI. Move the heavy caches
to ghcr (free, separate pool) and make PR runs read-only against the Actions
cache.
apt dependencies from prebuilt ghcr .deb bundles
- ci-deps-image.yml resolves each package list under .github/ci-deps/ into
its .deb closure and publishes ghcr.io/<owner>/wolfssl-ci-debs:<tag> in
two tiers: <ver>-minimal (make-check family) and <ver>-full (interop
superset), for ubuntu-22.04 and 24.04.
- install-apt-deps gains a ghcr-debs-tag input: pull the bundle and install
offline (--no-download) so the apt mirror is never on the PR critical
path. Any failure (bundle missing/not public/incomplete) falls through to
the existing apt path, so it is always safe to set.
sim-test buildx layers to a shared ghcr registry cache
- the 7 docker simulator workflows switch from cache-to: type=gha to
ghcr.io/wolfssl/wolfssl-sim-cache:<scope>. cache-from reads on every run
(anonymous); cache-to writes only on the weekend cron and manual
workflow_dispatch. Per-distinct-image tags and de-duplicated writers keep
parallel matrix jobs from racing on one ref.
ccache: PRs read, the schedule writes
- ccache-setup gains read-only: PR runs restore the shared master-scoped
cache but never upload; schedule/push runs refresh it. Wired across
os-check (linux + macOS), pq-all, smoke-test and the 12 small make-check
workflows.
- parallel-make-check.py gains --build-only (compile every config, skip the
test phase) so weekday-morning seed crons warm the cache PR runs consume.
artifact retention capped at 7 days on the failure-log/result uploads that
previously defaulted to 90.
ONE-TIME SETUP: after their first publish, make the ghcr packages
wolfssl-ci-debs and wolfssl-sim-cache PUBLIC so anonymous pulls work from PR
(including fork) runs; until then everything falls back cleanly.
105 lines
4.5 KiB
YAML
105 lines
4.5 KiB
YAML
name: ATECC608 simulator test
|
|
|
|
# START OF COMMON SECTION
|
|
on:
|
|
push:
|
|
branches: [ 'release/**' ]
|
|
pull_request:
|
|
types: [opened, synchronize, reopened, ready_for_review]
|
|
branches: [ '*' ]
|
|
# Weekend cron and manual workflow_dispatch refresh the shared ghcr build
|
|
# cache that PR runs read (cache-to below is gated to those two events).
|
|
schedule:
|
|
- cron: '0 6 * * 6'
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
# END OF COMMON SECTION
|
|
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
# Build the ATECC608 software simulator (https://github.com/wolfSSL/simulators,
|
|
# ATECC608Sim/ subdirectory), build wolfSSL against cryptoauthlib + the
|
|
# simulator's TCP HAL, and run the wolfCrypt ATECC608 test binary against the
|
|
# simulator.
|
|
#
|
|
# The simulator's own Dockerfile.wolfcrypt clones a pinned wolfSSL release.
|
|
# We patch it to COPY the PR checkout instead so CI reflects the PR's source.
|
|
# We also strip the inline test.c patch RUN block and the older atmel.c config
|
|
# copy hotfix: both now live upstream in this tree, so re-applying them would
|
|
# fail with "patch target not found". The atmel_set_slot_allocator visibility
|
|
# patch remains because the simulator harness still depends on that exported
|
|
# symbol.
|
|
|
|
env:
|
|
SIMULATORS_REF: 773fe70
|
|
|
|
jobs:
|
|
atecc608_sim:
|
|
name: wolfCrypt against ATECC608 simulator
|
|
if: ${{ (github.repository_owner == 'wolfssl') && (github.event_name != 'pull_request' || github.event.pull_request.draft == false) }}
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 30
|
|
steps:
|
|
- name: Checkout wolfSSL (PR source)
|
|
uses: actions/checkout@v5
|
|
with:
|
|
path: wolfssl-src
|
|
|
|
- name: Clone ATECC608 simulator
|
|
run: |
|
|
git clone https://github.com/wolfSSL/simulators simulators
|
|
cd simulators && git checkout "$SIMULATORS_REF"
|
|
|
|
- name: Stage PR wolfSSL into simulator build context
|
|
run: mv wolfssl-src simulators/ATECC608Sim/wolfssl
|
|
|
|
- name: Patch Dockerfile to use PR wolfSSL and drop redundant source patches
|
|
working-directory: simulators/ATECC608Sim
|
|
run: |
|
|
# Replace the (multi-line) `RUN git clone ... wolfssl.git /app/wolfssl`
|
|
# with a COPY of the PR checkout so CI tests the PR's source.
|
|
sed -i '/^RUN git clone --branch v5\.9\.1-stable/,/wolfssl\.git \/app\/wolfssl$/c\
|
|
COPY wolfssl /app/wolfssl' Dockerfile.wolfcrypt
|
|
# Fail fast if the pattern drifted upstream -- better a clear error
|
|
# than a CI run that silently tests a stale release.
|
|
grep -q '^ *COPY wolfssl /app/wolfssl$' Dockerfile.wolfcrypt
|
|
! grep -q 'git clone .*wolfssl\.git' Dockerfile.wolfcrypt
|
|
|
|
sed -i "/^# wolfSSL's wolfCrypt_ATECC_SetConfig only copies I2C-specific fields from$/,/^ grep -q 'XMEMCPY(&cfg_ateccx08a_i2c_pi, cfg' \\/app\\/wolfssl\\/wolfcrypt\\/src\\/port\\/atmel\\/atmel\\.c$/d" Dockerfile.wolfcrypt
|
|
! grep -q "cfg_ateccx08a_i2c_pi" Dockerfile.wolfcrypt
|
|
|
|
# Strip the inline test.c patch RUN block -- those guard fixes now
|
|
# live upstream in this tree.
|
|
sed -i "/^RUN python3 - <<'PY'$/,/^PY$/d" Dockerfile.wolfcrypt
|
|
! grep -q "RUN python3 - <<'PY'" Dockerfile.wolfcrypt
|
|
|
|
# The simulator Dockerfile predates the new configure contract where
|
|
# --with-cryptoauthlib must be paired with --enable-microchip=<dev>.
|
|
sed -i 's/--with-cryptoauthlib=\/usr \\/--enable-microchip=608 \\\n --with-cryptoauthlib=\/usr \\/' Dockerfile.wolfcrypt
|
|
grep -q -- '--enable-microchip=608' Dockerfile.wolfcrypt
|
|
|
|
- uses: docker/setup-buildx-action@v4
|
|
|
|
- name: Log in to ghcr (cache refresh on cron/manual dispatch)
|
|
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
|
|
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin
|
|
|
|
- name: Build wolfCrypt-ATECC608 test image
|
|
uses: docker/build-push-action@v7
|
|
with:
|
|
context: simulators/ATECC608Sim
|
|
file: simulators/ATECC608Sim/Dockerfile.wolfcrypt
|
|
push: false
|
|
load: true
|
|
tags: wolfssl-atecc608-sim:ci
|
|
cache-from: type=registry,ref=ghcr.io/wolfssl/wolfssl-sim-cache:atecc608
|
|
cache-to: ${{ (github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') && 'type=registry,ref=ghcr.io/wolfssl/wolfssl-sim-cache:atecc608,mode=max' || '' }}
|
|
|
|
- name: Run wolfCrypt tests against simulator
|
|
run: docker run --rm wolfssl-atecc608-sim:ci
|