diff options
| author | Danilo M. <danix@danix.xyz> | 2026-06-26 12:05:33 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-06-26 12:05:33 +0200 |
| commit | 93146b062aafef7400e1c4aee46af6670fa25df4 (patch) | |
| tree | f4edc1ba9e275ea00aa29dab3a0bb28218d0eee8 | |
| parent | e583114ac4e84312e06427041f45b7d982097dd6 (diff) | |
| download | mkwheels-93146b062aafef7400e1c4aee46af6670fa25df4.tar.gz mkwheels-93146b062aafef7400e1c4aee46af6670fa25df4.zip | |
mkwheels: resolve SOURCE_DATE_EPOCH from PyPI upload time
| -rwxr-xr-x | mkwheels | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -55,3 +55,22 @@ python3 -m pip --version >/dev/null 2>&1 || { } echo "mkwheels: $pkg $ver -> $OUTPUT/$pkg-wheels-$ver.tar.gz" + +# Resolve SOURCE_DATE_EPOCH. Explicit arg wins; otherwise derive it from the +# earliest file upload time of this version on PyPI (a real, reproducible, +# release-tied timestamp). +if [ -z "$epoch" ]; then + meta=$(curl -fsSL "https://pypi.org/pypi/$pkg/$ver/json") || { + echo "error: cannot fetch PyPI metadata for $pkg $ver" >&2 + exit 1 + } + iso=$(printf '%s' "$meta" \ + | jq -r '[.urls[].upload_time_iso_8601] | sort | .[0] // empty') + [ -n "$iso" ] || { + echo "error: no upload time found for $pkg $ver on PyPI" >&2 + exit 1 + } + epoch=$(date -u -d "$iso" +%s) + echo "warning: epoch not given; using PyPI upload time $iso (epoch $epoch)" >&2 +fi +export SOURCE_DATE_EPOCH="$epoch" |
