Skip to content

Docs→main: consolidate CI, adopt version-switcher v0.23.0 - #37

Open
coretl wants to merge 63 commits into
mainfrom
ci-consolidation
Open

Docs→main: consolidate CI, adopt version-switcher v0.23.0#37
coretl wants to merge 63 commits into
mainfrom
ci-consolidation

Conversation

@coretl

@coretl coretl commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Merges the docs branch's MyST docs migration onto main (no file overlap: main had only Yocto-layer/.gitlab-ci.yml changes since the branches diverged).
  • Adopts the shared myst-version-switcher-plugin reusable workflows at v0.23.0 (replacing the local _docs.yml/_publish.yml/_release.yml, which consumed the older assemble@v0.5.0 action), following the same recipe already used by PandABlocks-server and PandABlocks-FPGA.
  • Drops the docs/rel-* branch triggers — CI now runs on main + tags only.
  • Removes the GitHub make_boot job/_make_boot.yml (self-hosted iris_runners): .gitlab-ci.yml's build/release-all jobs already build and release the same Yocto boot images on Diamond's pollux-dev runners, so the GitHub-side build was redundant. The GitHub release job (via release.yml@v0.23.0) now exists solely to attach docs.zip to a GitHub Release for the version-switcher's release backfill.
  • Drops the orphaned _make_sdk.yml/_make_image.yml workflows (unreferenced by any trigger).
  • Updates the PandABlocks-server/PandABlocks-FPGA cross-repo doc xrefs to their main branch (both have completed or are completing the same docs→main pivot).

Migration state

scripts/migrate.sh PandABlocks/meta-panda (prepare step) has been run: releases backfilled, main seeded (pages-default-seed release) so the first publish from this PR's CI has a durable source to persist, and Pages is now served from GitHub Actions (gh-pages retained as the instant rollback).

Test plan

  • make docs (strict) builds clean locally — 39 pages, exit 0
  • CI green on this PR (lint/docs/publish)
  • After merge: confirm main's first publish deploys and _sources/main.zip goes live, then finalize with scripts/migrate.sh PandABlocks/meta-panda --delete-gh-pages

🤖 Generated with Claude Code

coretl and others added 30 commits June 8, 2026 14:28
Inventories all .rst and .md files under docs/ in PandABlocks-FPGA,
PandABlocks-server, PandABlocks-rootfs, PandABlocks.github.io, and
meta-panda, with word counts, last-commit dates, one-line summaries,
audience notes, and an outdated/partial/current status flag.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Cross-repo analysis of duplications, gaps, and open questions based on
the current/partial docs in knowledge/01-inventory.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Instantiate the DLS python-copier-template MyST docs skeleton into meta-panda as
a one-off scaffold (Stage A, runbook Prompt A). Building, complete-but-empty docs
tree; no content conversion yet.

- Move the legacy Sphinx/RST tree to docs/_legacy_rst/ (ignored by myst build) so
  Stage D/E conversion can read the cited sources in-tree; keep docs/images/.
- New myst.yml: title/github/logo swapped (PandA logo), meta-panda TOC + page stubs
  for every v4 target page, Release Notes url kept.
- Drop apidoc plugins block, reference/api.{md,json}, tutorials/installation.md,
  how-to/run-container.md (skeleton Python-only artifacts).
- index.md README-include and how-to/contribute CONTRIBUTING-include both resolve;
  add root README.md and .github/CONTRIBUTING.md.
- xref/intersphinx prototype in myst.yml project.references; probe link into the
  PandABlocks-client Sphinx repo resolves in built output. Other core repos +
  devcontainer + fastcs kept commented until their docs publish.
- docs/PROGRESS.md tracks Stage-A items and per-page status.

myst build: green (exit 0, no warnings/errors).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Switch the Pages workflow to the new MyST docs:
- ubuntu-latest runner; install mystmd (pinned 1.10.1) via npm
- myst build --html in docs/ with BASE_URL=/meta-panda/<version> so links/assets
  resolve under the versioned GitHub Pages sub-path
- copy docs/_build/html into .github/pages/<version>/ and publish to gh-pages with
  the same pinned peaceiris action + keep_files (preserves the catch-all redirect)
- publish stays gated to rel-* branches and tags under the PandABlocks org

Validated locally: green build, BASE_URL applied to asset paths, versioned-dir copy
and redirect intact.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…tifact

Model .github/workflows/docs.yml on the python-copier-template-example _docs.yml:
- checkout@v5 (fetch-depth 0); sanitize GITHUB_REF_NAME into DOCS_VERSION
- upload-artifact@v4 of docs/_build as the 'docs' artifact (zipped)
- move build to versioned .github/pages/<version>/; generate switcher.json via
  make_switcher.py (copied from the template)
