Skip to content

feat(ci): verify course content against reality - #71

Open
miaulalala wants to merge 1 commit into
feat/target-version-from-manifestfrom
feat/content-verification-script
Open

miaulalala wants to merge 1 commit into
feat/target-version-from-manifestfrom
feat/content-verification-script

Conversation

@miaulalala

Copy link
Copy Markdown
Collaborator

Course modules rot in two ways, and only one of them is visible. A stale version number gets reported by a reader; a bootstrap.sh that quietly stopped doing what a module claims does not, and that is the kind that accumulates until a module has to be rewritten. This adds a check for the invisible kind.

Stacked on #70, which must merge first: the checks assert against course.targetNextcloudVersion.

Two modes, deliberately:

  • Offline, gating every pull request. Unknown {{template}} variables, a literal version that should have been templated, manifest entries pointing at files nobody wrote. Nothing leaves the machine, so it cannot fail for reasons outside this repository.
  • Online, weekly on a timer, reporting rather than gating. Links, ghcr image tags, whether nextcloud-docker-dev still defines the services the setup module tells readers to start, whether bootstrap.sh still runs scripts/update-hosts, and whether the pinned version is still the current stable. A dead third-party link must not block somebody's typo fix, so this never runs on a PR; on failure it opens one issue and keeps it updated rather than filing a new one every Monday.

It also prints, on every run, the release-specific claims a human must re-read when the pin moves — the paragraphs that are deliberately not templated because substituting them would turn a visibly stale number into a confidently wrong sentence. Currently 12 of them. That is the other half of the bump story from #70.

It found three things on its first run, all fixed here:

  • content/php/beginner/8.md:103 — an info.xml version range missed by the manual templating pass in feat(content): take the target Nextcloud version from the manifest #70
  • content/php/beginner/2.md:143 — a version range quoted in prose, also missed
  • content/php/beginner/1.md:290 — a broken link: the admin manual dropped the configuration_server/ path segment, so the occ reference had been 404ing. Now pinned to the course's target version

Load: about 63 requests per online run, spaced, once a week. Placeholders (YOUR_USERNAME, host.docker.internal, .local) are skipped, and 403/429 are warnings rather than failures, since they mean a server dislikes CI rather than that a page is gone.

Current state on this branch: 0 failures, 0 warnings offline; 0 failures and 2 warnings online — one bot-blocked GitHub link, and the course targeting 34 while stable is 35, which is the signal working as intended.

Note there is an unmerged ci/pull-request-build branch adding .github/workflows/pull-request.yml. This adds a separate workflow file rather than touching it, but the two want reconciling.

🤖 Generated with Claude Code

Adds scripts/verify-content.mjs with two modes. Offline checks gate pull
requests: unknown template variables, a literal version that should have
been templated, manifest entries pointing at files nobody wrote. Online
checks run weekly and report rather than gate, because a vendor moving a
URL must not block somebody's typo fix.

The online half is what catches the drift that reading never does: links,
image tags, whether nextcloud-docker-dev still defines the services the
setup module tells readers to start, and whether the pinned version is
still current.

It found three things on its first run: an info.xml missed by the manual
templating pass, a version range quoted in prose, and a broken occ docs
link whose path segment had been dropped.

Assisted-by: ClaudeCode:claude-opus-5
Signed-off-by: Anna Larch <anna@nextcloud.com>
@miaulalala miaulalala added the enhancement New feature request label Sep 17, 2026
@miaulalala miaulalala self-assigned this Sep 17, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant