From 5dca65f73879926a0bbaca8fe41887a121be84aa Mon Sep 17 00:00:00 2001 From: "russell@unturf.com" Date: Tue, 16 Jun 2026 13:55:17 -0400 Subject: [PATCH 1/2] ci: twine check before upload, non-interactive twine check validates the built artifacts' metadata (long_description rendering, required fields) so a broken render hits CI logs instead of landing on PyPI as a malformed project page. --non-interactive guards against a wedged prompt hanging the pipeline if the runner ever loses its ~/.pypirc auth. --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 100dbb3..5ce5aed 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -21,4 +21,5 @@ pypi-twine: - pip install --upgrade pip - pip install twine - python3 setup.py sdist bdist_wheel - - twine upload dist/* + - twine check dist/* + - twine upload --non-interactive dist/* From 56c4945b43a30119ec08fab3d0f6333ebe0344cc Mon Sep 17 00:00:00 2001 From: "russell@unturf.com" Date: Tue, 16 Jun 2026 14:11:58 -0400 Subject: [PATCH 2/2] =?UTF-8?q?ci:=20pin=20twine<6=20=E2=80=94=20classic?= =?UTF-8?q?=20~/.pypirc=20auth=20on=20build=20runner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit twine 6 (Sep 2025) auto-detects GitLab CI and refuses to fall back to ~/.pypirc, requiring PYPI_ID_TOKEN (Trusted Publishing OIDC). Pin <6 to keep the runner's ~/.pypirc fallback working until we migrate all python/* repos to Trusted Publishing as a coordinated change. --- .gitlab-ci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5ce5aed..2d0b647 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -19,7 +19,11 @@ pypi-twine: - tags script: - pip install --upgrade pip - - pip install twine + # Pin twine <6 — newer twine auto-detects GitLab CI and refuses to + # fall back to ~/.pypirc on the runner, requiring PYPI_ID_TOKEN + # (Trusted Publishing OIDC). Until we migrate to Trusted Publishing, + # stick with the classic ~/.pypirc auth on the build runner. + - pip install "twine<6" - python3 setup.py sdist bdist_wheel - twine check dist/* - twine upload --non-interactive dist/*