- publish via peaceiris v4.0.0 (pinned SHA), keep_files: true

Root branch moved rel-* -> main:
- publish gated on github.ref_name == 'main' || ref_type == 'tag'
- .github/pages/index.html redirects to ./main/index.html

Adaptations from the template (documented in PROGRESS.md):
- build with npm + mystmd (myst build --html) rather than uv/tox: meta-panda is a
  Yocto layer, not a Python/uv project
- keep BASE_URL=/meta-panda/<version> so assets resolve under the versioned Pages
  sub-path (template's mystmd migration doesn't set it yet)

Validated locally end-to-end with DOCS_VERSION=main: green build, BASE_URL applied,
artifact path populated, versioned move, switcher.json generated.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Restrict push triggers to main + tags (mirroring python-copier-template-example
ci.yml on: block) so a feature-branch PR fires a single pull_request run instead
of both a push and a pull_request run. No reusable-workflow nesting.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The artifact uploaded the whole docs/_build, which includes the ~135 MB
templates/ dir (downloaded book-theme node sources) plus cache/ and site/ —
build-time only, nothing deployable. Upload docs/_build/html instead, cutting
the zipped artifact ~7x (measured 49 MB -> 7 MB). The remaining size is the
mystmd client runtime (plotly + thebe + React chunks), inherent to a mystmd
static site.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Uploading docs/_build/html put the site contents flat at the artifact root,
losing the intermediate html/ directory the original docs.zip had. Restore
docs/_build as the upload root (so html/ is retained) and instead rm the
~135 MB templates/ build cache beforehand. Same ~7 MB result, original layout.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Convert three tutorial RST sources to MyST Markdown. tutorial0 rewrites the
MalcolmJS quick-start for PandA web control context; tutorial1 and tutorial2
are straightforward RST→MyST conversions with timing diagrams described inline
(the custom timing_plot directive replaced with ASCII art + prose).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Convert all writable how-to pages from RST to MyST Markdown. Includes:
- quickstart: merged with rootfs source, fixed boot.txt→config.txt, FAQ moved
  to reference/troubleshooting
- build: merged kas + docker approaches; KAS_IMAGE_VERSION verify note
- manual-build: fixed Xilinx manifest URL to Xilinx/yocto-manifests
- make-release: releases link fixed to meta-panda repo
- packages, upgrade-via-ssh, upgrade-via-web-admin, monitor-attribute-values
- Three NEW authored pages: integrate-with-a-panda, test-firmware-changes,
  choose-fpga-bitstream (from Interview3/5 knowledge)
- contribute: xref/intersphinx setup documented; CONTRIBUTING.md include kept

Skipped (Prompt E): use-web-control-to-set-up-a-panda, save-restore-design

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… troubleshooting)

- opkg: RST→MyST quick-reference table
- machine-targets: NEW from Interview6; MACHINE table with PandABrick verify note
- glossary: canonical merge of webcontrol + FPGA glossaries using MyST {glossary}
  directive; Zpkg entry notes legacy status (pre-5.0)
- troubleshooting: seeded from quickstart.rst FAQ (7 Qs); boot.txt→config.txt fixed
- reference/changes left as stub (blocked: verify — 3.0→4.0 absent)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- boot-process: RST→MyST; numbered stages + key-files table
- architecture: NEW skeleton from Interview1; layers diagram + data-flow ASCII art
- web-control-ui-overview: RST→MyST from user_interface_overview.rst; all
  screenshots reused in-place from _legacy_rst
- understanding-attribute-state: 8 states converted; 5 existing PNG icons
  referenced from _legacy_rst; Processing/Update-Error/Invalid marked as
  pending Prompt C SVGs (docs/images/attribute-state/)

Skipped (blocked/done): hardware-targets (blocked: author), decisions (✅ from Stage A)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…re-design

Split webcontrol/userguide/working_with_a_design.rst (Prompt E) into:
- how-to/use-web-control-to-set-up-a-panda (the bulk; attribute widgets folded in)
- how-to/save-restore-design (Saving a Design + Opening an Existing Design)

