Skip to content

Track upstream release series for generated references and add rebuild triggers - #468

Open
miharp wants to merge 2 commits into
OpenVoxProject:masterfrom
miharp:docs/track-series-ref
Open

Track upstream release series for generated references and add rebuild triggers#468
miharp wants to merge 2 commits into
OpenVoxProject:masterfrom
miharp:docs/track-series-ref

Conversation

@miharp

@miharp miharp commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

Part of #467.

Problem

Generated reference pages build from an exact upstream tag pinned in _data/products.yml, so every point release needs a manual bump. That has not been happening: production still generates the 8.x man pages from 8.28.0 (8.28.1 shipped 2026-07-07) and the OpenFact references from 5.6.1 (5.7.0 is out). Separately, the site only rebuilds on a docs merge, so nothing refreshes it when upstream releases.

Changes

ref: can track a release series. _data/products.yml now accepts either form:

ref: "8.x"          # newest stable (non-prerelease) tag in 8.*, resolved at build time
ref: "9.0.0-beta2"  # exact, for prereleases and frozen majors

Resolution happens in the per-product build (PuppetReferences.resolve_version, Repo#newest_release(series:)), where the vendored clone's tags are already available, so references:all passes the value through and VERSION=8.x works for local runs too. A series never resolves to a prerelease, and a series with no stable tag raises rather than silently building nothing. The bound is what keeps this safe: an unbounded "newest stable" is repo-global and would jump majors once 9.0.0 ships.

The current-stable rows (openvox 8x, openfact 5x, openbolt 5x) switch to series refs. The 9.x row keeps its exact prerelease pin. The products.yml header and the MAINTAINING.md cutover runbook are updated: Phase 1 leaves 8.x tracking, Phase 2 switches 9.x to "9.x" and freezes 8.x at its final tag.

Upstream releases can trigger a rebuild. autopublish.yaml gains repository_dispatch (type upstream-release) and workflow_dispatch triggers, a run-name so dispatched runs show what triggered them, and a queue-only concurrency group since dispatches and merges can now overlap. The sending side (an optional step in shared-actions/release.yml plus token scope) is tracked in #467 and is not part of this PR; merging this alone already rebuilds from the new refs, since _data/products.yml matches the push path filter.

Verification

Full generation runs from this branch, all exit 0:

task VERSION resolved
references:openvox 8.x 8.28.1
references:openfact 5.x 5.7.0
references:openbolt 5.x 5.6.0

Resolver checks against the vendored clones: 9.x raises (no stable tag), 9.0.0-beta2 and 8.28.0 pass through verbatim. rake rubocop, actionlint, and markdownlint are clean.

The NOTE line on the puppet agent man page, production vs. this branch built locally:

Before (docs.openvoxproject.org): This page was generated from the OpenVox source code based on version 8.28.0 on 2026-08-27 22:00:30 +0000.

After (VERSION=8.x): This page was generated from the OpenVox source code based on version 8.28.1 on 2026-08-29 10:06:06 -0400.

The production date is the point: the site was rebuilt seven weeks after 8.28.1 shipped and still used the pinned tag. The local build's log shows the series resolving: Using tag 8.28.1 -> _openvox_8x.

Trade-off

Rebuilding an old docs commit no longer guarantees the same reference pages for the current stable series, because the series ref resolves against whatever tags exist at build time. Frozen majors and prereleases keep exact pins, so they are unaffected. The build log prints the resolved tag and every generated page's NOTE line records it, so what any given build used is always recoverable.

Assisted by Claude.

Since the version pin table (153aec6), each generated product's reference
pages build from an exact tag in _data/products.yml, so every point release
needs a manual docs bump. The 8.x man pages are still on 8.28.0 and the
OpenFact pin on 5.6.1 while 8.28.1 and 5.7.0 have been out for weeks.

The exact pin exists to keep a collection from jumping majors: "newest
stable" is repo-global, so once 9.0.0 ships an unpinned 8.x collection would
build from 9.x. A series-bounded newest-stable keeps that property without
the toil, so `ref:` now accepts either form:

- a series such as "8.x" (or "9.0.x"), resolved at build time to the newest
  non-prerelease tag whose leading segments match. Prereleases never match,
  and a series with no stable tag raises rather than silently building
  nothing.
- an exact tag, built verbatim, for prereleases and frozen older majors.

Resolution happens in the per-product build (resolve_version), where the
vendored clone's tags are already available, so references:all passes the
ref through unchanged and VERSION=8.x works for local runs too. The current
stable rows (openvox 8x, openfact 5x, openbolt 5x) switch to series refs;
the 9.x prerelease keeps its exact pin. MAINTAINING.md's cutover runbook is
updated so Phase 1 leaves 8.x tracking and Phase 2 freezes it at GA.

Part of OpenVoxProject#467.

Co-authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Michael Harp <mike@mikeharp.com>
@miharp
miharp requested a review from a team as a code owner August 29, 2026 14:19
Add repository_dispatch (event type upstream-release) and workflow_dispatch
triggers to the autopublish workflow. With products.yml refs tracking release
series, the only thing standing between an upstream tag and updated reference
pages is a build, and until now only a docs merge could start one. An upstream
release workflow can now send a dispatch after tagging, and maintainers get a
manual "rebuild and publish now" button for cases like an upstream doc-string
fix or a release-table refresh that fell back to committed data.

workflow_dispatch can be started from any branch or tag, and github.sha
follows that ref, so the test job is guarded to master; skipping it skips
build and deploy too. push is already limited to master and
repository_dispatch always runs on the default branch.

Dispatched runs show what triggered them via run-name (e.g. "Rebuild for
openvox 8.28.1") when the sender includes product and version in the payload;
without a payload the name is empty so GitHub falls back to the default.

Since dispatches and merges can now overlap, and every run deploys master's
head, add a concurrency group that queues rather than cancels, so a build is
never killed mid-deploy.

Part of OpenVoxProject#467.

Co-authored-by: Claude <noreply@anthropic.com>
Signed-off-by: Michael Harp <mike@mikeharp.com>
@miharp
miharp force-pushed the docs/track-series-ref branch from be9c98a to 91ac6b1 Compare August 29, 2026 14:35
@miharp
miharp requested a review from bastelfreak August 31, 2026 10:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant