Skip to content

fix(ci): install mkdocs deps so docs deploy works#5

Merged
joeblackwaslike merged 3 commits into
mainfrom
fix/docs-deploy-deps
Jun 10, 2026
Merged

fix(ci): install mkdocs deps so docs deploy works#5
joeblackwaslike merged 3 commits into
mainfrom
fix/docs-deploy-deps

Conversation

@joeblackwaslike

@joeblackwaslike joeblackwaslike commented Jun 10, 2026

Copy link
Copy Markdown
Owner

The deploy-docs job in release-please.yml failed on the v0.2.0 release with error: Failed to spawn: mkdocsmkdocs was never a declared dependency, so uv sync --frozen never installed it (the old release workflow had the same latent bug).

Fix:

  • Add a docs dependency group: mkdocs, mkdocs-material (the theme mkdocs.yml uses), pymdown-extensions (for pymdownx.* markdown extensions).
  • Deploy via uv run --group docs mkdocs gh-deploy --force.

Verified locally: uv run --group docs mkdocs build succeeds; deptry clean; lockfile updated.

Summary by Sourcery

Ensure documentation deployment installs and uses explicit MkDocs-related dependencies via a dedicated docs dependency group.

Bug Fixes:

  • Fix docs deployment workflow failing due to MkDocs not being installed in the CI environment.

Build:

  • Add a docs dependency group in pyproject.toml including MkDocs, mkdocs-material, and pymdown-extensions.

CI:

  • Update the release-please documentation deployment step to run MkDocs with the docs dependency group via uv.

claude-review

Verdict ✅ Approved
Findings 0 general, 0 inline
Model gpt-5
Agents 5 Tier 1 + 1 Tier 2
Tier 2 skills comment-analyzer
Cost $0.253315

deploy-docs ran 'uv run mkdocs gh-deploy' but mkdocs was never a declared
dependency, so it failed with 'Failed to spawn: mkdocs'. Add a 'docs'
dependency group (mkdocs, mkdocs-material, pymdown-extensions) and run the
deploy via 'uv run --group docs'.
@coderabbitai

coderabbitai Bot commented Jun 10, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@joeblackwaslike, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 42 minutes and 10 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 4c5123f0-0070-4270-9746-5350095fb282

📥 Commits

Reviewing files that changed from the base of the PR and between f4e9371 and 72134db.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • .github/workflows/on-release-main.yml
  • .github/workflows/release-please.yml
  • .pre-commit-config.yaml
  • pyproject.toml
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/docs-deploy-deps
✨ Simplify code
  • Create PR with simplified code
  • Commit simplified code in branch fix/docs-deploy-deps

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@sourcery-ai

sourcery-ai Bot commented Jun 10, 2026

Copy link
Copy Markdown
Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

Adds a dedicated docs dependency group for MkDocs and updates the release workflow to install and use those docs dependencies when deploying documentation, updating the uv lockfile accordingly.

Sequence diagram for docs deployment using uv docs dependency group

sequenceDiagram
    actor Developer
    participant GitHubActions as GitHub_Actions
    participant SetupEnv as setup-python-env
    participant Uv as uv
    participant Mkdocs as mkdocs

    Developer->>GitHubActions: push tag / trigger release
    GitHubActions->>SetupEnv: uses .github/actions/setup-python-env
    GitHubActions->>Uv: run uv run --group docs mkdocs gh-deploy --force
    Uv->>Uv: resolve docs dependency group
    Uv->>Mkdocs: mkdocs gh-deploy --force
    Mkdocs-->>GitHubActions: publish docs to hosting
Loading

File-Level Changes

Change Details Files
Introduce a dedicated docs dependency group so MkDocs and related packages are installed via uv when needed.
  • Add a new optional dependency group named docs containing mkdocs, mkdocs-material, and pymdown-extensions with minimal version pins
  • Keep existing dev dependency group unchanged while separating docs-specific tooling
