Skip to content

docs: serve Pages from docs-store branch; fix #291 versioned-docs deploy - #292

Merged
ofloveandhate merged 5 commits into
developfrom
fix/docs-deploy-pages-291
Jul 8, 2026
Merged

docs: serve Pages from docs-store branch; fix #291 versioned-docs deploy#292
ofloveandhate merged 5 commits into
developfrom
fix/docs-deploy-pages-291

Conversation

@ofloveandhate

Copy link
Copy Markdown
Contributor

Fixes #291 — versioned docs now deploy (and can't hit BlobNotFound)

Symptom: the v3.0.0 versioned docs built and the docs-store branch was pushed, but the GitHub Pages deploy never published.

What I found:

  1. The deploy_docs gate depended on a cross-job output (needs.build_docs.outputs.is_release) that didn't propagate into the downstream if in the reusable-workflow context — the job skipped despite the artifact being uploaded and the output being set.
  2. Fixing the gate exposed the real blocker: actions/deploy-pages then failed structurally with an Azure BlobNotFound on the ~140 MB store — reproducibly, across re-runs — even though the github-pages artifact was valid and downloadable via the normal API. The Actions→Pages artifact-exchange, not our content, was the problem.

The fix — stop deploying Pages from an Actions artifact; serve it directly from the docs-store branch.

  • Pages source switched to branch docs-store / / (a settings change, with @ofloveandhate's OK). Pushing the store is the deploy — no artifact exchange, nothing to skip, no cross-job output. v3.0.0 is live on bertini2.org.
  • Removed the upload-pages-artifact step and the entire deploy_docs job; dropped now-unused pages:/id-token: perms from publish.yml's docs caller; deleted the throwaway deploy_docs_store.yml.
  • Added a durable /CNAME (assembler --cname, plus a file on the branch) so branch-source Pages keeps the bertini2.org domain across builds.

Also slimmed the published store (173 MB → 86 MB, 9589 → 4597 files):

  • /stable/ is now a tiny redirect stub to the newest /vX.Y.Z/ instead of a 69 MB byte-for-byte copy.
  • .doctrees Sphinx caches are dropped — at the source (sphinx-build -d) and defensively in the assembler copy.

assemble_versioned_docs tests updated (stable-is-a-redirect, .doctrees dropped, CNAME emission) — 14 pass.

Docs-update workflow this enables

  • Prose/source fix: run build_docs (dispatch) → it assembles into docs-store and pushes → Pages republishes. No release, no PyPI, no full matrix.
  • Republish / rollback / typo in built HTML: just push docs-store.

Note: build_docs checks out inputs.ref for both doc source and tooling, so re-slimming an already-released version with new tooling can't go through the workflow (the old tag has the old assembler). I re-slimmed v3.0.0's store by hand this once; the new pipeline runs clean on the next release.

ofloveandhate and others added 5 commits July 8, 2026 04:47
…b output (#291)

The versioned-docs Pages deploy silently skipped for the v3.0.0 release:
build_docs ran relver (is_release=true), pushed the docs-store branch, and
uploaded the Pages artifact -- yet deploy_docs, gated on
`needs.build_docs.outputs.is_release == 'true'`, was skipped. In a
reusable-workflow context that cross-job output did not propagate into the
downstream job `if`, even though the producing job logged "Set output".

Drop the fragile job output. deploy_docs now runs on
`needs.build_docs.result == 'success' && inputs.deploy` (both terms proven
true in the failed run) and re-derives is_release locally from VERSION,
gating only the actual deploy-pages step. Immune to the propagation quirk;
for prereleases build_docs uploads no artifact so the deploy step no-ops
green, never clobbering the multi-version site.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A minimal workflow that publishes the durable docs-store branch straight to
Pages without rebuilding docs -- for (re)publishing the site or recovering a
deploy that failed only at the Pages step. Also a fast 2-min probe of
actions/deploy-pages in isolation.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Root fix for #291: instead of deploying the versioned docs via
actions/deploy-pages (which failed structurally with Azure BlobNotFound on
the ~140MB store, even though the artifact was valid and downloadable),
serve GitHub Pages DIRECTLY from the docs-store branch. Pushing the store IS
the deploy now -- no artifact exchange, nothing to skip, no cross-job output
to propagate. v3.0.0 is live on bertini2.org.

Also slim what gets published:
- /stable/ becomes a tiny redirect stub to the newest /vX.Y.Z/ instead of a
  69MB byte-for-byte copy (halves the store, halves the file count).
- .doctrees Sphinx caches are dropped -- at the source via `sphinx-build -d`,
  and as defense-in-depth in the assembler's copy (~13MB of pure junk gone).
- assembler writes /CNAME (--cname) so branch-source Pages keeps the
  bertini2.org custom domain across builds.

Workflow: remove the upload-pages-artifact step and the entire deploy_docs
job; drop now-unused pages:/id-token: perms from publish.yml's docs caller;
delete the throwaway deploy_docs_store.yml. assemble_versioned_docs tests
updated (stable is now a redirect; .doctrees dropped; CNAME emission).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Carries the edits that the prior commit's message described but did not
contain (an aborted `git add` staged only the file deletion):

- build_docs.yml: sphinx-build -d (drop .doctrees), assemble --cname
  bertini2.org, remove upload-pages-artifact + the entire deploy_docs job
  (branch-source Pages publishes on push to docs-store).
- publish.yml: drop now-unused pages:/id-token: from the docs caller.
- assemble_versioned_docs.py: /stable/ redirect stub (not a copy), .doctrees
  ignored on copy, --cname writes /CNAME; tests updated (14 pass).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…-pages (#291)

Records why versioned-docs publishing serves the docs-store branch directly
instead of actions/deploy-pages (structural BlobNotFound on the ~140MB store),
the custom-domain-via-CNAME-file consequence, and the stable-redirect /
.doctrees-drop slimming. Guards against a well-meaning switch back.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ofloveandhate
ofloveandhate merged commit 981167c into develop Jul 8, 2026
7 checks passed
ofloveandhate added a commit that referenced this pull request Jul 9, 2026
The changelog had drifted badly: the last entry was **2.0.1**, while
**2.0.2**, the entire
**3.0.0** modernization, and the **3.1.0** line had all shipped — with
their notes living only
in commit messages, PRs, and GitHub Releases. This consolidates them
back into `CHANGELOG.md`,
newest-first, in the existing *Keep a Changelog* format.

### New entries
- **[3.1.0] – 2026-07-09** — NumPy interop for the mp dtypes (#306), the
Python UI
quality-of-life batch (#293#304, #305), `ZeroDimConfig.recall` (#308),
prebuilt CI deps
  (ADR-0049, #282), and docs-store Pages (ADR-0050, #291, #292).
- **[3.0.0] – 2026-07-07** — reworked from the hand-written v3.0.0
release notes (~70 PRs; full
  themed index in #238) into Added / Changed / Fixed sections.
- **[2.0.2] – 2026-05-22** — the packaging/CI maintenance entry that was
never recorded.

Older 1.0.x / 2.0.1 entries and the commented template are untouched.

### Why now (load-bearing)
`publish.yml`'s `github-release` job builds the release body from the
**top** `CHANGELOG.md`
block. That block was the stale **[2.0.1]** — so a final `v3.1.0` tag
would have published 2.0.1's
notes as the 3.1.0 release. With this merged, the extraction yields
exactly the **[3.1.0]** block
(verified locally against the workflow's extraction logic).

Docs-only (`**/*.md` → `paths-ignore`), so this runs no CI. **Merge
before tagging `v3.1.0`.**
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.

3.0.0 versioned-docs deploy skipped (deploy_docs job's is_release gate)

1 participant