aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-06-26 13:40:21 +0200
committerDanilo M. <danix@danix.xyz>2026-06-26 13:40:21 +0200
commit4529e7b6e577a078dc0405470fe85c97e56fb3f8 (patch)
tree32d02d9e350259a9b2a100b9c961c825e4c070dc
parentd71a10b8a10e04d9a1cd5683034f3f94d4a81a3a (diff)
downloadmkwheels-4529e7b6e577a078dc0405470fe85c97e56fb3f8.tar.gz
mkwheels-4529e7b6e577a078dc0405470fe85c97e56fb3f8.zip
mkwheels: pin version for gh source builds; add --env
GitHub source tarballs have no .git, so dynamic-versioning projects (NetExec uses poetry-dynamic-versioning) fail VCS detection during the wheel build. gh mode now exports POETRY_DYNAMIC_VERSIONING_BYPASS and SETUPTOOLS_SCM_PRETEND_VERSION set to --ver (harmless when unused), and a repeatable --env KEY=VAL passes through any other build env (it also overrides the auto-set vars). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
-rw-r--r--README.md7
-rwxr-xr-xmkwheels17
2 files changed, 22 insertions, 2 deletions
diff --git a/README.md b/README.md
index 530a85c..71d2b10 100644
--- a/README.md
+++ b/README.md
@@ -33,9 +33,16 @@ dependency tree (PyPI deps and any `git+` deps) into wheels.
- `--name PKG` — output name; defaults to the repo basename, lowercased.
- `--tag TAG` — git tag to fetch; a leading `v` is stripped for naming, and the
real ref is resolved by trying `<tag>` then `v<tag>`. Defaults to `--ver`.
+- `--env KEY=VAL` — extra env var for the source build (repeatable).
- Epoch auto-derived from the GitHub release `published_at` (the repo must
publish a GitHub Release for the tag).
+Because the source tarball has no `.git`, projects using dynamic versioning
+would fail VCS detection at build time. `gh` mode therefore sets
+`POETRY_DYNAMIC_VERSIONING_BYPASS` and `SETUPTOOLS_SCM_PRETEND_VERSION` to
+`--ver` automatically (harmless when unused); `--env` overrides them and adds
+anything else the build needs.
+
Outputs `<name>-wheels-<ver>.tar.gz` and `requirements.txt` (pinned + hashed).
Prints the md5sum and the resolved epoch. The `requirements.txt` is an audit
record of the resolved versions, not the install input: the SlackBuild installs
diff --git a/mkwheels b/mkwheels
index 2808462..dfbbba9 100755
--- a/mkwheels
+++ b/mkwheels
@@ -39,6 +39,9 @@ Flags:
Defaults to the normalized --ver.
--epoch N SOURCE_DATE_EPOCH for the tarball mtime. Overrides the
auto-derived value.
+ --env KEY=VAL Extra env var for the gh-mode source build (repeatable).
+ gh mode already sets POETRY_DYNAMIC_VERSIONING_BYPASS and
+ SETUPTOOLS_SCM_PRETEND_VERSION to --ver; --env overrides.
OUTPUT env var: output directory (default: current dir).
@@ -57,7 +60,7 @@ case "$mode" in
*) usage >&2; exit 2 ;;
esac
-name=""; ver=""; repo=""; tag=""; epoch=""
+name=""; ver=""; repo=""; tag=""; epoch=""; env_overrides=()
while [ $# -gt 0 ]; do
case "$1" in
--name) name=${2:-}; shift 2 ;;
@@ -65,6 +68,7 @@ while [ $# -gt 0 ]; do
--repo) repo=${2:-}; shift 2 ;;
--tag) tag=${2:-}; shift 2 ;;
--epoch) epoch=${2:-}; shift 2 ;;
+ --env) env_overrides+=("${2:-}"); shift 2 ;;
-h|--help) usage; exit 0 ;;
*) usage >&2; exit 2 ;;
esac
@@ -145,6 +149,15 @@ else
# wheel` builds the project and all its deps into the wheels dir.
pip_action=wheel
pip_spec="$src_dir"
+
+ # Source tarballs have no .git, so projects using dynamic versioning fail
+ # VCS detection. Pin the version for the two common tools (harmless when
+ # unused). Explicit --env wins (appended last).
+ build_env=(
+ "POETRY_DYNAMIC_VERSIONING_BYPASS=$ver"
+ "SETUPTOOLS_SCM_PRETEND_VERSION=$ver"
+ ${env_overrides[@]+"${env_overrides[@]}"}
+ )
fi
export SOURCE_DATE_EPOCH="$epoch"
@@ -164,7 +177,7 @@ python3 -m venv "$work/venv"
if [ "$pip_action" = download ]; then
"$work/venv/bin/pip" download "$pip_spec" --dest "$wheels"
else
- "$work/venv/bin/pip" wheel "$pip_spec" --wheel-dir "$wheels"
+ env "${build_env[@]}" "$work/venv/bin/pip" wheel "$pip_spec" --wheel-dir "$wheels"
fi
# Emit a pinned, hashed requirements.txt from the downloaded files. Each