pyproject.toml
Change the release CI docs deployment step to use the docs dependency group when running MkDocs.
  • Update the deploy-docs job command to run mkdocs via uv with the docs group selected so mkdocs is available in the environment
.github/workflows/release-please.yml
Refresh the uv lockfile to capture the newly added docs dependency group and its resolved versions.
  • Regenerate uv.lock so that it includes resolved dependencies for mkdocs, mkdocs-material, pymdown-extensions, and any of their transitive dependencies
uv.lock

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

@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 reviewed your changes and they look great!


Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@gemini-code-assist gemini-code-assist 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.

Code Review

This pull request introduces a new docs dependency group in pyproject.toml containing mkdocs, mkdocs-material, and pymdown-extensions, and updates the uv.lock file accordingly. Feedback highlights that the GitHub Actions workflow file needs to be updated to support the new documentation deployment command. Additionally, it is recommended to include the docs group in the default installation configuration to ensure local development commands do not fail.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

Comment thread pyproject.toml
Comment on lines +49 to +53
docs = [
"mkdocs>=1.5",
"mkdocs-material>=9.5",
"pymdown-extensions>=10",
]

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

high

Missing Workflow Updates

The PR description mentions:

Deploy via uv run --group docs mkdocs gh-deploy --force.

However, the GitHub Actions workflow file (e.g., .github/workflows/release-please.yml) is not modified in this pull request. Without updating the workflow file to use this new command, the documentation deployment in CI will continue to fail. Please include the changes to your workflow file in this pull request.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Addressed in 32d3ed6 — the manual docs-deploy was updated to as well.

Comment thread pyproject.toml
Comment on lines +49 to +53
docs = [
"mkdocs>=1.5",
"mkdocs-material>=9.5",
"pymdown-extensions>=10",
]

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

medium

Local Development & Makefile Compatibility

Since docs is introduced as a separate dependency group, running make docs or make docs-test will now fail for local developers who set up their environment using make install (which runs uv sync and only installs the dev group by default).

To resolve this and maintain a seamless local development experience, you can either:

  1. Include the docs group in the dev group using uv's group inheritance:
    dev = [
        ...
        { group = "docs" }
    ]
  2. Configure default-groups under [tool.uv] to include both dev and docs by default:
    [tool.uv]
    package = true
    default-groups = ["dev", "docs"]

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Building docs locally now works with . No Makefile target referenced mkdocs, so nothing else to update.

Same mkdocs-missing fix for the workflow_dispatch fallback, so it can be
used to deploy docs for an already-tagged release.

@llamapreview llamapreview 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.

AI Code Review by LlamaPReview

🎯 TL;DR & Recommendation

Recommendation: Approve with suggestions

This PR fixes a critical CI failure by adding a dedicated docs dependency group and updating workflow commands. However, two maintainability improvements and a missing CI build check are suggested.

📄 Documentation Diagram

This diagram documents the updated documentation deployment workflow with the new docs dependency group.

sequenceDiagram
    participant Workflow as Deploy Docs Job
    participant CI as Setup Python Env
    participant VEnv as Virtual Environment
    participant MkDocs as MkDocs CLI
    participant GitHub as GitHub Pages

    Workflow->>CI: Checkout repository
    CI->>VEnv: Install environment (uv sync --frozen)
    note over VEnv: Now includes docs group
    Workflow->>MkDocs: uv run --group docs mkdocs gh-deploy --force
    note over Workflow,MkDocs: PR #35;5: Added --group docs flag<br/>to install mkdocs deps
    MkDocs->>GitHub: Deploy site
Loading

🌟 Strengths

  • Directly addresses the root cause of the deployment failure by declaring missing dependencies.
  • Minimal changes with clear impact; verified locally.
