The rename pass vendored a patched sieve-rs and pointed Cargo.toml's [patch.crates-io] at vendor/sieve-rs, but .dockerignore re-includes a short allowlist that did not have vendor on it. The image build therefore had no such directory and stopped at "failed to load source for dependency sieve-rs".
CI cannot see that class of problem: it builds from a checkout, and only the image build has a context to prune. So this also adds tools/fork/context-check.py, which asserts that every path a [patch] section names exists and survives .dockerignore.
The rename pass vendored a patched sieve-rs and pointed Cargo.toml's [patch.crates-io] at vendor/sieve-rs, but .dockerignore re-includes a short allowlist that did not have vendor on it. The image build therefore had no such directory and stopped at "failed to load source for dependency sieve-rs".
CI cannot see that class of problem: it builds from a checkout, and only the image build has a context to prune. So this also adds tools/fork/context-check.py, which asserts that every path a [patch] section names exists and survives .dockerignore.
The rename pass vendored a patched sieve-rs and pointed Cargo.toml's
[patch.crates-io] at vendor/sieve-rs. .dockerignore ignores everything and
re-includes a short list that did not have vendor on it, so the image build
had no such directory and stopped at
failed to load source for dependency `sieve-rs`
failed to read /build/vendor/sieve-rs/Cargo.toml
CI could not have caught that: it builds from a checkout, where the
directory is simply there, and only the image build has a context to prune.
The first that was known about it was a tag that had already been pushed.
So: vendor is re-included, and tools/fork/context-check.py now asserts the
thing that was quietly assumed -- every path a [patch] section names exists
and survives .dockerignore. It runs beside the other fork checks and takes
no toolchain.
Also, the comments in .dockerignore started with // , which Docker does not
read as a comment: they were patterns that happened to match nothing. They
are # now.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The rename pass vendored a patched sieve-rs and pointed Cargo.toml's [patch.crates-io] at vendor/sieve-rs, but .dockerignore re-includes a short allowlist that did not have vendor on it. The image build therefore had no such directory and stopped at "failed to load source for dependency sieve-rs".
CI cannot see that class of problem: it builds from a checkout, and only the image build has a context to prune. So this also adds tools/fork/context-check.py, which asserts that every path a [patch] section names exists and survives .dockerignore.
The rename pass vendored a patched sieve-rs and pointed Cargo.toml's [patch.crates-io] at vendor/sieve-rs. .dockerignore ignores everything and re-includes a short list that did not have vendor on it, so the image build had no such directory and stopped at failed to load source for dependency `sieve-rs` failed to read /build/vendor/sieve-rs/Cargo.toml CI could not have caught that: it builds from a checkout, where the directory is simply there, and only the image build has a context to prune. The first that was known about it was a tag that had already been pushed. So: vendor is re-included, and tools/fork/context-check.py now asserts the thing that was quietly assumed -- every path a [patch] section names exists and survives .dockerignore. It runs beside the other fork checks and takes no toolchain. Also, the comments in .dockerignore started with // , which Docker does not read as a comment: they were patterns that happened to match nothing. They are # now.