The four attribute-widget subsections (View/Edit, Dropdown, Text Input,
Checkbox) and the truncated trailing sentence are kept as a blocked: capture
stub with its issue placeholder, pending new screenshots.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The {glossary} directive requires definition-list children: each term on its
own line followed by a ': ' definition. The page used RST-style indented
definitions (no colon), so no terms registered and every {term} reference
failed repo-wide (32 'Unexpected node as a child of a glossary' errors). Convert
all entries to the colon form and fix the stale {term}`Layout View` reference
in web-control-ui-overview (the term is 'Layout').

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- README: add PandABlocks-level framing before the Yocto-layer intro
- myst.yml: band the how-to TOC (use / administer / develop)
- machine-targets: ground-truth against conf/machine/ (drop xu5-s1, add
  pandabox2); mark xu5-st1/zedboard development-only
- web-control pages: trim to live UI (port colours Boolean/Int32 only,
  single Save method, "Design Name" field); copy 19 images out of
  _legacy_rst into docs/images/webcontrol/ and repoint all references
- upgrade-via-ssh: Image -> image.ub; integrate: fix opkg link
- tutorial 1: CLOCKS -> CLOCK1; tutorials: quickstart signposts
- glossary: App entry leads with .ipk, zpkg demoted to legacy
- understanding-attribute-state: replace runbook jargon placeholders

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Per-repo devcontainers replace the planned PandABlocks-devcontainer repo.
Modelled on python-copier-template, but kas-based (ghcr.io/siemens/kas/kas:4.8,
matching KAS_IMAGE_VERSION in build.sh) since this repo builds with bitbake.
Lives entirely under .devcontainer/ as the root Dockerfile is the existing
FPGA-tools/CI container.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
create-issues.sh files the remaining human-verification issues (run with an
authenticated gh; it commits its own marker edits). 09-fresh-eyes-review.md
records what was fixed and the user-confirmed answers; runbook annotated
where the per-repo devcontainer decision superseded it.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Trigger Docs CI on pushes to docs as well as main/tags, and allow the
gh-pages publish step on the docs branch so the rewritten docs deploy
before merging to main.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Issues created for all human-capture, verify-then-write, author-from-scratch,
and infrastructure backlog items (see PROGRESS.md Blocked section).
Recreate the eight attribute-state glyphs as standalone material-style
SVGs under docs/images/attribute-state/, in the colour spec derived from
the web control theme, and wire them into
explanations/understanding-attribute-state. Replaces the three pending
placeholders and the five PNGs with a consistent SVG set. No external UI
toolkit is referenced in the docs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…', combining some parts of quickstart and old tut 0
tomkane-dls and others added 27 commits June 17, 2026 11:23
- myst.yml: enable folder-qualified page URLs (site.options.folders: true)
  and turn on the PandABlocks-FPGA / PandABlocks-server xref references
  (interim /docs targets; -> /stable later).
- Convert cross-project http links to xref: the PandABlocks-server commands
  reference and the PandABlocks-client landing-page links.

Cross-repo inventories only resolve once each repo's docs branch is pushed
with folders enabled.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace Sphinx `{doc}` cross-references with native MyST markdown links
([](path.md)) for intra-repo page links across tutorials, how-to,
explanations and reference pages.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
# Conflicts:
#	docs/how-to/setup-without-dhcp.md
#	docs/how-to/test-firmware-changes.md
#	docs/how-to/upgrade-via-ssh.md
#	docs/tutorials/blinking_leds.md
#	docs/tutorials/connecting_to_web_control.md
#	docs/tutorials/position_capture.md
The docs restructure renamed several pages but left dangling references:
- how-to/quickstart -> how-to/setup-without-dhcp (toc + 4 links)
- tutorials/tutorial2_position_capture -> tutorials/position_capture
- {doc}`tutorial3_position_compare` -> {doc}`position_compare`
- {doc}`tutorial_blinking_leds` -> {doc}`blinking_leds`
- getting_started "next steps" link pointed at how-to/ instead of tutorials/

All internal .md and {doc} links in docs now resolve.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Convert the 7 remaining {doc} roles to markdown links (the tutorial pages
  reintroduced them via the merge, plus how-to/test-firmware-changes).
- docs.yml: build with `myst build --html --strict` so CI exits non-zero on
  any error-severity message (e.g. an unresolved cross-repo xref).

Verified the docs build clean at exit 0 under --strict.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- myst.yml: escalate link-resolves, reference-target-resolves and
  link-text-exists to error so (with --strict) broken links, unresolved
  cross references and empty auto-filled labels fail CI.
- Add reference/documentation-standards.md describing the linking
  conventions these rules enforce (page/section/explicit targets, internal
  vs xref, path rules, empty-label inheritance), and list it in the toc.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Move the cross-repo reference-target table and config note out of the