Priority File Category Impact Summary (≤12 words) Anchors
P2 .github/workflows/release-please.yml Maintainability quality CI job failed; may leave main red. search:quality
P2 pyproject.toml Maintainability Unbounded version ranges risk silent breaking changes.
P2 .github/workflows/release-please.yml Testing No CI step to verify docs build on every PR. search:mkdocs build

💡 Have feedback? We'd love to hear it in our GitHub Discussions.
✨ This review was generated by LlamaPReview Advanced, which is free for all open-source projects. Learn more.

Comment thread pyproject.toml
Comment on lines +49 to +53
docs = [
"mkdocs>=1.5",
"mkdocs-material>=9.5",
"pymdown-extensions>=10",
]

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 | Confidence: High

All three dependencies use “>=” without an upper bound. While this allows maximum flexibility, it risks breaking the documentation build silently when a future major version of mkdocs-material or pymdown-extensions introduces incompatible changes to plugins, templates, or markdown syntax. The project’s mkdocs.yml and custom plugins may not be forward‑compatible, leading to deployment failures that are hard to debug. Consider pinning to a known‑good range (e.g., ~=9.5 for mkdocs-material) to gain stability without becoming stale.

Code Suggestion:

docs = [
    "mkdocs>=1.5,<2",
    "mkdocs-material>=9.5,<10",
    "pymdown-extensions>=10,<11",
]

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Left unbounded to match the repo convention — the existing dependency group also pins with and no upper bound. Fine to revisit repo-wide if desired.

Comment on lines 59 to +60
- name: Deploy documentation
run: uv run mkdocs gh-deploy --force
run: uv run --group docs mkdocs gh-deploy --force

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 | Confidence: Medium

The CI output shows the quality job failed (conclusion: failure), yet the PR description states deptry passed locally. This discrepancy suggests either a pre‑existing issue or a new problem introduced by the docs dependency group (e.g., deptry scanning the docs group and flagging unused packages). Without fixing this failure, the main branch may remain red after merge, masking future regressions. Since the failure details are not visible in the diff, this is a speculative observation based on CI status.


P2 | Confidence: Medium

Speculative: The workflows deploy documentation only during a release, but there is no step to verify that mkdocs build succeeds on every push or PR. This means a regression in the docs dependency group or in the documentation content could go undetected until a release fails. Adding a separate CI job (e.g., a docs-check step that runs uv run --group docs mkdocs build --strict) would catch broken docs early and increase confidence.

Code Suggestion:

# Example step to add to the existing workflow or a new job:
  - name: Build documentation
    run: uv run --group docs mkdocs build --strict

Evidence: search:mkdocs build, path:.github/workflows/on-release-main.yml

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

The quality failure was unrelated to this change (release-please-generated CHANGELOG.md/manifest vs prettier); fixed in 72134db by excluding those release-please-owned files from prettier. quality is green now.

The pre-commit 'quality' gate ran prettier over CHANGELOG.md and
.release-please-manifest.json, which release-please regenerates each release
in a format prettier rewrites — failing CI on every post-release PR. Exclude
both from prettier so release-please owns them.
@sonarqubecloud

Copy link
Copy Markdown

@anthropicreviewbot

Copy link
Copy Markdown

⚠️ [claude-review] Review API error — findings preserved below

The review could not be posted after 3 attempts. Last error: Unprocessable Entity: "Path could not be resolved" - https://docs.github.com/rest/pulls/reviews#create-a-review-for-a-pull-request


claude-review

This is a targeted, well-scoped fix that correctly addresses the root cause of the docs deployment failure by adding a proper docs dependency group. Two low-priority improvements are worth noting: consider adding upper-bound version constraints (e.g. mkdocs-material>=9.5,<10) to guard against silent breaking changes on future lockfile upgrades, and adding a mkdocs build step to PR CI would catch docs regressions before they block future releases.
Additional skills activated:

  • comment-analyzer — 71 comment lines added or modified
    Inline comments: 1
