Skip to content

ci: fix edge-gate over-publish and retry license check#3468

Merged
hubcio merged 2 commits into
masterfrom
ci/edge-gate-empty-mode-and-license-retry
Jun 15, 2026
Merged

ci: fix edge-gate over-publish and retry license check#3468
hubcio merged 2 commits into
masterfrom
ci/edge-gate-empty-mode-and-license-retry

Conversation

@hubcio

@hubcio hubcio commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

The DockerHub :edge refresh gate treated cargo-rail's empty
scope mode (no Rust crate impact) the same as workspace,
refreshing every image on any docs/SDK/node-only push. An
esbuild bump under examples/node thus triggered a full publish,
whose third-party-license release gate then died on a transient
crates.io reset.

cargo-rail reports three modes, not two: crates (a subset),
empty (no build/test/bench surface, so zero crates ship new
code), and workspace (all crates). empty must not refresh
all images, but it also is not "publish nothing": non-crate
build inputs (the embedded web UI, Dockerfiles) are still gated
per image via gate.paths. So route empty through the existing
per-image path gate with an empty crate set; only workspace
and unparsable modes fall open to all images. A web-only push
now refreshes just rust-server and web-ui, not all five.

Separately, the license validation shells cargo about ->
cargo metadata, which hits the crates.io index and can reset
mid-download past cargo's own net retries. Retry that invocation
up to three times with backoff so a flake never reddens the gate.

The DockerHub :edge refresh gate treated cargo-rail's `empty`
scope mode (no Rust crate impact) the same as `workspace`,
refreshing every image on any docs/SDK/node-only push. An
esbuild bump under examples/node thus triggered a full publish,
whose third-party-license release gate then died on a transient
crates.io reset.

cargo-rail reports three modes, not two: `crates` (a subset),
`empty` (no build/test/bench surface, so zero crates ship new
code), and `workspace` (all crates). `empty` must not refresh
all images, but it also is not "publish nothing": non-crate
build inputs (the embedded web UI, Dockerfiles) are still gated
per image via gate.paths. So route `empty` through the existing
per-image path gate with an empty crate set; only `workspace`
and unparsable modes fall open to all images. A web-only push
now refreshes just rust-server and web-ui, not all five.

Separately, the license validation shells `cargo about` ->
`cargo metadata`, which hits the crates.io index and can reset
mid-download past cargo's own net retries. Retry that invocation
up to three times with backoff so a flake never reddens the gate.
@github-actions github-actions Bot added the S-waiting-on-review PR is waiting on a reviewer label Jun 13, 2026
@hubcio hubcio merged commit fab50a8 into master Jun 15, 2026
31 checks passed
@hubcio hubcio deleted the ci/edge-gate-empty-mode-and-license-retry branch June 15, 2026 09:33
@github-actions github-actions Bot removed the S-waiting-on-review PR is waiting on a reviewer label Jun 15, 2026
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.

3 participants