From daba0d3eb48acf28e83f6b6c141379d282a171ab Mon Sep 17 00:00:00 2001 From: Andrew Hamilton Date: Thu, 30 Jul 2026 11:46:58 +1000 Subject: [PATCH] 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 --- .gitignore | 1 + packaging/build-shiv | 26 +++++++++++++++++++++++ pyproject.toml | 1 + uv.lock | 50 +++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100755 packaging/build-shiv diff --git a/.gitignore b/.gitignore index 2962de1..3f94feb 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ __pycache__/ *.egg-info/ commits.txt build/ +dist/ diff --git a/packaging/build-shiv b/packaging/build-shiv new file mode 100755 index 0000000..82cde4a --- /dev/null +++ b/packaging/build-shiv @@ -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" diff --git a/pyproject.toml b/pyproject.toml index 17f8d0d..07e6fcb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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] diff --git a/uv.lock b/uv.lock index a18ef0c..23c7d86 100644 --- a/uv.lock +++ b/uv.lock @@ -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"