Sev Finding
🟢 FYI: Unbounded lower-bound version ranges for docs dependencies
🟢 FYI: No CI step to verify docs build on PRs

Reviewed commit: e8b66babd077

Model: claude-sonnet-4-6 · 6 agents · $0.162765 · ai-review-bot

Inline comments (could not be anchored — listed by location):

  • .pre-commit-config.yaml:26FYI: Comment explains intent but omits the excluded files for readability The comment accurately explains why the two paths are excluded, which is valuable for future maintainers. One small improvement: the escaped regex (CHANGELOG\.md, \.release-please-manifest\.json) could be a bit surpr

@anthropicreviewbot

Copy link
Copy Markdown

⚠️ [claude-review] Review API error — findings preserved below

The review could not be posted after 3 attempts. Last error: Unprocessable Entity: "Path could not be resolved" - https://docs.github.com/rest/pulls/reviews#create-a-review-for-a-pull-request


claude-review

The fix is straightforward and correctly addresses the root cause — adding a dedicated docs dependency group and invoking mkdocs via uv run --group docs ensures the deps are always present in CI. The single inline note about a comment in .pre-commit-config.yaml is minor and non-blocking. No functional issues found; this is ready to merge.
Additional skills activated:

  • comment-analyzer — 71 comment lines added or modified
    Inline comments: 1
    Reviewed commit: 32d3ed62442f

Model: claude-sonnet-4-6 · 6 agents · $0.162579 · ai-review-bot

Inline comments (could not be anchored — listed by location):

  • .pre-commit-config.yaml:24FYI: Comment accurately describes intent, but could mention edge-case context The added comment correctly explains why these files are excluded from prettier. However, it silently assumes {{cookiecutter.project_name}} is a Cookiecutter template placeholder that also needs exclusion. A future

@codexreviewbot codexreviewbot 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.

claude-review

✅ No issues found. PR approved for merge. Note: 1 CI check(s) still outstanding: quality (failed).
Additional skills activated:

  • comment-analyzer — 71 comment lines added or modified
    Reviewed commit: e8b66babd077

Model: gpt-5 · 6 agents · $0.206717 · ai-review-bot

@joeblackwaslike joeblackwaslike merged commit 4fcd905 into main Jun 10, 2026
9 checks passed

@anthropicreviewbot anthropicreviewbot 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.

claude-review

Since the last review, new commits introduced minor additional changes: a .pre-commit-config.yaml exclusion with a clear explanatory comment (low concern, well-documented). Two low-severity follow-up observations were flagged — no upper bounds on docs dependencies and no docs build step in the PR/push CI workflow — but neither is a blocker. The core fix remains sound and no new significant issues were introduced.
Additional skills activated:

  • comment-analyzer — 71 comment lines added or modified
    Inline comments: 1
Sev Finding
🟢 FYI: No upper bounds on docs dependencies may cause silent breakage
🟢 FYI: No CI step to verify docs build on PRs

Reviewed commit: 72134db26ed7

Model: claude-sonnet-4-6 · 6 agents · $0.165570 · ai-review-bot

Comment thread .pre-commit-config.yaml
Comment on lines 23 to +24
- id: prettier
exclude: ^{{cookiecutter.project_name}}
# CHANGELOG.md and .release-please-manifest.json are owned/regenerated by

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

FYI: Comment explains the exclusion rationale well

The added comment accurately describes why CHANGELOG.md and .release-please-manifest.json are excluded from prettier: they are owned and regenerated by release-please, and fighting prettier on each release would cause unnecessary churn. This is a good 'why' comment that will remain accurate as long as release-please is used. No issues found.

@codexreviewbot codexreviewbot 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.

claude-review

✅ All issues from the previous review have been resolved. PR approved for merge.
Additional skills activated:

  • comment-analyzer — 71 comment lines added or modified
    Reviewed commit: 72134db26ed7

Model: gpt-5 · 6 agents · $0.253315 · ai-review-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.

1 participant