add Shiv-based build for standalone eris executable

- Add 'shiv' to dev dependencies in pyproject.toml
- Add dist/ to .gitignore
- Create packaging/build-shiv script: builds dist/eris zipapp via
  shiv -e eris.__main__:entry_point --compile-pyc --reproducible
- Update uv.lock
This commit is contained in:
Andrew Hamilton 2026-07-30 11:46:58 +10:00
parent 1f72a3cbc7
commit daba0d3eb4
4 changed files with 77 additions and 1 deletions

1
.gitignore vendored
View file

@ -3,3 +3,4 @@ __pycache__/
*.egg-info/
commits.txt
build/
dist/

26
packaging/build-shiv Executable file
View file

@ -0,0 +1,26 @@
#!/bin/bash
set -e
set -x
cd "$(dirname "$0")/.."
mkdir -p dist
REQS=$(mktemp)
uv export --no-dev --no-header --no-emit-project --no-hashes > "$REQS"
uv build --wheel --out-dir dist
WHEEL=$(ls dist/eris-*.whl 2>/dev/null | head -1)
if [ -z "$WHEEL" ]; then
echo "No wheel found in dist/" >&2
exit 1
fi
uv run shiv \
-e "eris.__main__:entry_point" \
-o dist/eris \
--compile-pyc \
--reproducible \
--no-deps \
-r "$REQS" \
"$WHEEL"
rm -f "$REQS" "$WHEEL"

View file

@ -33,6 +33,7 @@ homepage = "https://github.com/ahamilton/eris"
[dependency-groups]
dev = [
"pytest>=9.1.1",
"shiv>=1.0.8",
]
[tool.pytest.ini_options]

50
uv.lock generated
View file

@ -2,6 +2,18 @@ version = 1
revision = 3
requires-python = ">=3.14"
[[package]]
name = "click"
version = "8.4.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32'" },
]
sdist = { url = "https://files.pythonhosted.org/packages/76/d4/81420972a676e8ffea40450d8c8c92943e7218a78fe9b64359836cc9876b/click-8.4.2.tar.gz", hash = "sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6", size = 338000, upload-time = "2026-06-24T17:45:15.148Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/fb/e2/79c688af8b210d232694e31e59da9f6ec747bae31c3f5946e4e9b98860d5/click-8.4.2-py3-none-any.whl", hash = "sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76", size = 119243, upload-time = "2026-06-24T17:45:13.73Z" },
]
[[package]]
name = "colorama"
version = "0.4.6"
@ -43,6 +55,7 @@ dependencies = [
[package.dev-dependencies]
dev = [
{ name = "pytest" },
{ name = "shiv" },
]
[package.metadata]
@ -57,7 +70,10 @@ requires-dist = [
]
[package.metadata.requires-dev]
dev = [{ name = "pytest", specifier = ">=9.1.1" }]
dev = [
{ name = "pytest", specifier = ">=9.1.1" },
{ name = "shiv", specifier = ">=1.0.8" },
]
[[package]]
name = "fill3"
@ -156,6 +172,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/3d/68/1f3066acedf37673694a7141381d8f811ae97f30d34413d236abe7d489f1/pillow-12.3.0-cp315-cp315t-win_arm64.whl", hash = "sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59", size = 2567491, upload-time = "2026-07-01T11:56:23.506Z" },
]
[[package]]
name = "pip"
version = "26.2"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/db/96/e6f8e9d9d7b9cc4457092712a7e919c3186aa2c2fa9ffed2c5d29cc947e8/pip-26.2.tar.gz", hash = "sha256:2d8542afcc84cdd8e846c2b36b2861fad1da376dd98f8e7113e9108a3c331690", size = 1848845, upload-time = "2026-07-29T21:57:56.407Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/62/36/a3aed958d60531cb442b7ab4596cda7b3621cfb916f8ae1d6769795c7dc1/pip-26.2-py3-none-any.whl", hash = "sha256:931c303696af6fa3417112103b1cad26890e5a07eccb5b99783700e33f2b8aad", size = 1816475, upload-time = "2026-07-29T21:57:54.763Z" },
]
[[package]]
name = "pluggy"
version = "1.6.0"
@ -205,6 +230,29 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/24/25/1de2678b631f5a49215c6c96fff41ba892b0a34df68d6d80292b1b48aa7f/pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c", size = 386536, upload-time = "2026-06-19T10:58:31.347Z" },
]
[[package]]
name = "setuptools"
version = "83.0.0"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/34/26/f5d29e25ffdb535afef2d35cdb55b325298f96debd670da4c325e08d70f4/setuptools-83.0.0.tar.gz", hash = "sha256:025bccbbf0fa05b6192bc64ae1e7b16e001fd6d6d4d5de03c97b1c1ade523bef", size = 1154254, upload-time = "2026-07-04T15:31:22.699Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/5d/40/e1e72872c6354b306daef1703549e8e83b4d43cfea356311bf722a043752/setuptools-83.0.0-py3-none-any.whl", hash = "sha256:29b23c360f22f414dc7336bb39178cc7bcbf6021ed2733cde173f09dba19abb3", size = 1008090, upload-time = "2026-07-04T15:31:20.885Z" },
]
[[package]]
name = "shiv"
version = "1.0.8"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "click" },
{ name = "pip" },
{ name = "setuptools" },
]
sdist = { url = "https://files.pythonhosted.org/packages/06/85/004e7123b4821c64be6d9bfed27f63147b4dde929a1cd848f137befeada4/shiv-1.0.8.tar.gz", hash = "sha256:2a68d69e98ce81cb5b8fdafbfc1e27efa93e6d89ca14bfae33482e4176f561d6", size = 32806, upload-time = "2024-11-01T19:47:46.189Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/e7/ec/afbb46f7c1ab071a50d92424daf149420ca1f0e02dc51239485747151d6c/shiv-1.0.8-py2.py3-none-any.whl", hash = "sha256:a60e4b05a2d2f8b820d567b1d89ee59af731759771c32c282d03c4ceae6aba24", size = 20516, upload-time = "2024-11-01T19:47:45.061Z" },
]
[[package]]
name = "termstr"
version = "2026.7.27"