From 724208870415775d71e9e834a50537ec2de3803d Mon Sep 17 00:00:00 2001 From: Code and Solder Date: Fri, 28 Aug 2026 13:22:33 +0200 Subject: [PATCH 1/4] Update CI documentation for GitHub Actions --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 2034179..b00d71d 100644 --- a/README.md +++ b/README.md @@ -236,17 +236,17 @@ skipping the coverage CI claims to provide. ## CI -`.woodpecker.yml` checks workspace/feature matrices, Clippy, formatting, -`cargo-audit`, Leptos production builds, the explicit Stylance bundle, Docker -images, and browser E2E. The E2E job installs Chromium and Docker-backed jobs are -wired to Docker-in-Docker. - -The pipeline also checks the `live-search` `otel` feature. Keep CI feature -coverage in sync whenever optional features are added or removed. - -One reproducibility caveat: `cargo install --locked` locks dependencies of the -tool version selected at install time; it does not itself pin that top-level tool -version. Pin CI tool versions if long-term reproducibility is important. +`.github/workflows/ci.yml` is the executable CI reference. It runs on pull +requests and pushes to `main` and covers lockfile consistency, Rust and Leptos +formatting, native Clippy feature combinations, WASM hydration checks, workspace +library tests, `cargo audit`, production Leptos builds, all three Docker images, +and real Chromium-backed E2E tests. + +The workflow pins Rust 1.94 and the helper tool versions it installs. Expensive +Rust jobs reuse compiler state through `actions/cache`, while Docker builds use +per-image BuildKit GitHub Actions layer caches. Keep CI feature coverage and cache +keys in sync whenever supported features, the Rust toolchain, or build tooling +change. ## Canonical development notes @@ -261,6 +261,6 @@ important code entry points are: - `gateway/src/settings.rs` - `e2e-tests/src/common/live_search_env.rs` - `e2e-tests/tests/live_search_test.rs` -- `.woodpecker.yml` +- `.github/workflows/ci.yml` If documentation and implementation diverge, fix both in the same change. From 3853342dbacbfa9cb10de67921d838d3ffaaca45 Mon Sep 17 00:00:00 2001 From: Code and Solder Date: Fri, 28 Aug 2026 13:23:15 +0200 Subject: [PATCH 2/4] Update canonical CI guidance --- SKILL.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/SKILL.md b/SKILL.md index 619f82b..9dd62a6 100644 --- a/SKILL.md +++ b/SKILL.md @@ -20,7 +20,7 @@ fix this document in the same change. | `crates/domain/` | framework-free domain types and invariants | | `e2e-tests/` | testcontainers HTTP integration and chromiumoxide browser E2E | | `migrations/` | the single SQLx migration history for the shared database | -| `.woodpecker.yml` | format/check/clippy/build/Docker/browser CI | +| `.github/workflows/ci.yml` | format/check/clippy/build/Docker/browser CI | The workspace pins Rust 1.94 as its supported toolchain/MSRV. Newer stable Rust versions do not by themselves justify raising that floor. @@ -46,7 +46,7 @@ cargo test --release --locked -p e2e-tests --tests \ --features browser-tests -- --test-threads=1 --nocapture ``` -The Woodpecker pipeline is the executable reference for CI prerequisites. +The GitHub Actions workflow is the executable reference for CI prerequisites. ## Critical rules @@ -373,7 +373,7 @@ docker compose --profile dev up --build \ ## CI expectations -The pipeline should cover: +The maintained GitHub Actions workflow should cover: - workspace check and clippy, - SSR and hydration feature matrices, @@ -384,9 +384,9 @@ The pipeline should cover: - all Dockerfile builds using a Docker daemon, - browser E2E with an installed Chromium binary. -`--locked` protects the committed dependency graph; `cargo install --locked` -alone does **not** pin the top-level tool version selected from crates.io. Pin -CI tool versions when reproducibility across time matters. +`--locked` protects the committed dependency graph. CI-installed helper tools +must also pin their top-level versions so a crates.io release cannot silently +change the workflow's toolchain or MSRV requirements. ## References @@ -402,4 +402,4 @@ Particularly useful entry points: - `gateway/src/settings.rs` - `e2e-tests/src/common/live_search_env.rs` - `e2e-tests/tests/live_search_test.rs` -- `.woodpecker.yml` +- `.github/workflows/ci.yml` From 728ea462f5f9044994a0230a159f21053cab3743 Mon Sep 17 00:00:00 2001 From: Code and Solder Date: Fri, 28 Aug 2026 13:23:33 +0200 Subject: [PATCH 3/4] Remove obsolete Woodpecker CI --- .woodpecker.yml | 117 ------------------------------------------------ 1 file changed, 117 deletions(-) delete mode 100644 .woodpecker.yml diff --git a/.woodpecker.yml b/.woodpecker.yml deleted file mode 100644 index f31ce76..0000000 --- a/.woodpecker.yml +++ /dev/null @@ -1,117 +0,0 @@ -when: - - event: push - - event: pull_request - -steps: - check-workspace: - image: rust:1.94-bookworm@sha256:6ae102bdbf528294bc79ad6e1fae682f6f7c2a6e6621506ba959f9685b308a55 - commands: - - cargo check --workspace --all-targets - - cargo check -p live-search --features ssr --all-targets - - cargo check -p live-search --features ssr,otel --all-targets - - rustup target add wasm32-unknown-unknown - - cargo check -p live-search --target wasm32-unknown-unknown --features hydrate --lib - - cargo check -p i18n-demo --features ssr --all-targets - - cargo check -p i18n-demo --target wasm32-unknown-unknown --features hydrate --lib - depends_on: [] - - unit-tests: - image: rust:1.94-bookworm@sha256:6ae102bdbf528294bc79ad6e1fae682f6f7c2a6e6621506ba959f9685b308a55 - commands: - - cargo install cargo-nextest --locked - - cargo nextest run --workspace --lib -E 'not test(/e2e/)' - depends_on: [] - - clippy: - image: rust:1.94-bookworm@sha256:6ae102bdbf528294bc79ad6e1fae682f6f7c2a6e6621506ba959f9685b308a55 - commands: - - cargo clippy --workspace --all-targets -- -D warnings - - cargo clippy -p live-search --features ssr --all-targets -- -D warnings - - cargo clippy -p live-search --features ssr,otel --all-targets -- -D warnings - - cargo clippy -p i18n-demo --features ssr --all-targets -- -D warnings - depends_on: [] - - fmt: - image: rust:1.94-bookworm@sha256:6ae102bdbf528294bc79ad6e1fae682f6f7c2a6e6621506ba959f9685b308a55 - commands: - - cargo fmt --all -- --check - depends_on: [] - - audit: - image: rust:1.94-bookworm@sha256:6ae102bdbf528294bc79ad6e1fae682f6f7c2a6e6621506ba959f9685b308a55 - commands: - - cargo install cargo-audit --locked - - cargo audit --deny warnings - depends_on: - - fmt - - leptosfmt: - image: rust:1.94-bookworm@sha256:6ae102bdbf528294bc79ad6e1fae682f6f7c2a6e6621506ba959f9685b308a55 - commands: - - cargo install leptosfmt --locked - - find live-search i18n-demo -name '*.rs' | while read f; do leptosfmt --rustfmt --stdin --quiet < "$f" > "$f.tmp" && mv "$f.tmp" "$f"; done - - cargo fmt --all -- --check - depends_on: - - fmt - - leptos-build: - image: rust:1.94-bookworm@sha256:6ae102bdbf528294bc79ad6e1fae682f6f7c2a6e6621506ba959f9685b308a55 - commands: - - rustup target add wasm32-unknown-unknown - - cargo install cargo-leptos --locked - - cargo install stylance-cli --locked - - cargo leptos build --release -p live-search - - mkdir -p live-search/target/site/pkg - - stylance live-search --output-file live-search/target/site/pkg/live-search.css - - test -s live-search/target/site/pkg/live-search.css - - cargo leptos build --release -p i18n-demo - depends_on: - - clippy - - docker-build: - image: docker:27-cli - services: - docker: - image: docker:27-dind - privileged: true - environment: - DOCKER_TLS_CERTDIR: "" - environment: - DOCKER_HOST: tcp://docker:2375 - DOCKER_TLS_CERTDIR: "" - DOCKER_BUILDKIT: "1" - commands: - - until docker info >/dev/null 2>&1; do sleep 1; done - - docker build -f live-search.Dockerfile -t rwf-live-search:test . - - docker build -f i18n-demo.Dockerfile -t rwf-i18n-demo:test . - - docker build -f gateway.Dockerfile -t rwf-gateway:test . - depends_on: - - clippy - - e2e-tests: - image: rust:1.94-bookworm@sha256:6ae102bdbf528294bc79ad6e1fae682f6f7c2a6e6621506ba959f9685b308a55 - services: - docker: - image: docker:27-dind - privileged: true - environment: - DOCKER_TLS_CERTDIR: "" - environment: - DOCKER_HOST: tcp://docker:2375 - DOCKER_TLS_CERTDIR: "" - CHROME_PATH: /usr/bin/chromium - LIVE_SEARCH_PKG_DIR: live-search/target/site/pkg - commands: - - apt-get update - - apt-get install -y --no-install-recommends chromium ca-certificates - - rm -rf /var/lib/apt/lists/* - - chromium --version - - test -s "$LIVE_SEARCH_PKG_DIR/live_search.js" - - test -s "$LIVE_SEARCH_PKG_DIR/live-search.css" - - cargo test --release --locked -p e2e-tests --tests --features browser-tests -- --test-threads=1 --nocapture - depends_on: - - fmt - - audit - - clippy - - unit-tests - - leptos-build From 2ce80a4d03ba0ae52336e4d4c938ba191ba35606 Mon Sep 17 00:00:00 2001 From: Code and Solder Date: Fri, 28 Aug 2026 13:25:33 +0200 Subject: [PATCH 4/4] Align CI expectations with optimized workflow --- SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SKILL.md b/SKILL.md index 9dd62a6..9559454 100644 --- a/SKILL.md +++ b/SKILL.md @@ -375,7 +375,7 @@ docker compose --profile dev up --build \ The maintained GitHub Actions workflow should cover: -- workspace check and clippy, +- native workspace/all-target Clippy plus supported native feature combinations, - SSR and hydration feature matrices, - the `otel` feature compilation, - Rust formatting and Leptos view formatting,