From f0e3f7a43e1f16380ac37621f1bccfa68ddfc386 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bern=C3=A1t=20G=C3=A1bor?= Date: Fri, 23 Oct 2026 13:00:00 -0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A7=20build(lock):=20allow=20release-c?= =?UTF-8?q?reator=200.6.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- changelog.d/+release-creator-065.bugfix.md | 1 + pylock.toml | 25 +++++++++++----------- pyproject.toml | 12 +++++------ tests/conftest.py | 13 +++++++++-- tests/install_locked_tools/test_install.py | 14 ++++++------ tests/refresh_release_lock/test_cutoffs.py | 4 +++- tools/nab_cutoffs.py | 1 + 7 files changed, 43 insertions(+), 27 deletions(-) create mode 100644 changelog.d/+release-creator-065.bugfix.md diff --git a/changelog.d/+release-creator-065.bugfix.md b/changelog.d/+release-creator-065.bugfix.md new file mode 100644 index 0000000..1ee4584 --- /dev/null +++ b/changelog.d/+release-creator-065.bugfix.md @@ -0,0 +1 @@ +Allow release jobs to use release-creator 0.6.5 under its reviewed upload cutoff. diff --git a/pylock.toml b/pylock.toml index 41e133a..e5bdc17 100644 --- a/pylock.toml +++ b/pylock.toml @@ -1703,7 +1703,7 @@ sha256 = "d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f" [[packages]] name = "release-creator" -version = "0.6.4" +version = "0.6.5" marker = "\"release-hooks\" in dependency_groups or \"release-news\" in dependency_groups or \"release-notes\" in dependency_groups or \"release-prepare\" in dependency_groups or \"release-validate\" in dependency_groups" requires-python = ">=3.15" dependencies = [ @@ -1717,22 +1717,22 @@ dependencies = [ index = "https://pypi.org/simple/" [packages.sdist] -name = "release_creator-0.6.4.tar.gz" -upload-time = 2026-10-23 16:52:05.496598+00:00 -url = "https://files.pythonhosted.org/packages/97/91/9e1cac72d6bac1b0c5bce41a9231340c9d8640063102461c0fd33817ca50/release_creator-0.6.4.tar.gz" -size = 133464 +name = "release_creator-0.6.5.tar.gz" +upload-time = 2026-10-23 19:54:49.281646+00:00 +url = "https://files.pythonhosted.org/packages/a0/da/7195823b3d0ab066f518d8bd987f88a39e0e39da33f629e021346209a7cb/release_creator-0.6.5.tar.gz" +size = 135158 [packages.sdist.hashes] -sha256 = "801c15dfc79e862298037fe1f02b52f3b2c3035acc02bebff9fa916c3b3fdce0" +sha256 = "954247b06b7b9a8c196a782252e3d980d33a9e9b7f9e5aea7647ef6c758d4275" [[packages.wheels]] -name = "release_creator-0.6.4-py3-none-any.whl" -upload-time = 2026-10-23 16:52:04.227467+00:00 -url = "https://files.pythonhosted.org/packages/fb/86/fb3fb2b9b5cf3f6ea6d67b711c9d7915a2cec5ed1542bcf6bde51e85cd77/release_creator-0.6.4-py3-none-any.whl" -size = 46339 +name = "release_creator-0.6.5-py3-none-any.whl" +upload-time = 2026-10-23 19:54:47.716775+00:00 +url = "https://files.pythonhosted.org/packages/f1/4c/6215690fc2b48f3d927699bb16f5c8bcf26b8862e378df33a2581a45215b/release_creator-0.6.5-py3-none-any.whl" +size = 46723 [packages.wheels.hashes] -sha256 = "cf41e5d6d50b489fbc666a82790463f810caff4f91f18c9da02ec72dc96223a0" +sha256 = "dd109f7fb64808a83833c332b8563c56bd943c4a8de79b440eab475b5ca9a73e" [[packages]] name = "requests" @@ -2483,10 +2483,11 @@ sha256 = "4e8b4e54979b26554c72a7e669009017a7fdd3fb00bbae0b26f82a86636c289f" [tool.nab] nab-version = "0.0.22" -created-at = 2026-10-23 16:58:48.863323+00:00 +created-at = 2026-10-23 19:55:55.131127+00:00 command-line = [ "nab", "lock", + "--no-cache", "--groups", "build", "lock-tools", diff --git a/pyproject.toml b/pyproject.toml index 317fbc2..86e74b9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,14 +10,14 @@ license-files = [ "LICENSE" ] [dependency-groups] build = [ "Cython>=3.0", "setuptools>=80" ] lock-tools = [ "nab==0.0.22", "tomlkit>=0.13" ] -release-notes = [ "release-creator>=0.6.4" ] -release-news = [ "release-creator>=0.6.4", "towncrier>=26.9" ] -release-prepare = [ "release-creator>=0.6.4", "towncrier>=26.9", "prek>=0.2" ] -release-validate = [ "release-creator>=0.6.4", "prek>=0.2" ] +release-notes = [ "release-creator>=0.6.5" ] +release-news = [ "release-creator>=0.6.5", "towncrier>=26.9" ] +release-prepare = [ "release-creator>=0.6.5", "towncrier>=26.9", "prek>=0.2" ] +release-validate = [ "release-creator>=0.6.5", "prek>=0.2" ] release-check = [ "prek>=0.2" ] release-attestations = [ "pypi-attestations>=0.0.30" ] release-shell = [ "prek>=0.2", "yq>=4.4.5" ] -release-hooks = [ "release-creator>=0.6.4", "prek>=0.2" ] +release-hooks = [ "release-creator>=0.6.5", "prek>=0.2" ] release-hook-check = [ "prek>=0.2", "yq>=4.4.5" ] test = [ "certifi", @@ -66,7 +66,7 @@ uploaded-prior-to = "2026-10-18T05:45:09Z" uploaded-prior-to = "2026-10-18T05:45:09Z" [tool.nab.packages.release-creator] -uploaded-prior-to = "2026-10-23T16:52:06Z" +uploaded-prior-to = "2026-10-23T19:54:50Z" [tool.ruff] line-length = 120 diff --git a/tests/conftest.py b/tests/conftest.py index f28be7a..04a3f19 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -91,7 +91,7 @@ def test_package_lock(tmp_path_factory: pytest.TempPathFactory, nab_executable: 'default-groups = []\n[tool.nab.matrix]\npython = ">=3.15,<3.16"\nplatforms = ["linux_x86_64"]\n' ) subprocess.run( - [str(nab_executable), "lock", "--groups", "fixture", "--output", "pylock.toml"], + [str(nab_executable), "lock", "--no-cache", "--groups", "fixture", "--output", "pylock.toml"], cwd=fixture, check=True, capture_output=True, @@ -267,7 +267,16 @@ def build_repository(source_project: Path, nab_executable: Path, monkeypatch: py + f"\n[dependency-groups]\nrelease-notes = [{json.dumps(release_requirement)}]\n" + '\n[tool.nab]\nbase-group = "project-runtime"\nbuild-group = "build"\n' ) - run(source_project, str(nab_executable), "lock", "--groups", "release-notes", "--output", "pylock.toml") + run( + source_project, + str(nab_executable), + "lock", + "--no-cache", + "--groups", + "release-notes", + "--output", + "pylock.toml", + ) run(source_project, "git", "add", ".") run(source_project, "git", "commit", "-m", "Add package source") run(source_project, "git", "push", "origin", "main") diff --git a/tests/install_locked_tools/test_install.py b/tests/install_locked_tools/test_install.py index 7deb105..d31737c 100644 --- a/tests/install_locked_tools/test_install.py +++ b/tests/install_locked_tools/test_install.py @@ -173,10 +173,12 @@ def test_install_locked_tools_checks_caller_release_creator(tmp_path: Path, loca def test_local_tool_source_accepts_versionless_package(tmp_path: Path) -> None: source = Path(__file__).resolve().parents[2] - project = tomllib.loads((source / "pylock.toml").read_text()) - package = next(item for item in project["packages"] if item["name"] == "release-creator") - lock = (source / "pylock.toml").read_text().replace(f'version = "{package["version"]}"', "", 1) - (tmp_path / "pylock.toml").write_text(lock) + document = tomlkit.parse((source / "pylock.toml").read_text()) + package = next(item for item in document["packages"] if item["name"] == "release-creator") + for field in ("version", "index", "sdist", "wheels"): + package.pop(field) + package["directory"] = {"path": "."} + (tmp_path / "pylock.toml").write_text(tomlkit.dumps(document)) result = subprocess.run( [ "python", @@ -341,8 +343,8 @@ def test_install_locked_tools_rejects_unreviewed_version_under_reviewed_floor(tm package = next(package for package in document["packages"] if package["name"] == "release-creator") package["version"] = "0.6.3" for artifact in [package["sdist"], *package["wheels"]]: - artifact["name"] = artifact["name"].replace("0.6.4", "0.6.3") - artifact["url"] = artifact["url"].replace("0.6.4", "0.6.3") + artifact["name"] = artifact["name"].replace("0.6.5", "0.6.3") + artifact["url"] = artifact["url"].replace("0.6.5", "0.6.3") lock = tmp_path / "pylock.toml" lock.write_text(tomlkit.dumps(document)) diff --git a/tests/refresh_release_lock/test_cutoffs.py b/tests/refresh_release_lock/test_cutoffs.py index c10f8e3..f50760d 100644 --- a/tests/refresh_release_lock/test_cutoffs.py +++ b/tests/refresh_release_lock/test_cutoffs.py @@ -177,7 +177,7 @@ def test_check_nab_lock_rejects_forged_upload_time( committed.write_bytes(lock.read_bytes()) regenerated = subprocess.run( - [str(nab_executable), "lock", "--groups", "release-notes", "--output", "pylock.toml"], + [str(nab_executable), "lock", "--no-cache", "--groups", "release-notes", "--output", "pylock.toml"], cwd=build_repository, text=True, capture_output=True, @@ -200,6 +200,8 @@ def test_check_nab_lock_rejects_forged_upload_time( pytest.param("release-creator", "2026-10-23T02:44:40Z", True, id="reviewed-release-creator"), pytest.param("release-creator", "2026-10-23T16:52:06Z", True, id="reviewed-release-creator-0.6.4"), pytest.param("release-creator", "2026-10-23T16:52:07Z", False, id="extended-release-creator"), + pytest.param("release-creator", "2026-10-23T19:54:50Z", True, id="reviewed-release-creator-0.6.5"), + pytest.param("release-creator", "2026-10-23T19:54:51Z", False, id="extended-release-creator-0.6.5"), pytest.param("unreviewed", "2026-10-22T00:00:00Z", False, id="new-package"), ], ) diff --git a/tools/nab_cutoffs.py b/tools/nab_cutoffs.py index 4c3b56e..f33dc38 100644 --- a/tools/nab_cutoffs.py +++ b/tools/nab_cutoffs.py @@ -22,6 +22,7 @@ }, ("release-creator", "0.6.0"): datetime(2026, 10, 23, 2, 44, 40, tzinfo=UTC), ("release-creator", "0.6.4"): datetime(2026, 10, 23, 16, 52, 6, tzinfo=UTC), + ("release-creator", "0.6.5"): datetime(2026, 10, 23, 19, 54, 50, tzinfo=UTC), ("uv-build", "0.13.4"): datetime(2026, 10, 21, tzinfo=UTC), } _REVIEWED_EXCEPTIONS: Final = {