From 26d2fe1891d11c9cadb0ffd55ebe127cbcac7051 Mon Sep 17 00:00:00 2001 From: Anthony Lukach Date: Fri, 25 Sep 2026 08:54:12 -0700 Subject: [PATCH 1/3] ci: keep Cargo.lock in step with releases and gate CI on --locked release-please bumped every workspace crate's version in Cargo.toml but never touched Cargo.lock, so the lockfile went stale on each release (main carried 0.7.1 entries against a 0.7.2 manifest until the next cargo invocation happened to rewrite it). Nothing caught it because CI ran without --locked. The release PR now also rewrites the lock entries: a TOML extra-file whose JSONPath selects every `[[package]]` without a `source`, which is exactly the set of workspace members (registry and VCS dependencies all carry one). The check job runs `cargo check --locked`, so a stale lockfile fails CI instead of silently regenerating. Co-Authored-By: Claude Fable 5.1 --- .github/workflows/ci.yml | 2 +- CONTRIBUTING.md | 2 ++ release-please-config.json | 5 +++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cc5c653..35b0964 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,7 +47,7 @@ jobs: with: toolchain: stable - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 - - run: cargo check + - run: cargo check --locked check-wasm: name: Cargo Check (WASM) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8ab17e3..91208ed 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -24,6 +24,8 @@ cargo test make test-integration ``` +`Cargo.lock` is committed and CI runs `cargo check --locked`, so commit lockfile changes alongside any dependency change. The release PR bumps the workspace members' entries in `Cargo.lock` itself (see `release-please-config.json`), so a release never leaves the lockfile stale. + ## Release Process ### Publishable Crates diff --git a/release-please-config.json b/release-please-config.json index a9275d7..bf0c09b 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -44,6 +44,11 @@ "type": "toml", "path": "Cargo.toml", "jsonpath": "$.workspace.dependencies.multistore-path-mapping.version" + }, + { + "type": "toml", + "path": "Cargo.lock", + "jsonpath": "$.package[?(!@.source)].version" } ] } From abe83336ebf48d9912d354b6f7ae303e60c67565 Mon Sep 17 00:00:00 2001 From: Anthony Lukach Date: Fri, 25 Sep 2026 08:55:15 -0700 Subject: [PATCH 2/3] chore: drive release-please version bumps from inline markers Seven JSONPath entries in release-please-config.json existed only to keep the internal `[workspace.dependencies]` version pins in step with the workspace version. A new crate had to be remembered in that file or its pin would be left behind. Dropping the pins is not an option: cargo (1.92 and stable 1.98 alike) refuses to package a path dependency without a version. Each of the eight lines now ends with `# x-release-please-version`, and the config has a single `generic` entry for Cargo.toml. The marker sits on the line it governs, so a new crate's entry is a copy of its neighbour. Co-Authored-By: Claude Fable 5.1 --- CONTRIBUTING.md | 2 ++ Cargo.toml | 16 +++++++-------- release-please-config.json | 40 ++------------------------------------ 3 files changed, 12 insertions(+), 46 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 91208ed..6ef9bab 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,6 +26,8 @@ make test-integration `Cargo.lock` is committed and CI runs `cargo check --locked`, so commit lockfile changes alongside any dependency change. The release PR bumps the workspace members' entries in `Cargo.lock` itself (see `release-please-config.json`), so a release never leaves the lockfile stale. +When adding a workspace crate, give its `[workspace.dependencies]` entry a `version` pin (cargo requires one to publish a path dependency) and end the line with `# x-release-please-version`, as the existing entries do. That comment is what the release PR keys on; without it the new crate's pin is left behind at the old version. + ## Release Process ### Publishable Crates diff --git a/Cargo.toml b/Cargo.toml index 590dd99..28acf1f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,7 +24,7 @@ default-members = [ resolver = "2" [workspace.package] -version = "0.7.2" +version = "0.7.2" # x-release-please-version edition = "2021" license = "MIT" @@ -105,10 +105,10 @@ console_error_panic_hook = "0.1.7" lambda_http = "0.13" # Internal crates -multistore = { path = "crates/core", version = "0.7.2" } -multistore-static-config = { path = "crates/static-config", version = "0.7.2" } -multistore-sts = { path = "crates/sts", version = "0.7.2" } -multistore-metering = { path = "crates/metering", version = "0.7.2" } -multistore-cf-workers = { path = "crates/cf-workers", version = "0.7.2" } -multistore-oidc-provider = { path = "crates/oidc-provider", version = "0.7.2" } -multistore-path-mapping = { path = "crates/path-mapping", version = "0.7.2" } +multistore = { path = "crates/core", version = "0.7.3" } # x-release-please-version +multistore-static-config = { path = "crates/static-config", version = "0.7.3" } # x-release-please-version +multistore-sts = { path = "crates/sts", version = "0.7.3" } # x-release-please-version +multistore-metering = { path = "crates/metering", version = "0.7.3" } # x-release-please-version +multistore-cf-workers = { path = "crates/cf-workers", version = "0.7.3" } # x-release-please-version +multistore-oidc-provider = { path = "crates/oidc-provider", version = "0.7.3" } # x-release-please-version +multistore-path-mapping = { path = "crates/path-mapping", version = "0.7.3" } # x-release-please-version diff --git a/release-please-config.json b/release-please-config.json index bf0c09b..9fdc3f6 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -6,44 +6,8 @@ "include-component-in-tag": false, "extra-files": [ { - "type": "toml", - "path": "Cargo.toml", - "jsonpath": "$.workspace.package.version" - }, - { - "type": "toml", - "path": "Cargo.toml", - "jsonpath": "$.workspace.dependencies.multistore.version" - }, - { - "type": "toml", - "path": "Cargo.toml", - "jsonpath": "$.workspace.dependencies.multistore-static-config.version" - }, - { - "type": "toml", - "path": "Cargo.toml", - "jsonpath": "$.workspace.dependencies.multistore-sts.version" - }, - { - "type": "toml", - "path": "Cargo.toml", - "jsonpath": "$.workspace.dependencies.multistore-metering.version" - }, - { - "type": "toml", - "path": "Cargo.toml", - "jsonpath": "$.workspace.dependencies.multistore-cf-workers.version" - }, - { - "type": "toml", - "path": "Cargo.toml", - "jsonpath": "$.workspace.dependencies.multistore-oidc-provider.version" - }, - { - "type": "toml", - "path": "Cargo.toml", - "jsonpath": "$.workspace.dependencies.multistore-path-mapping.version" + "type": "generic", + "path": "Cargo.toml" }, { "type": "toml", From 379fee2cff9a816b339c04f78f8c8298a876a758 Mon Sep 17 00:00:00 2001 From: Anthony Lukach Date: Fri, 25 Sep 2026 08:55:44 -0700 Subject: [PATCH 3/3] chore: reset internal version pins left at the simulated 0.7.3 The previous commit's manifest was produced by a local release simulation and seven dependency pins were not reset to 0.7.2, which breaks resolution (path crates are 0.7.2). Squash on merge. Co-Authored-By: Claude Fable 5.1 --- Cargo.toml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 28acf1f..fd98493 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -105,10 +105,10 @@ console_error_panic_hook = "0.1.7" lambda_http = "0.13" # Internal crates -multistore = { path = "crates/core", version = "0.7.3" } # x-release-please-version -multistore-static-config = { path = "crates/static-config", version = "0.7.3" } # x-release-please-version -multistore-sts = { path = "crates/sts", version = "0.7.3" } # x-release-please-version -multistore-metering = { path = "crates/metering", version = "0.7.3" } # x-release-please-version -multistore-cf-workers = { path = "crates/cf-workers", version = "0.7.3" } # x-release-please-version -multistore-oidc-provider = { path = "crates/oidc-provider", version = "0.7.3" } # x-release-please-version -multistore-path-mapping = { path = "crates/path-mapping", version = "0.7.3" } # x-release-please-version +multistore = { path = "crates/core", version = "0.7.2" } # x-release-please-version +multistore-static-config = { path = "crates/static-config", version = "0.7.2" } # x-release-please-version +multistore-sts = { path = "crates/sts", version = "0.7.2" } # x-release-please-version +multistore-metering = { path = "crates/metering", version = "0.7.2" } # x-release-please-version +multistore-cf-workers = { path = "crates/cf-workers", version = "0.7.2" } # x-release-please-version +multistore-oidc-provider = { path = "crates/oidc-provider", version = "0.7.2" } # x-release-please-version +multistore-path-mapping = { path = "crates/path-mapping", version = "0.7.2" } # x-release-please-version