diff --git a/repack.sh b/repack.sh new file mode 100755 index 00000000..99527159 --- /dev/null +++ b/repack.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +set -e -x + +# +# Remove 'extra_requires' from the wheel +# +# The 'extras' are only useful with the full source distribution. +# + +WORK="$(mktemp -d -t fm-twine-repack-XXXXXX)" +wheel unpack -d "$WORK" dist/*.whl +grep -Ev "^(Provides-Extra: .*|Requires-Dist: .*;.* extra == .*)$" "$WORK"/*/*.dist-info/METADATA > "$WORK"/METADATA.new +mv "$WORK"/METADATA.new "$WORK"/*/*.dist-info/METADATA +wheel pack -d dist "$WORK"/* +rm -rf "$WORK" + +# +# Remove `@git+` requires from the source +# +# PyPI is now rejecting these. +# + +WORK="$(mktemp -d -t fm-twine-repack-XXXXXX)" +TAR="$(ls dist/*.tar.*)" +tar -C "$WORK" -xvaf "$TAR" +sed -Ei 's/^(Requires-Dist:\s*[A-Za-z0-9][A-Za-z0-9._-]*)\s*@\s*([^ ]+)(.*)$/\1\3/' "$WORK"/*/PKG-INFO +FN="$(ls "$WORK")" +rm "$TAR" +tar -C "$WORK" -cvaf "$TAR" "$FN" +rm -rf "$WORK" diff --git a/tox.ini b/tox.ini index ac721932..4b180a78 100644 --- a/tox.ini +++ b/tox.ini @@ -55,12 +55,16 @@ deps = usedevelop = true [testenv:pypi] +allowlist_externals = + bash commands = python -m build + bash repack.sh twine upload --skip-existing dist/* deps = build twine + wheel skip_install = true [flake8]