Skip to content

docs: build the docs with MkDocs on Read the Docs - #81

Merged
uniqueg merged 5 commits into
devfrom
docs/73-mkdocs
Nov 14, 2026
Merged

uniqueg merged 5 commits into
devfrom
docs/73-mkdocs

Conversation

@uniqueg

@uniqueg uniqueg commented Nov 14, 2026 •

Copy link
Copy Markdown
Member

Summary

Turns Krini's docs into a MkDocs Material site for Read the Docs, structured as in cloud-registry-ui, and builds it strictly in CI.

  • mkdocs.yml (Material, validation warnings, site_url from READTHEDOCS_CANONICAL_URL), .readthedocs.yaml (fail_on_warning: true), docs/requirements.txt (pinned), and a Dependabot pip entry for /docs.
  • Structure:
    • User guide: a new overview (browsing, login, tasks and workflows, privacy), plus the moved workflow examples.
    • Operator guide: compatibility; deployment (moved from docs/deployment.md, deduplicated, sentence-case headings); configuration (the README's settings, privacy notice and env-file notes); upgrading.
    • Development: setup, checks, tests and the docs build (from the README); releasing (moved from docs/releasing.md). It now says how release notes go into nav, its steps render as one list, and it links the org's contributing guide in elixir-cloud-aai/.github instead of the retired repo.
  • README slimmed to the cloud-registry-ui structure: synopsis, link to the docs, docs badge, known deployments, quick start, citation, contributing, contact, licence.
  • CI: new job docs ("Docs"): mkdocs build --strict with Python 3.13, as on Read the Docs, needed by the gate CI passed and by publish. The release-notes format check stays in Release readiness, which covers more cases (date, TODOs, tagged versions) than cloud-registry-ui's docs-job check. docs additionally fails if the notes aren't in nav.
  • Path references in ci.yml, release.yml, scripts/check-image.sh and the Dockerfile follow the moves (comments only).

Nothing from the old README or docs/ is lost; the reviewers checked this explicitly.

Closes #73

Verification

  • mkdocs build --strict (mkdocs 1.6.1, mkdocs-material 9.8.0, Python 3.13): passes. Before the content existed it failed on the nav entries and broken links, as intended.
  • Built development/releasing/index.html has one ordered list with 4 steps (round-1 review found it rendered as 1).
  • A test build with an added docs/releases/0.1.0.md: it fails without a nav entry and passes with the documented snippet.
  • actionlint 1.7.12 with shellcheck 0.11.0 on all workflows: no findings.
  • Lint, type check, unit tests and e2e: no code changed (only comments in the Dockerfile and the smoke-test script); CI runs them.
  • Review: adversarial-reviewer and quality-reviewer, 2 rounds. All confirmed findings are fixed: list rendering, a wrong statement about TES listing, docs duplication, Dependabot for the docs packages, comment wrapping, and quotes in env files.
  • CI: CI passed. Every job passed, including the new Docs job (20 s), and so did Codecov. The non-required external check Vercel – krini from the old org Vercel project fails, as on other PRs. That's unrelated: Krini deploys on Rahti.

Maintainer to-do (not a blocker for the merge)

  • Import the project on Read the Docs (slug krini, default branch dev, PR builds on), right after the merge. Until then the README's docs badge and links return 404. Step 6 of the UI steps file has the details.

Declined review findings

  • Python 3.13 appears in both ci.yml and .readthedocs.yaml, as in cloud-registry-ui. Each comment points at the other. Not centralised.

Open questions

None.

🤖 Generated with Claude Code

Summary by Sourcery

Build and validate a structured MkDocs documentation site on Read the Docs while consolidating project guidance and simplifying the README.

New Features:

  • Add a structured MkDocs Material documentation site covering user guidance, operations, development, configuration, deployment, upgrades, and releases.
  • Publish documentation through Read the Docs with pinned dependencies and a documentation status badge in the README.

Bug Fixes:

  • Correct documentation references and clarify service authentication requirements, including that TES requests do not yet carry user tokens.

Enhancements:

  • Streamline the README into a project overview, quick start, documentation links, and essential project information.
  • Reorganize and consolidate existing documentation into user, operator, and development guides.

Build:

  • Add MkDocs configuration and pinned documentation build dependencies.
  • Configure Read the Docs to build MkDocs documentation strictly and fail on warnings.

CI:

  • Add a strict documentation build job to CI and require it for the CI gate and image publishing.

Documentation:

  • Move and expand deployment, configuration, development, and release guidance into the new documentation structure.
  • Add user-facing guidance for browsing services, authentication, tasks, workflows, privacy, and upgrades.

Chores:

  • Add monthly Dependabot updates for documentation dependencies.
  • Update workflow, Dockerfile, and image-check references to the reorganized documentation paths.

uniqueg and others added 4 commits November 14, 2026 22:42
Turn the loose docs and the long README into a MkDocs Material site
for Read the Docs, structured as in cloud-registry-ui:

- user guide (new overview, plus the workflow examples);
- operator guide: deployment (moved), configuration (the README's
  settings and privacy notice), upgrading, compatibility;
- development: setup, checks, tests and docs build (from the README),
  and releasing (moved, release notes go into nav).

The README keeps the synopsis, deployments, a quick start, citation,
contributing, contact and licence, and links to the docs with a docs
badge. References to the moved files in workflow comments, the smoke
test script and the Dockerfile follow the move; the releasing guide
now links the org's contributing guide in elixir-cloud-aai/.github.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add the job `docs` ("Docs"), as in cloud-registry-ui: it builds the
MkDocs site with Python 3.13, as Read the Docs does, in strict mode, so
that broken links and anchors or pages missing from nav fail CI. The
gate and `publish` need it. The release-notes check stays in
`readiness`.

Closes #73

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Releasing: indent the steps by 4 spaces and separate them, so that
  MkDocs renders them as one list; show the nav entry for the notes.
- Deployment: new intro, sentence-case headings, the login provider
  and service requirements once (scopes, token type, allowlisting),
  and the settings only in Configuration.
- User guide: TES services are listed without login, too.
- Configuration and README quick start: no quotes in env files for
  docker run --env-file; the quick start links the releases.
- Dependabot: update the docs packages (pip, /docs) monthly.
- Reflow comments after the path changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Move the note on which settings reach the browser and the behaviour of
the privacy settings from the deployment page to Configuration, and
use sentence case for the security recommendations.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@uniqueg uniqueg self-assigned this Nov 14, 2026
@vercel

vercel Bot commented Nov 14, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
krini Ready Ready Preview Nov 14, 2026 10:15pm UTC

@sourcery-ai

sourcery-ai Bot commented Nov 14, 2026 •

Copy link
Copy Markdown

Reviewer's Guide

Configuration

Configure Read the Docs and pin MkDocs dependencies, add monthly Dependabot updates, and require a strict documentation build in CI before the gate and image publishing can pass.

  • .github/dependabot.yml L32-44
  • .github/workflows/ci.yml L6-10, L236-239, L557-580 (+4 small edits)
  • .github/workflows/release.yml L10-13 (+3 small edits)
  • .gitignore L46-49
  • .readthedocs.yaml L1-19
  • Dockerfile L15-18
  • docs/requirements.txt L1-6
  • mkdocs.yml L1-80
  • scripts/check-image.sh L7-8

Documentation

Read the new documentation structure and its home page, then review the user guide and moved workflow examples together.

  • docs/index.md L1-25
  • docs/user-guide/index.md L1-42

Review the operator guidance as a set: the reorganized deployment page, its dedicated configuration and upgrade pages, and the compatibility overview.

  • docs/operator-guide/configuration.md L1-92
  • docs/operator-guide/index.md L1-29
  • docs/operator-guide/upgrading.md L1-16

Review the development guide and its moved release instructions together, including the added release-note navigation guidance.

  • docs/development/index.md L1-124
  • docs/development/releasing.md L1-181
  • docs/releasing.md (deleted)

Review the README as the concise project entry point, quick start, and link hub for the new guides.

  • README.md L14-31, L42-57, L85-97 (+2 small edits)

Other changes

Files not grouped.

  • docs/deployment.md L1-8, L143-176, L259-270 (+10 small edits)
  • docs/user-guide/workflow-examples.md

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@codecov

codecov Bot commented Nov 14, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (02620ce) to head (eb8bf33).

Additional details and impacted files
@@            Coverage Diff            @@
##               dev       #81   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files           12        12           
  Lines          273       273           
  Branches        77        77           
=========================================
  Hits           273       273           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@uniqueg
uniqueg marked this pull request as ready for review November 14, 2026 22:09
@uniqueg
uniqueg requested a review from AnonymousXC as a code owner November 14, 2026 22:09
@sourcery-ai

sourcery-ai Bot commented Nov 14, 2026 •

Copy link
Copy Markdown

Linked issues

Checked at commit eb8bf33

#73 docs: build the docs with MkDocs on Read the Docs · 6 of 7 met

# Requirement Status Notes
1 Configure MkDocs Material and Read the Docs with pinned build dependencies ✅ Met Added mkdocs.yml, .readthedocs.yaml and docs/requirements.txt with pinned versions.
2 Organize the user, operator and development guides ✅ Met The navigation and pages cover the requested user tasks and workflow examples, operator deployment/configuration/upgrading, and development setup/checks/tests.
3 Add a strict docs build to CI and require it through the CI gate ✅ Met The docs job runs mkdocs build --strict and is included in the needs for CI passed and publish.
4 Pass mkdocs build --strict locally and in CI ✅ Met The PR verification reports a successful local build and a passing CI Docs job.
5 Preserve the existing docs and README setup and configuration content ✅ Met The moved workflow examples, deployment and release guides, and README setup, tests and configuration material are represented in the new documentation pages.
6 Slim the README and link to the documentation with a docs badge ✅ Met The README is streamlined and includes documentation links and a Read the Docs badge.
7 Import the project on Read the Docs ❌ Not addressed The PR description defers the import until after merge in the maintainer to-do.

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Hey - I've found 6 issues

Prompt for AI Agents
Please address the comments from this code review:

## Individual Comments

### Comment 1
<location path="docs/development/releasing.md" line_range="116-118" />
<code_context>
+    the version.
+
+    ```bash
+    git push origin "${sha}:main" &&  # fails unless it is a fast-forward
+        git tag -s "v${version}" "${sha}" -m "v${version}" &&
+        git push origin "v${version}"
+    ```
+
</code_context>
<issue_to_address>
**Main advances without a release tag**

When the main push succeeds but local tag signing or the remote tag push fails, `git push origin "${sha}:main"` has already advanced `main`, so a later failure in `git tag -s` or `git push origin "v${version}"` leaves `main` pointing to an untagged commit; a hosting project that follows `main` can deploy it before the release exists.

Create the signed tag before pushing, then atomically push both `main` and the tag, or provide recovery instructions for restoring the invariant after a partial failure.
</issue_to_address>

### Comment 2
<location path="README.md" line_range="24" />
<code_context>
-and follow their runs. The rest of this README describes how to run Krini
-locally and how to contribute; see the [Deployment Guide](docs/deployment.md)
-for deployments.
+and follow their runs. Krini is generic: deploy it with its container image
+for your own registry, login provider and services.
+
</code_context>
<issue_to_address>
**Custom providers cannot authenticate**

When an operator configures an OIDC provider whose endpoints are not at `/oidc/authorize`, `/oidc/token`, and `/oidc/userinfo`, the login flow constructs those paths from `LS_LOGIN_URL` instead of using the provider’s endpoint paths, so authentication fails despite the generic-provider claim.

Use the provider’s discovered or configured endpoint paths instead of hard-coding these routes.

Also at `README.md:25`.
</issue_to_address>

### Comment 3
<location path="docs/user-guide/index.md" line_range="19-20" />
<code_context>
+## Logging in
+
+Use **Login** to log in with the login provider of the deployment, such as
+LS Login. Krini then sends your access token to the services you use, so
+that they know who you are; services that require login accept it only if
+they trust the deployment's client (see the
+[Operator guide](../operator-guide/deployment.md#service-configuration)).
</code_context>
<issue_to_address>
**TES token requirements are misleading**

When users follow the login description or operators configure services according to the deployment guide, `ECCClientGa4ghTesCreateRuns` passes only the TES URL, while the WES provider adds the bearer token; operators therefore get incorrect guidance to configure TES JWT-token support and users are told TES receives their identity token when it does not.

Clarify that Krini currently sends access tokens only to WES, and scope the JWT and allowlisting requirements to WES until TES requests include a token.

Also at `docs/operator-guide/index.md:9`.
</issue_to_address>

### Comment 4
<location path="docs/operator-guide/configuration.md" line_range="31" />
<code_context>
-APP_ORIGIN=http://localhost:3000
-
-# Privacy notice (optional)
-PRIVACY_CONTROLLER="Example Institute, Example Street 1, Example City"
-PRIVACY_CONTACT=privacy@example.org
-PRIVACY_NOTICE_URL=https://example.org/privacy
</code_context>
<issue_to_address>
**Privacy controller shows quotes**

When an operator copies the displayed `PRIVACY_CONTROLLER` example into a Docker `--env-file`, `textOf` and `privacySettings` trim whitespace but preserve the quote characters, and the privacy page renders the value verbatim, so visitors see quotation marks around the controller name.

Remove the surrounding quotes from the Docker env-file example.
</issue_to_address>

### Comment 5
<location path="docs/development/releasing.md" line_range="34" />
<code_context>
+    end of `nav`; later ones add their notes at its top:
+
+    ```yaml
+      - Releases:
+          - "0.2.0": releases/0.2.0.md
+          - "0.1.0": releases/0.1.0.md
</code_context>
<issue_to_address>
**Release section nests under Development**

When maintainers follow the displayed nav snippet literally, maintainers who follow this snippet append `Releases` as a child of `Development`, rather than as a top-level section, so the release notes appear in the wrong place in the site navigation.

Indent `- Releases:` to the same level as the other top-level nav sections.
</issue_to_address>

### Comment 6
<location path="mkdocs.yml" line_range="18" />
<code_context>
+
+theme:
+  name: material
+  logo: images/logo_elixir_on_cloud_night.png
+  features:
+    - content.code.copy
</code_context>
<issue_to_address>
**Header logo image is missing**

The configured logo path resolves to `docs/images/logo_elixir_on_cloud_night.png`, but no image files were found under `docs/`; the generated site therefore displays a broken logo in its header.

Add the referenced logo image under `docs/images/` or point the theme setting at an image that exists.
</issue_to_address>

Sourcery assessment

Approval pending. 4 findings to address first.

Blocking findings: docs/development/releasing.md:118, README.md:24, docs/user-guide/index.md:20, docs/operator-guide/configuration.md:31


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

Comment thread docs/development/releasing.md Resolved
Comment thread README.md Resolved
Comment thread docs/user-guide/index.md Resolved
Comment thread docs/operator-guide/configuration.md Resolved
Comment thread docs/development/releasing.md Resolved
Comment thread mkdocs.yml Resolved
- Releasing: sign the tag first, then push it and main in one atomic
  push, so that a failure can't leave main moved but untagged.
- README and home page: login is with LS Login for now; other OIDC
  providers are planned (#43).
- User guide and deployment: Krini sends tokens only to WES services
  so far (#44); the service requirements apply to TES once it does.
- Configuration: the example has no quotes, for docker --env-file.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Sourcery assessment

Approved.

@uniqueg
uniqueg merged commit 6d208e1 into dev Nov 14, 2026
34 checks passed
@uniqueg
uniqueg deleted the docs/73-mkdocs branch November 14, 2026 22:17

This branch had an error being deployed

1 failed deployment
Preview – krini — eb8bf33b Deployed Nov 14, 2026 by vercel[bot]
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.

docs: build the docs with MkDocs on Read the Docs

1 participant