contribute how-to into reference/documentation-standards (new "Configured
cross-repo targets" section), and reduce the how-to to a pointer that links to
the reference. Also corrects the stale "FPGA/server are commented out" note —
those references are now enabled; only fastcs-PandABlocks remains commented.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replace the legacy peaceiris/actions-gh-pages + keep_files publish (and the
in-repo make_switcher.py) with the version-switcher assemble model, and adopt
the shared `make docs` build used by the other PandABlocks repos:

- ci.yml + _docs.yml + _publish.yml (the documented tutorial split). _docs.yml
  drives the build through `make docs` (npx mystmd, pinned by MYSTMD_VERSION in
  CONFIG) and packs docs.zip (bare html/ root); _publish.yml runs assemble@v0.5.0
  -> upload-pages-artifact -> deploy-pages.
- Add a minimal Makefile + CONFIG.example (the repo had none) exposing the same
  `make docs` target; gitignore the local CONFIG copy.
- .devcontainer/Dockerfile (kas-based): add make + npm so `make docs` works in
  the container.
- docs/myst.yml: add the version-switcher plugin v0.5.0; add navbar_end.md.
- Publish the `docs` branch as the live version during migration
  (guard-default-branch: false; main has no MyST docs yet).
- Remove the old docs.yml and .github/pages/{make_switcher.py,index.html}.

The Pages-source flip + gh-pages backfill/delete are a separate cutover.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
separated working in a container from the build page
main has no MyST docs build yet, so the assemble model drops /main/. Until
docs merges to main, stage the existing gh-pages main/ build into the assemble
site dir so generate lists main in switcher.json and /main/ keeps serving.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Docs: migrate versioned-docs publishing to myst-version-switcher assemble model (v0.5.0)
….json

Mirror the upstream myst-version-switcher _publish.yml change: after deploy-pages,
poll the live switcher.json and fail if it does not byte-match the assembled one,
so a stale/wedged Pages origin surfaces as a red check instead of silently
serving old docs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Checkpoint of the in-progress consolidation before rebasing docs onto main:
folds code.yml into ci.yml, and (per the docs -> main pivot used by
PandABlocks-server/FPGA) drops the now-obsolete docs and rel-* branch
triggers so main + tags is the only trigger surface. Also points the
PandABlocks-server/FPGA cross-repo doc refs at main and bumps the
version-switcher plugin pin to v0.22.0.
layer's default branch (no overlapping files; same docs -> main pivot
used by PandABlocks-server #93 and PandABlocks-FPGA #289).
…op the GitLab-covered boot build

Replace the local _docs.yml/_publish.yml/_release.yml (assemble@v0.5.0 model)
with the shared docs.yml/publish.yml/release.yml@v0.22.0 reusable workflows,
plus the publish-dispatch.yml shim -- the same recipe already used by
PandABlocks-server and PandABlocks-FPGA. Drop the make_boot job and
_make_boot.yml: .gitlab-ci.yml's build/release-all jobs already build the
Yocto boot images and release them (on GitLab, via Diamond's pollux-dev
runners), so the self-hosted iris_runners GitHub build was redundant.
…ge workflows

v0.23.0 carries the publish.yml stable-alias fix meta-panda's mid-migration
state (no MyST-released tag yet) would otherwise hit. _make_sdk.yml and
_make_image.yml were unreferenced by any workflow (dead since before this
consolidation) -- deleted rather than left as clutter.

@EmilioPeJu EmilioPeJu left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Documentation looks good (I added just a couple of corrections)

|---|---|---|
| Direct TCP | — | Low-level scripting, quick checks |
| Python client | [PandABlocks-client](xref:PandABlocks-client) | Python applications; preferred for new integrations |
| EPICS / Tango | [fastcs-PandABlocks](https://github.com/DiamondLightSource/fastcs-PandABlocks) | Control-system integrations |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This URL seems to have moved to https://github.com/PandABlocks/fastcs-PandABlocks

Comment thread docs/how-to/build.md
To target a different machine set `KAS_MACHINE`, e.g.:

```bash
KAS_MACHINE=xu5-st1 kas-container build ./kas.yml

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

xu5-st1 machine is now called xu5 (matching the FPGA target renaming)

| `zedboard` | Zedboard | Development/testing platform |

The generally supported machines are `pandabox`, `pandabox2` and `pandabrick`;
`xu5-st1` and `zedboard` are development-only targets.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

as mentioned earlier xu5-st1 was renamed to xu5


## FPGA bitstream

### How do I override the FPGA bitstream variant used?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Given this information is already in a how-to guide, maybe we should remove this question from here to avoid redundancy?

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.

4 participants