From 254e37baecbf0ec3bd6af21e93f82280d772e347 Mon Sep 17 00:00:00 2001 From: Abanoub Doss Date: Wed, 8 Jul 2026 21:16:32 -0500 Subject: [PATCH 1/2] chore: ci warm cache probe --- crates/iceberg/src/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/iceberg/src/lib.rs b/crates/iceberg/src/lib.rs index 4e346460f5..0c84262d1b 100644 --- a/crates/iceberg/src/lib.rs +++ b/crates/iceberg/src/lib.rs @@ -15,6 +15,8 @@ // specific language governing permissions and limitations // under the License. +// CI warm-cache probe: comment-only change to trigger the code-PR workflows. + //! Apache Iceberg Official Native Rust Implementation //! //! # Examples From fdb90c14c117409fd67abc0fdcaf87548ebe5267 Mon Sep 17 00:00:00 2001 From: Abanoub Doss Date: Wed, 8 Jul 2026 21:52:45 -0500 Subject: [PATCH 2/2] ci: drop the vestigial protoc install and rust-cache's environment hash Nothing in the dependency tree runs protoc: prost enters only through datafusion-proto, which ships pregenerated code and has no build script, and the bindings workflow has always built that crate without protoc on all three platforms. The installs only cost time and pinned a dormant action stuck on a deprecated Node runtime. rust-cache's environment hash includes rustc -vV of every installed toolchain, including the image-preinstalled stable that no job uses. Concurrent runner-image builds carry different stables, so the hash flips per runner draw and randomly breaks exact-key restores, which have no prefix fallback. Everything the hash protected is already in the explicit key: job env vars live in the hashed workflow file and the pinned toolchains come from rust-toolchain.toml, which rust-cache hashes on its own. --- .github/workflows/bindings_python_ci.yml | 1 + .github/workflows/ci.yml | 36 ++++++++---------------- .github/workflows/public-api.yml | 6 +--- crates/iceberg/src/lib.rs | 2 -- 4 files changed, 13 insertions(+), 32 deletions(-) diff --git a/.github/workflows/bindings_python_ci.yml b/.github/workflows/bindings_python_ci.yml index 8fd3348241..44936f00af 100644 --- a/.github/workflows/bindings_python_ci.yml +++ b/.github/workflows/bindings_python_ci.yml @@ -101,6 +101,7 @@ jobs: with: key: bindings-python-${{ steps.image.outputs.id }}-${{ hashFiles('.github/workflows/bindings_python_ci.yml', 'bindings/python/pyproject.toml', 'Cargo.toml') }} save-if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + add-rust-environment-hash-key: 'false' # `--profile ci` overrides the size-optimized release profile from # pyproject.toml: PR validation only needs a wheel that builds fast and # runs the test suite; the publish workflows pass their own profile. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8bb07b57ad..b089e53d77 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -95,7 +95,12 @@ jobs: # The runner image and the files defining the build steps go into the # cache key: artifacts depend on both, and a full primary-key hit makes # rust-cache skip saving, so a cache from outdated steps or a different - # image could otherwise never heal itself. + # image could otherwise never heal itself. rust-cache's own environment + # hash is disabled because it includes the image-preinstalled stable + # toolchain, which no job uses and which varies across concurrent image + # builds, randomly breaking restores; everything else it covered is + # already keyed (env vars live in this file, the pinned toolchain in + # rust-toolchain.toml, which rust-cache hashes). - name: Get runner image id id: image shell: bash @@ -106,11 +111,7 @@ jobs: with: key: ${{ steps.image.outputs.id }}-${{ hashFiles('.github/workflows/ci.yml', 'Makefile', 'Cargo.toml') }} save-if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - - - name: Install protoc - uses: arduino/setup-protoc@c65c819552d16ad3c9b72d9dfd5ba5237b9c906b # v3.0.0 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} + add-rust-environment-hash-key: 'false' - name: Cargo clippy run: make check-clippy @@ -146,11 +147,7 @@ jobs: with: key: ${{ steps.image.outputs.id }}-${{ hashFiles('.github/workflows/ci.yml', 'Makefile', 'Cargo.toml') }} save-if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - - - name: Install protoc - uses: arduino/setup-protoc@c65c819552d16ad3c9b72d9dfd5ba5237b9c906b # v3.0.0 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} + add-rust-environment-hash-key: 'false' - name: Check each crate standalone run: | @@ -195,11 +192,7 @@ jobs: with: key: ${{ steps.image.outputs.id }}-${{ hashFiles('.github/workflows/ci.yml', 'Makefile', 'Cargo.toml') }} save-if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - - - name: Install protoc - uses: arduino/setup-protoc@c65c819552d16ad3c9b72d9dfd5ba5237b9c906b # v3.0.0 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} + add-rust-environment-hash-key: 'false' - name: Build without default features run: cargo build --locked -p iceberg --no-default-features @@ -274,11 +267,7 @@ jobs: with: key: ${{ steps.image.outputs.id }}-${{ hashFiles('.github/workflows/ci.yml', 'Makefile', 'Cargo.toml') }} save-if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - - - name: Install protoc - uses: arduino/setup-protoc@c65c819552d16ad3c9b72d9dfd5ba5237b9c906b # v3.0.0 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} + add-rust-environment-hash-key: 'false' - name: Build without default features run: cargo build --locked -p iceberg --no-default-features @@ -294,10 +283,6 @@ jobs: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: persist-credentials: false - - name: Install protoc - uses: arduino/setup-protoc@c65c819552d16ad3c9b72d9dfd5ba5237b9c906b # v3.0.0 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Get MSRV id: get-msrv uses: ./.github/actions/get-msrv @@ -320,5 +305,6 @@ jobs: with: key: msrv-${{ steps.get-msrv.outputs.msrv }}-${{ steps.image.outputs.id }}-${{ hashFiles('.github/workflows/ci.yml', 'Makefile', 'Cargo.toml') }} save-if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} + add-rust-environment-hash-key: 'false' - name: Check MSRV run: make check-msrv diff --git a/.github/workflows/public-api.yml b/.github/workflows/public-api.yml index a3b2ddd6a0..148c7a751d 100644 --- a/.github/workflows/public-api.yml +++ b/.github/workflows/public-api.yml @@ -57,11 +57,7 @@ jobs: with: key: ${{ steps.image.outputs.id }}-${{ hashFiles('.github/workflows/public-api.yml', 'Makefile', 'Cargo.toml') }} save-if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} - - - name: Install protoc - uses: arduino/setup-protoc@c65c819552d16ad3c9b72d9dfd5ba5237b9c906b # v3.0.0 - with: - repo-token: ${{ secrets.GITHUB_TOKEN }} + add-rust-environment-hash-key: 'false' # cargo-public-api has no prebuilt binaries anywhere (no release assets # upstream, unsupported by install-action, absent from quickinstall), so diff --git a/crates/iceberg/src/lib.rs b/crates/iceberg/src/lib.rs index 0c84262d1b..4e346460f5 100644 --- a/crates/iceberg/src/lib.rs +++ b/crates/iceberg/src/lib.rs @@ -15,8 +15,6 @@ // specific language governing permissions and limitations // under the License. -// CI warm-cache probe: comment-only change to trigger the code-PR workflows. - //! Apache Iceberg Official Native Rust Implementation //! //! # Examples