You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datafusion.apache.org by gi...@apache.org on 2026/09/17 15:24:25 UTC
(datafusion) 01/01: dev: include dependency checks in the local lint suite (#25399)
This is an automated email from the ASF dual-hosted git repository.
github-merge-queue[bot] pushed a commit to branch gh-readonly-queue/main/pr-25399-c4f72bad34249798182ac7de605eb63ab134f26e
in repository https://gitbox.apache.org/repos/asf/datafusion.git
commit b752f4722bffd008b5eda8de35623de0f4d25641
Author: Kumar Ujjawal <uj...@gmail.com>
AuthorDate: Thu Sep 17 15:23:59 2026 +0000
dev: include dependency checks in the local lint suite (#25399)
## Which issue does this PR close?
- Part of #21048.
## Rationale for this change
`dev/rust_lint.sh` does not run the two dependency checks from the
"Dependencies" workflow. A contributor finds a dependency cycle or an
unused dependency only in CI.
## What changes are included in this PR?
- `ci/scripts/check_circular_dependencies.sh` runs `cargo run --locked`
in `dev/depcheck`.
- `ci/scripts/check_unused_dependencies.sh` runs `cargo machete
--with-metadata` from the repository root.
- The workflow calls both scripts. `CARGO_MACHETE_VERSION="0.9"` moves
to `ci/scripts/utils/tool_versions.sh`, and the workflow loads it from
there.
- `dev/rust_lint.sh` installs a missing `cargo-machete` and runs both
scripts as read-only steps.
- `docs/source/contributor-guide/testing.md` documents the standalone
commands.
## What is the testing strategy for this PR?
- In a clean clone, each original command and its wrapper gave identical
output with exit 0, and no lockfile changed.
- A fixture with stubbed steps and tools covered the working
directories, exit codes, install path, and fail-fast behavior.
- The parsed workflow YAML matches `main` except the changed steps. The
full `./dev/rust_lint.sh` passes.
## Are there any user-facing changes?
No.
---
.github/workflows/dependencies.yml | 12 ++++++-----
..._versions.sh => check_circular_dependencies.sh} | 18 +++++++++++++----
...ol_versions.sh => check_unused_dependencies.sh} | 23 ++++++++++++++++++----
ci/scripts/utils/tool_versions.sh | 1 +
dev/rust_lint.sh | 3 +++
docs/source/contributor-guide/testing.md | 20 +++++++++++++++++++
6 files changed, 64 insertions(+), 13 deletions(-)
diff --git a/.github/workflows/dependencies.yml b/.github/workflows/dependencies.yml
index 6cab01c2a5..4d6549d941 100644
--- a/.github/workflows/dependencies.yml
+++ b/.github/workflows/dependencies.yml
@@ -51,9 +51,7 @@ jobs:
with:
rust-version: stable
- name: Check dependencies
- working-directory: dev/depcheck
- run: |
- cargo run --locked
+ run: bash ci/scripts/check_circular_dependencies.sh
detect-unused-dependencies:
name: Detect Unused Dependencies
@@ -62,9 +60,13 @@ jobs:
image: amd64/rust
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
+ - name: Load tool versions
+ run: |
+ . ci/scripts/utils/tool_versions.sh
+ echo "CARGO_MACHETE_VERSION=${CARGO_MACHETE_VERSION}" >> "$GITHUB_ENV"
- name: Install cargo-machete
uses: taiki-e/install-action@3f74d7c16a4242f1c95561e98edc25d36adb4375 # v2.87.12
with:
- tool: cargo-machete@0.9
+ tool: cargo-machete@${{ env.CARGO_MACHETE_VERSION }}
- name: Detect unused dependencies
- run: cargo machete --with-metadata
+ run: bash ci/scripts/check_unused_dependencies.sh
diff --git a/ci/scripts/utils/tool_versions.sh b/ci/scripts/check_circular_dependencies.sh
old mode 100644
new mode 100755
similarity index 59%
copy from ci/scripts/utils/tool_versions.sh
copy to ci/scripts/check_circular_dependencies.sh
index 237b18b62e..7cdc97b0d6
--- a/ci/scripts/utils/tool_versions.sh
+++ b/ci/scripts/check_circular_dependencies.sh
@@ -17,8 +17,18 @@
# specific language governing permissions and limitations
# under the License.
-# This file defines centralized tool versions used by CI and development scripts.
-# It is intended to be sourced by other scripts and should not be executed directly.
+# Checks for circular dependencies between DataFusion crates with
+# `dev/depcheck`, the same way the "Circular Dependency Check" job does.
-PRETTIER_VERSION="2.7.1"
-LYCHEE_VERSION="0.23.0"
+set -euo pipefail
+
+SCRIPT_NAME="$(basename "${BASH_SOURCE[0]}")"
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+ROOT_DIR="$(cd "${SCRIPT_DIR}/../.." && pwd)"
+
+# depcheck is outside the root workspace and finds the root manifest from its
+# own directory, so run Cargo from there.
+cd "${ROOT_DIR}/dev/depcheck"
+
+echo "[${SCRIPT_NAME}] \`cargo run --locked\` in dev/depcheck"
+cargo run --locked
diff --git a/ci/scripts/utils/tool_versions.sh b/ci/scripts/check_unused_dependencies.sh
old mode 100644
new mode 100755
similarity index 55%
copy from ci/scripts/utils/tool_versions.sh
copy to ci/scripts/check_unused_dependencies.sh
index 237b18b62e..0221d50dfd
--- a/ci/scripts/utils/tool_versions.sh
+++ b/ci/scripts/check_unused_dependencies.sh
@@ -17,8 +17,23 @@
# specific language governing permissions and limitations
# under the License.
-# This file defines centralized tool versions used by CI and development scripts.
-# It is intended to be sourced by other scripts and should not be executed directly.
+# Detects unused dependencies with `cargo machete`, the same way the
+# "Detect Unused Dependencies" job does.
-PRETTIER_VERSION="2.7.1"
-LYCHEE_VERSION="0.23.0"
+set -euo pipefail
+
+SCRIPT_NAME="$(basename "${BASH_SOURCE[0]}")"
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+ROOT_DIR="$(cd "${SCRIPT_DIR}/../.." && pwd)"
+
+source "${SCRIPT_DIR}/utils/tool_versions.sh"
+
+if ! command -v cargo-machete &> /dev/null; then
+ echo "[${SCRIPT_NAME}] cargo-machete is required. Install it with: cargo install cargo-machete --locked --version ^${CARGO_MACHETE_VERSION}" >&2
+ exit 1
+fi
+
+cd "${ROOT_DIR}"
+
+echo "[${SCRIPT_NAME}] \`cargo machete --with-metadata\`"
+cargo machete --with-metadata
diff --git a/ci/scripts/utils/tool_versions.sh b/ci/scripts/utils/tool_versions.sh
index 237b18b62e..b0a514edd0 100644
--- a/ci/scripts/utils/tool_versions.sh
+++ b/ci/scripts/utils/tool_versions.sh
@@ -22,3 +22,4 @@
PRETTIER_VERSION="2.7.1"
LYCHEE_VERSION="0.23.0"
+CARGO_MACHETE_VERSION="0.9"
diff --git a/dev/rust_lint.sh b/dev/rust_lint.sh
index 5862302d25..7e17dea9db 100755
--- a/dev/rust_lint.sh
+++ b/dev/rust_lint.sh
@@ -113,6 +113,7 @@ ensure_tool "hawkeye" "cargo install hawkeye --locked"
ensure_tool "typos" "cargo install typos-cli --locked"
ensure_tool "lychee" "cargo install lychee --locked --version ${LYCHEE_VERSION}"
ensure_tool "cargo-audit" "cargo install cargo-audit --locked"
+ensure_tool "cargo-machete" "cargo install cargo-machete --locked --version ^${CARGO_MACHETE_VERSION}"
run_step() {
local name="$1"
@@ -135,6 +136,8 @@ declare -a READONLY_STEPS=(
"ci/scripts/check_asf_yaml_status_checks.py|false"
"ci/scripts/markdown_link_check.sh|false"
"ci/scripts/security_audit.sh|false"
+ "ci/scripts/check_circular_dependencies.sh|false"
+ "ci/scripts/check_unused_dependencies.sh|false"
"ci/scripts/rust_docs.sh|false"
)
diff --git a/docs/source/contributor-guide/testing.md b/docs/source/contributor-guide/testing.md
index e50e0942d0..a4332352fa 100644
--- a/docs/source/contributor-guide/testing.md
+++ b/docs/source/contributor-guide/testing.md
@@ -254,6 +254,26 @@ The audit fetches the RustSec advisory database. A new advisory or a different
[cargo-audit]: https://github.com/rustsec/rustsec/blob/main/cargo-audit/README.md
+## Dependency Checks
+
+CI runs two dependency checks, and `./dev/rust_lint.sh` runs both:
+
+- `ci/scripts/check_circular_dependencies.sh` builds and runs [`dev/depcheck`],
+ which fails on dependency cycles between DataFusion crates.
+- `ci/scripts/check_unused_dependencies.sh` runs `cargo machete --with-metadata`
+ from the repository root. The lint suite installs [cargo-machete] with the
+ version in `ci/scripts/utils/tool_versions.sh` if it is missing.
+
+To run either check on its own:
+
+```shell
+./ci/scripts/check_circular_dependencies.sh
+./ci/scripts/check_unused_dependencies.sh
+```
+
+[`dev/depcheck`]: https://github.com/apache/datafusion/tree/main/dev/depcheck
+[cargo-machete]: https://github.com/bnjbvr/cargo-machete
+
## Benchmarks
### Criterion Benchmarks
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datafusion.apache.org
For additional commands, e-mail: commits-help@datafusion.apache.org