chore(docs): consolidate docs deps onto uv-managed requirements.in/requirements.txt lockfile#30
chore(docs): consolidate docs deps onto uv-managed requirements.in/requirements.txt lockfile#30isaacbmiller wants to merge 4 commits intomainfrom
Conversation
The docs build (CI in docs-push.yml and the local instructions in docs/README.md) only uses docs/requirements.txt. The Pipfile and Pipfile.lock are never installed or referenced anywhere in the repo. Their continued presence caused dependabot's pip ecosystem at /docs to open duplicate PRs (one bumping requirements.txt, one bumping the Pipfile/Pipfile.lock) and let the two dependency lists drift apart (e.g. urllib3 was bumped to 2.6.3 in requirements.txt while Pipfile still pinned 1.26.6). Removing them eliminates the duplicate PRs and makes requirements.txt the single source of truth. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Greptile SummaryThis PR consolidates the docs dependency management by removing the orphaned Confidence Score: 5/5Safe to merge — purely a dependency management housekeeping change with no logic modifications. All changes are in docs infrastructure files (dependency declarations, dependabot config, README). The CI workflow is unchanged and continues to work with pip install -r requirements.txt. No P0 or P1 findings were identified. No files require special attention. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[requirements.in\nloose top-level constraints] -->|uv pip compile\n--python-version 3.10| B[requirements.txt\nfully-pinned lockfile]
B -->|pip install -r requirements.txt| C[docs-push.yml CI\nbuild-test job]
C --> D[mkdocs build]
E[dependabot.yml\npackage-ecosystem: uv\ndirectory: /docs] -->|weekly schedule| A
E -->|Dependabot edits .in\nand regenerates .txt| B
Reviews (5): Last reviewed commit: "chore(docs): switch dependabot to uv eco..." | Re-trigger Greptile |
Replace the loose requirements.txt with a real lockfile workflow: - docs/requirements.in: the loose top-level constraints (the file that was previously docs/requirements.txt). Dependabot's pip ecosystem at /docs will update this file. - docs/requirements.txt: now an autogenerated lockfile pinning every transitive dependency, produced by 'uv pip compile requirements.in'. CI keeps installing with 'pip install -r requirements.txt' so this is transparent to the build, but docs builds are now reproducible. README documents the regeneration command. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
…bot compatibility Dependabot's pip ecosystem only recognises the pip-compile workflow when requirements.txt has the pip-tools autogenerated header (it then runs 'pip-compile' to refresh the lockfile when bumping a dep). The 'uv pip compile' header was not a guaranteed match, so regenerate with 'pip-compile' from pip-tools to use the canonical, dependabot-supported format. README updated accordingly. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
GitHub announced GA support for the uv ecosystem in dependabot in March 2025: https://github.blog/changelog/2025-03-13-dependabot-version-updates-now-support-uv-in-general-availability/ Dependabot's uv ecosystem (in dependabot/dependabot-core/uv) supports the requirements.in + requirements.txt (uv pip compile) layout natively - the FileFetcher accepts .in/.txt/uv.lock and uses uv to refresh the compiled file when bumping a dep. This lets us keep the lockfile in the same uv tooling that the rest of the repo already uses (uv.lock at the root), instead of mixing in pip-tools. - Regenerate docs/requirements.txt with 'uv pip compile' (uv-style header). - Switch /docs from package-ecosystem 'pip' to 'uv' in dependabot.yml. - Update docs/README.md with the uv-based regen command. Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Summary
The docs build was using
docs/requirements.txt(loose, mostly unpinned) whiledocs/Pipfile+docs/Pipfile.locklived next to it but were never installed by CI or referenced anywhere in the repo. Dependabot'spipecosystem at/docssaw both file groups and treated them as independent update streams, which produced duplicate PRs and silent drift between the two lists (e.g. urllib3 was bumped to 2.6.3 in requirements.txt while Pipfile still pinned 1.26.6, mkdocs-llmstxt is>=0.5.0in requirements.txt and unpinned in Pipfile, and severalrequirements.txt-only bumps were never reflected in Pipfile.lock).This PR consolidates onto a single, reproducible lockfile flow that aligns with how the rest of the repo already manages Python deps (uv).
Changes
docs/Pipfileanddocs/Pipfile.lock.docs/requirements.inwith the loose top-level constraints (this is the file that was previouslydocs/requirements.txt).docs/requirements.txtas a real lockfile viauv pip compile, pinning every transitive dependency./docsfrompackage-ecosystem: "pip"topackage-ecosystem: "uv"in.github/dependabot.yml.docs/README.mdwith theuv pip compileregeneration command.CI is unchanged —
.github/workflows/docs-push.ymlalready runspip install -r requirements.txt, which now pulls a fully locked dependency set, making docs builds reproducible.Dependabot uv ecosystem support
GitHub announced general availability of dependabot's
uvecosystem on 2025-03-13: https://github.blog/changelog/2025-03-13-dependabot-version-updates-now-support-uv-in-general-availability/. The implementation lives independabot/dependabot-coreunderuv/, and itsFileFetcher(uv/lib/dependabot/uv/file_fetcher.rb) explicitly accepts therequirements.in+requirements.txt(uv pip compile) layout:It also has a
requirements_in_file_matcher.compiled_file?check that pairs*.insource files with their*.txtcompiled outputs, so dependabot will editrequirements.inand re-run uv to regeneraterequirements.txtin the same PR.Verification
Pipfile/pipenvoutsidedocs/Pipfile.lockitself.uv pip compile docs/requirements.in -o docs/requirements.txt --python-version 3.10reproduces the committed lockfile..github/workflows/docs-push.ymlanddocs/README.mdinstall withpip install -r requirements.txt, which still works.