This is an automated email from the ASF dual-hosted git repository.
timsaucer pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-python.git
The following commit(s) were added to refs/heads/main by this push:
new 7b630ee8 Add check for crates.io patches to CI (#1407)
7b630ee8 is described below
commit 7b630ee893d6b81ae7a0f2c35b77dab723567b13
Author: Tim Saucer <[email protected]>
AuthorDate: Wed Mar 4 10:24:32 2026 -0500
Add check for crates.io patches to CI (#1407)
---
.github/workflows/build.yml | 9 +++++++
Cargo.toml | 5 ++++
dev/check_crates_patch.py | 61 +++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 75 insertions(+)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index b86b37c6..455a0dc1 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -98,6 +98,15 @@ jobs:
- name: Check Cargo.toml formatting
run: taplo format --check
+ check-crates-patch:
+ if: inputs.build_mode == 'release'
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v6
+
+ - name: Ensure [patch.crates-io] is empty
+ run: python3 dev/check_crates_patch.py
+
generate-license:
runs-on: ubuntu-latest
steps:
diff --git a/Cargo.toml b/Cargo.toml
index 313640ec..c19ae21f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -91,3 +91,8 @@ crate-type = ["cdylib", "rlib"]
[profile.release]
lto = true
codegen-units = 1
+
+# We cannot publish to crates.io with any patches in the below section.
Developers
+# must remove any entries in this section before creating a release candidate.
+[patch.crates-io]
+# datafusion = { git = "https://github.com/apache/datafusion.git", rev =
"6713439497561fa74a94177e5b8632322fb7cea5" }
diff --git a/dev/check_crates_patch.py b/dev/check_crates_patch.py
new file mode 100644
index 00000000..74e489e1
--- /dev/null
+++ b/dev/check_crates_patch.py
@@ -0,0 +1,61 @@
+#!/usr/bin/env python3
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+"""Check that no Cargo.toml files contain [patch.crates-io] entries.
+
+Release builds must not depend on patched crates. During development it is
+common to temporarily patch crates-io dependencies, but those patches must
+be removed before creating a release.
+
+An empty [patch.crates-io] section is allowed.
+"""
+
+import sys
+from pathlib import Path
+
+import tomllib
+
+
+def main() -> int:
+ errors: list[str] = []
+ for cargo_toml in sorted(Path().rglob("Cargo.toml")):
+ if "target" in cargo_toml.parts:
+ continue
+ with Path.open(cargo_toml, "rb") as f:
+ data = tomllib.load(f)
+ patch = data.get("patch", {}).get("crates-io", {})
+ if patch:
+ errors.append(str(cargo_toml))
+ for name, spec in patch.items():
+ errors.append(f" {name} = {spec}")
+
+ if errors:
+ print("ERROR: Release builds must not contain [patch.crates-io]
entries.")
+ print()
+ for line in errors:
+ print(line)
+ print()
+ print("Remove all [patch.crates-io] entries before creating a
release.")
+ return 1
+
+ print("OK: No [patch.crates-io] entries found.")
+ return 0
+
+
+if __name__ == "__main__":
+ sys.exit(main())
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]