Skip to content

v8.1.0

Choose a tag to compare

@github-actions github-actions released this 16 Sep 23:11
· 3 commits to dev since this release

New Features

  • CheckReleaseVersion.yml - a new job template refusing a release before it is tagged (#261). Its VersionCheck job compares the version from the pull-request title or tag with the __version__ in the Python code, and RegistryCheck asks a package registry whether that version is already released. Both run early in the pipeline, so a missing version bump or a duplicate release shows within the first minutes.
    • CompletePipeline.yml calls it as VersionCheck and gates TriggerTaggedRelease, ReleasePage and PublishOnPyPI on its result.
    • New inputs on CompletePipeline.yml: version_file (default '__init__.py'), check_pypi_duplicate (default 'true'), pypi_url (default 'https://pypi.org') and pypi_upload_url (default 'https://upload.pypi.org/legacy/').
  • UpdateVersionBranch.yml - proposes the update of a major-version branch as a pull-request, titled like Updating r8 from v8.1.0 (#260). A new major branches off the highest existing lower major, and self-references (<owner>/<repo>[/<path>]@<ref>, workflow-status badges) are rewritten on an update/<branch> branch, so no consumable branch is force-pushed. Proven in pyTooling/SynchronizeForks across v1.0.0 and v1.0.1.
  • CheckMarketplaceMetadata.yml - validates an action's metadata against the GitHub Marketplace rules on every push: file at the repository root, name, description shorter than 125 characters, branding icon and colour, public repository (#260). The Marketplace itself checks this only at publish time, in a web form.
  • PrepareJob.yml: new input publish_pages_on and output publish_pages (#259) - a newline separated list of or-ed conditions on the pipeline's ref: default-branch, main-branch, development-branch, release-branch, release-tag, nightly-tag, branch=<regexp> and tag=<regexp>. CompletePipeline.yml forwards it and gates PublishToGitHubPages on the result, so a repository chooses when GitHub Pages are published. An unknown condition or a broken regular expression fails every pipeline, not only the tag run.
  • PublishOnPyPI.yml: new input dry_run, forwarded by CompletePipeline.yml as pypi_dry_run (#256). The two twine upload steps are replaced by one twine check, so a pipeline building a package that is never published validates its metadata instead of failing at the upload.
  • PublishOnPyPI.yml: new input pypi_upload_url, passed to twine upload --repository-url, so packages can go to another registry (#261).
  • Pipeline.yml - this repository releases itself from a workflow of its own (#265). The release logic used to sit inside _Checking_JobTemplates.yml, a test workflow, which is why the v8.0.0 tag had to be created by hand. The five _Checking_*.yml workflows keep their own push trigger and their own, separately readable runs; Pipeline.yml holds no test jobs.
    • Prepare classifies the commit, and Verifications waits for the runs of those five workflows for that commit and fails if one of them didn't succeed - one request per poll covers all five, a workflow that concluded is dropped from the wait, and the interval and timeout are the poll_interval (15 s) and poll_timeout (6600 s) dispatch inputs.
    • TriggerTaggedRelease then tags the release commit. A tag created with the pipeline's token raises no push event, so the job starts this workflow again through workflow_dispatch at the tag; in that run ReleasePage publishes the notes and UpdateVersionBranch opens the pull-request moving r8.
    • It runs on every branch, so the roll-up of the five verification workflows is available for any commit, while the release jobs need a merge commit on main or a release tag.

Changes

  • ⚠️ A failing version check refuses the release (#261). CompletePipeline.yml's VersionCheck compared the version before, but no job depended on it - a mismatch was a red job while tagging and publishing went on. It now runs whenever Prepare reports a version, fails instead of being skipped when it can't check, and blocks the tag, the release page and the PyPI upload.
  • ⚠️ TagReleaseCommit.yml refuses to tag if the tag or a release page for that version already exists (#261). Before, an existing tag failed createRef by accident and an existing release page wasn't noticed.
  • Parameters.yml: new output package_version - the __version__ of package_version_file (#261).
  • The pip → MSYS2 table maps matplotlib (#262), as python-matplotlib:p, for a requirement on matplotlib itself and for the extra pyTooling[diagram]. pip can't build matplotlib inside MSYS2. numpy was already mapped.
  • UpdateVersionBranch.yml reads its inputs directly instead of through env: blocks, and exports GH_TOKEN in the script like PrepareJob.yml and PublishReleaseNotes.yml (#263).
  • The default release-notes footer names the job template that writes it - pyTooling/Actions::PublishReleaseNotes.yml instead of ::Release.yml. The text appears on every consumer's release page; a repository overriding release_notes_footer is unaffected.

Bug Fixes

  • A tag publishes to GitHub Pages again (8fc18bc). CompletePipeline.yml guards PublishToGitHubPages on the ref, because the github-pages environment rejects a deployment from a feature branch before a runner is assigned. The guard was an allowlist of the default branch and dev; on a tag push github.ref_name is the tag, so the job was skipped - silently, on the release run, whose documentation matters most. github.ref_type == 'tag' is admitted now, feature branches still aren't.
  • PublishReleaseNotes.yml keeps a release page's existing text when re-run, instead of replacing it with the preliminary notes (#256).

Documentation

  • New pages CheckReleaseVersion.rst, UpdateVersionBranch.rst and CheckMarketplaceMetadata.rst, listed in their categories and in the templates overview.
  • CompletePipeline.rst documents version_file, check_pypi_duplicate, pypi_url, pypi_upload_url, pypi_dry_run and publish_pages_on; its Behavior names the new checks and what they refuse.
  • PublishOnPyPI.rst documents dry_run and pypi_upload_url; PrepareJob.rst documents publish_pages_on and publish_pages; Parameters.rst documents package_version.
  • Development.rst gains the rule behind the Pages fix: a condition gating a job on the ref is a blocklist of refs that cannot work, never an allowlist of refs that have been seen to work.

GitHub Pipeline

  • _Checking_JobTemplates.yml runs CheckReleaseVersion.yml for an unreleased version of pyTooling, and _Checking_Parameters.yml checks package_version and package_version_file for the simple and the namespace fixture package.
  • _Checking_Parameters.yml checks publish_pages for a branch, a release tag and a nightly tag.
  • The release jobs left _Checking_JobTemplates.yml for Pipeline.yml (#265). PublishOnPyPI there became a dry-run test that runs on every pipeline instead of only on a release tag, and both fixture pipelines set pypi_dry_run: 'true'.
  • latex_table_style = ["booktabs"] in doc/conf.py. Sphinx' default adds colorrows, which makes colortbl's \CT@everycr and \everycr expand into each other until TeX's input stack is full - the PDF build died in the first table of the documentation. Tables keep the booktabs rules and lose their alternating row colours.

Known Issues

  • Verifications occupies a runner while it waits - up to poll_timeout, with the job's two hour timeout-minutes behind it.
  • A failed run has to be re-run completely - gh run rerun <id>, never gh run rerun <id> --failed, and only after the run has finished. CleanupArtifacts is guarded by !cancelled(), so it deletes the intermediate artifacts even when the job consuming them failed; re-running just the failed jobs then stops at Unable to download artifact(s): Artifact not found. This affects every pipeline built from CompletePipeline.yml, not only this repository.

Related Issues and Pull-Requests

Note

Why 8.1.0 and not 9.0.0. No parameter changes its meaning: every change either adds an input with a default that keeps the previous behaviour, or makes a check that was already there refuse a release it should never have allowed (#261).

Two defaults are worth naming. check_pypi_duplicate defaults to 'true', so a release commit asks PyPI - a package that isn't published there answers 404 and passes. And VersionCheck now fails where it used to be skipped: a repository keeping __version__ somewhere other than the package's root __init__.py has to set version_file. Every repository calling CompletePipeline.yml keeps it in the root __init__.py.


Published from Pipeline workflow triggered by github-actions[bot] on 2026-09-16 23:11:41 UTC.

This automatic release was created by pyTooling/Actions::PublishReleaseNotes.yml