release: verify_index_release.sh and 0.2.3 changelog

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
golem
2026-10-05 21:35:52 -06:00
co-authored by Claude Opus 5.5
parent 871dd45e57
commit d0e78f53fc
3 changed files with 45 additions and 3 deletions
+16 -1
View File
@@ -1,6 +1,21 @@
# Changelog
## [0.2.2] (2020-07-19)
## [0.2.3]
Hotfix. In 0.2.2, `import app_skellington` raised
`ImportError: cannot import name 'NoCommandSpecified' from partially initialized module`
(a circular import) for every install.
* Fix the circular import between `cli` and `app_container`. The framework
exceptions now live in `_util`, and the public names are unchanged.
* Tested on Linux, CPython 3.8–3.14 (Gitea CI). Each version builds the wheel
and sdist, installs them and smoke-tests the import.
* Tooling: ruff replaces black/isort/flake8; uv with a committed lockfile.
* Metadata: license classifier corrected to MIT-0; Python version classifiers
added; "OS Independent" replaced by Linux (Windows and macOS untested).
* README: the debug variable is `APPSKELLINGTON_DEBUG`.
## [0.2.2] (2024-11-17)
Second release is focused on cleanup, documentation.
+29
View File
@@ -0,0 +1,29 @@
#!/usr/bin/env bash
# Install a published app_skellington from a package index into a clean venv
# for every supported Python, then run scripts/smoke_import.py against it.
#
# Usage: scripts/verify_index_release.sh VERSION [INDEX_URL]
# INDEX_URL defaults to TestPyPI. Dependencies always come from PyPI,
# because TestPyPI hosts junk uploads under real dependency names.
set -euo pipefail
version="${1:?usage: $0 VERSION [INDEX_URL]}"
index="${2:-https://test.pypi.org/simple/}"
here="$(cd "$(dirname "$0")" && pwd)"
pythons=(3.8 3.9 3.10 3.11 3.12 3.13 3.14)
work="$(mktemp -d)"
trap 'rm -rf "$work"' EXIT
for py in "${pythons[@]}"; do
venv="$work/$py"
uv venv -q --python "$py" "$venv"
uv pip install -q --python "$venv" --no-cache --no-deps \
--index-url "$index" "app_skellington==$version"
"$venv/bin/python" -c 'import importlib.metadata as m; print("\n".join(m.requires("app_skellington") or []))' \
> "$work/requirements.txt"
uv pip install -q --python "$venv" -r "$work/requirements.txt"
(cd / && "$venv/bin/python" "$here/smoke_import.py" "$version")
done
echo "verified app_skellington==$version from $index on: ${pythons[*]}"
-2
View File
@@ -4,7 +4,6 @@
import pathlib
import re
import pytest
import yaml
ROOT = pathlib.Path(__file__).resolve().parent.parent
@@ -95,7 +94,6 @@ def test_classifiers_match_matrix():
assert claimed == expected_versions()
@pytest.mark.skipif(not VERIFY_SCRIPT.exists(), reason="added with the release task")
def test_verify_script_covers_matrix():
match = re.search(r"^pythons=\(([^)]*)\)", VERIFY_SCRIPT.read_text(), re.M)
assert match.group(1).split() == expected_versions()