summaryrefslogtreecommitdiff
path: root/docs/conf.py
AgeCommit message (Collapse)Author
2026-05-12T8843: Fix conflict markers committed by Mergify backport of #1994Yuriy Andamasov
The auto-backport PR #1999 committed literal git conflict markers into docs/conf.py because _copy_md_sources sits before _write_llms_txt on circinus but after it on rolling — cherry-pick failed to locate the patch context and dropped the entire new function as a duplicate with markers. Removes the conflict-marker block and applies the actual 3-line guard to the existing _copy_md_sources function. Build was failing with "SyntaxError: invalid syntax (conf.py, line 309)". 🤖 Generated by [robots](https://vyos.io)
2026-05-12Fix recursive _build directory nesting errorQuill Cronwall
(cherry picked from commit ec6f33f3c256e839b443bb2baac14bff32132811) # Conflicts: # docs/conf.py
2026-05-10chore: remove RST swap mechanism, archive rst-*.rst under docs/_rst_legacy/Yuriy Andamasov
The swap mechanism (RST-as-fallback for migrated MD pages) is dormant — docs/_rst_overrides.txt has been empty since the MyST flip trio (#1899/#1900/#1901) landed. The mechanism's surface area is dead weight and the rst-*.rst shadows scattered across the source tree cause Context7's parser to misclassify the project as RST. Sibling PR on rolling: yuriy/remove-rst-swap-mechanism Changes: - Move 253 rst-*.rst shadow files into docs/_rst_legacy/ preserving subdirectory structure. They remain in the repo for reference; Sphinx excludes the folder via exclude_patterns. - Strip swap_sources.py invocation from docs/Makefile. - Strip jobs: pre_build/post_build block from .readthedocs.yml. - Strip rst-*.rst exclude entry and the _md_exclude.txt loader from docs/conf.py; replace with a single _rst_legacy exclude. - Delete scripts/swap_sources.py, tests/test_swap_sources.py, docs/_rst_overrides.txt. - Update AGENTS.md: drop the "RST override mechanism" section and the test-runner snippet for the deleted test. Verified: sphinx-build -b html with --keep-going produces identical warning set (68 unique), identical sitemap entry count (267), identical llms.txt entry count (22), zero rst-* URLs in any artifact. 🤖 Generated by [robots](https://vyos.io)
2026-05-07feat(docs): move Cookiebot CBID to COOKIEBOT_ID env varYuriy Andamasov
Read COOKIEBOT_ID from the environment via conf.py html_context, replacing the hardcoded data-cbid value in layout.html. Guards tightened to {% if gtm_id and cookiebot_id %} so neither GTM nor Cookiebot loads unless both IDs are present. 🤖 Generated by [robots](https://vyos.io)
2026-05-07feat(docs): read GTM_ID from environment instead of hardcodingYuriy Andamasov
Move the Google Tag Manager container ID out of the template and into conf.py via os.environ.get('GTM_ID', ''), exposed to Jinja via html_context. Set GTM_ID in the RTD project environment variables. 🤖 Generated by [robots](https://vyos.io)
2026-05-07Merge pull request #1879 from vyos/fix/docs-html-title-circinusYuriy Andamasov
docs(conf): set branch-localized html_title on circinus
2026-05-07docs(conf.py): fix stale .html reference in fail-fast commentYuriy Andamasov
Last residual `.html` reference in the `_write_llms_txt` hook comments — the html_baseurl-empty failure-path comment said "rendering /quick-start.html etc." but the template now emits `.md` URLs. Update the example to `/quick-start.md` to match the actual output. Comment-only change. Same fix applied symmetrically across [#1874](https://github.com/vyos/vyos-documentation/pull/1874), [#1876](https://github.com/vyos/vyos-documentation/pull/1876), and [#1903](https://github.com/vyos/vyos-documentation/pull/1903). Addresses Copilot review feedback on PR #1903. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07docs(llms.txt): update dirhtml-skip rationale after .md pivotYuriy Andamasov
The previous comment on `_write_llms_txt` (and on the LLM-Facing Files section in CLAUDE.md) justified the `dirhtml` skip by claiming the template's `.html` URLs wouldn't resolve under `dirhtml` output. That became stale after [#1874@5fe7f9ad](https://github.com/vyos/vyos-documentation/pull/1874/commits/5fe7f9ad) (and parity commits on [#1876](https://github.com/vyos/vyos-documentation/pull/1876)/[#1903](https://github.com/vyos/vyos-documentation/pull/1903)) pivoted the curated template to `.md` URLs — `_copy_md_sources` puts `.md` files at their source-relative paths regardless of builder, so the rendered llms.txt would actually resolve fine under `dirhtml` now. The real reason we skip `dirhtml` is simpler: production publishes only via the `html`/`readthedocs` builders, and we don't render llms.txt for builds we don't ship. Local `make dirhtml` is a developer convenience, not a publish target. Reword the conf.py comment and the CLAUDE.md section to say that plainly. No code-behavior change. Addresses Copilot review feedback on PR #1874 (3 threads on docs/conf.py, docs/_templates/llms.txt.j2, and CLAUDE.md flagging the inconsistency). \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07docs(conf.py): set Jinja autoescape=False explicitly for llms.txt templateYuriy Andamasov
The llms.txt template renders plain text (markdown), not HTML, so the HTML autoescape rules that bandit/ruff S701 flags don't apply. Explicit `autoescape=False` silences the lint while documenting the intent — there's no HTML context to escape into here. Behavior unchanged (Jinja's default `autoescape=False` was already in effect); this just makes it visible. Same change applied symmetrically across [#1874](https://github.com/vyos/vyos-documentation/pull/1874) (current), [#1876](https://github.com/vyos/vyos-documentation/pull/1876) (sagitta), and [#1903](https://github.com/vyos/vyos-documentation/pull/1903) (circinus). Addresses CodeRabbit review feedback (S701) on PR #1876. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07docs(conf.py): use FileSystemLoader/get_template for better tracebacksYuriy Andamasov
Switch from `Environment.from_string(tpl_path.read_text(...))` to `Environment(loader=FileSystemLoader(...)).get_template('llms.txt.j2')`. When `StrictUndefined` raises on a typo in `llms.txt.j2` (e.g. `{{ relase }}`), the traceback now references the real template filename and line number instead of an anonymous in-memory template. That makes debugging template typos materially easier without changing any other behavior — same fail-fast guard, same trailing-newline handling, same rendered output. Same change applied symmetrically across [#1874](https://github.com/vyos/vyos-documentation/pull/1874) (current), [#1876](https://github.com/vyos/vyos-documentation/pull/1876) (sagitta), and [#1903](https://github.com/vyos/vyos-documentation/pull/1903) (circinus) so the hook stays identical across branches. Addresses CodeRabbit/Copilot review feedback on PR #1903. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07docs(conf.py): add docstring to _write_llms_txt hookYuriy Andamasov
Document the hook's purpose, inputs (`html_baseurl` + `release`), output (`<outdir>/llms.txt`), and the division of labor with `sphinx_llms_txt` (which handles `llms-full.txt`). Also functions as a real-content nudge to GitHub's PR ref pipeline, which was failing to create `refs/pull/1903/head` after the initial empty-commit + close+reopen attempts. The substantive doc improvement is independently worthwhile. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-07docs: render llms.txt at build time (circinus)Yuriy Andamasov
Parity with [#1874](https://github.com/vyos/vyos-documentation/pull/1874) (current) and [#1876](https://github.com/vyos/vyos-documentation/pull/1876) (sagitta). Replaces the static `docs/_html_extra/llms.txt` with a Jinja template (`docs/_templates/llms.txt.j2`) rendered at build time via a `build-finished` hook in `conf.py`. URLs and the version line are interpolated from `html_baseurl` and `release`, so the rendered file always matches what circinus actually serves. Hook behavior matches `current`/`sagitta` exactly, including the two review-cycle hardenings landed on those PRs: - Skips on builders other than `html` and `readthedocs` — the curated template encodes `.html` URLs which don't match `dirhtml` output. - `RuntimeError` if `html_baseurl` is empty rather than silently rendering broken root-relative URLs. - Jinja `Environment(undefined=StrictUndefined)` so a typo in `llms.txt.j2` raises at build time instead of writing a half-blank `llms.txt`. The closed PR [#1875](https://github.com/vyos/vyos-documentation/pull/1875) was the previous attempt; this re-lands the change after the post-flip rebase situation cleared. Verified locally: hook tests (happy-path render, fail-fast on `html_baseurl=None`/`''`, `StrictUndefined` catches `{{ relase }}` typo, skips `dirhtml`, skips on build exception) pass against this worktree. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-06feat: flip swap mechanism on circinus — MD as primary, RST as overrideYuriy Andamasov
Mirror of #1899 for circinus. Same logic, same scripts, per-branch file set. Changes: - Rename docs/**/md-<stem>.md to docs/**/<stem>.md (drop md- prefix) for all 253 stems previously listed in docs/_swap.txt - Rename docs/**/<stem>.rst to docs/**/rst-<stem>.rst (add rst- prefix) for the same 253 stems - Repurpose docs/_swap.txt as docs/_rst_overrides.txt; initially empty - conf.py exclude_patterns flipped: rst-*.rst excluded by default - conf.py runtime-artifact references updated to _rst_override_state.json and _md_exclude.txt - scripts/swap_sources.py rewritten with inverted rename direction (rst-<stem>.rst → <stem>.rst when applying overrides; <stem>.md excluded via _md_exclude.txt) - scripts/import_myst.py and tests/test_import_myst.py deleted (obsolete) - tests/test_swap_sources.py rewritten for new semantics Identical change set to #1899 (current). Per-branch differences: - circinus has 253 stems vs current's 254 (suricata is current-only) - otherwise the script/conf.py/test changes are byte-identical with current Generated by robots https://vyos.io
2026-05-06feat: import MyST swap mechanism, llms.txt feature, and content from currentYuriy Andamasov
Replaces the broken #1885/#1869/#1875 trio with a single PR for circinus. This PR: - Imports 254 md-*.md files from currents working MyST conversion (the broken converter that produced #1885s md-*.md files is not used here; currents files are correct as verified on /en/rolling/). - Adds the per-page RST-to-MyST swap mechanism: scripts/swap_sources.py, scripts/import_myst.py, tests, _swap.txt, _ext/vyos.py and Makefile swap-wrapped targets, .readthedocs.yml pre/post hooks. - Replaces 175 .jpg/.png with 187 .webp images for swapped pages. - Adds the llms.txt + sitemap feature (sphinx_llms_txt, sphinx_sitemap) with circinus-tailored html_baseurl https://docs.vyos.io/en/1.5/ and curated docs/_html_extra/llms.txt for 1.5.x. - Updates docs/_html_extra/robots.txt with AI crawler Allow rules and the /en/1.5/sitemap.xml reference. - Drops configuration/service/suricata from the swap set (no matching RST sibling on circinus; suricata is a current-only feature). Supersedes: - #1885 (broken md-*.md converter output) - #1869 (LLM doc adaptation backport, bundled here) - #1875 (llms.txt circinus, bundled here) Generated by robots https://vyos.io
2026-05-06Revert "docs: fix typos and grammar (ported from #1852 RST → MyST)"Yuriy Andamasov
2026-05-06docs: address review feedback (backport from PR #1857)Yuriy Andamasov
🤖 Generated by [robots](https://vyos.io)
2026-05-06feat(conf): copy .md sources into HTML output for plain-text servingYuriy Andamasov
Adds a build-finished hook that mirrors every .md file from the Sphinx source tree into the HTML output directory verbatim, making unrendered MyST sources accessible alongside HTML renders at the same URL path. 🤖 Generated by [robots](https://vyos.io)
2026-05-06feat(swap-circinus): add incremental RST-to-MyST swap mechanismYuriy Andamasov
Backport of the swap mechanism from feat/incremental-myst-swap onto the circinus release branch. Built directly on top of origin/circinus, so the underlying RST tree is circinus's (not current's). Mechanism: - scripts/import_myst.py — import md from myst/* with md- prefix - scripts/swap_sources.py — rename md-{name}.md → {name}.md before Sphinx builds, restore after; writes _build/_swap_state.json and _build/_swap_exclude.txt - docs/Makefile — html/dirhtml/pdf/livehtml all run swap → build → trap restore; explicit `swap` and `restore` targets too - docs/conf.py — MyST extensions enabled; swap exclude_patterns loader; _prefer_webp builder hook so html prefers webp over png Content (all from origin/myst/circinus): - 253 md-prefixed pages alongside each {name}.rst counterpart - 1 plain MyST-only page kept at canonical name (docs/copyright.md, no .rst counterpart) - 182 .webp images added (circinus release previously had only PNG/JPG; this PR brings webp into circinus alongside the originals) - docs/_swap.txt populated with all 253 stems → MyST is served by default; revert a page by removing its stem from _swap.txt 🤖 Generated by [robots](https://vyos.io)
2026-05-06docs: link "View page source" to GitHub instead of raw text (#1888)Yuriy Andamasov
* docs: link "View page source" to GitHub instead of raw text Adds html_context with display_github=True so the sphinx_rtd_theme generates an "Edit on GitHub" link. READTHEDOCS_GIT_IDENTIFIER is used to point at the exact branch/PR ref being built; falls back to "circinus" for local builds. 🤖 Generated by [robots](https://vyos.io) * docs: fix GitHub source link on RTD PR preview builds On external (PR preview) builds READTHEDOCS_GIT_IDENTIFIER is set to the PR number, which is not a valid GitHub ref. Use the commit hash instead for external builds; branch name for regular builds. 🤖 Generated by [robots](https://vyos.io)
2026-05-06Revert "Add incremental RST-to-MyST swap mechanism (circinus) (#1867)" (#1893)Daniil Baturin
This reverts commit 5eb383a10ec92c65eed525bc174785a6852e997f.
2026-05-06Add incremental RST-to-MyST swap mechanism (circinus) (#1867)Yuriy Andamasov
* feat(swap-circinus): add incremental RST-to-MyST swap mechanism Backport of the swap mechanism from feat/incremental-myst-swap onto the circinus release branch. Built directly on top of origin/circinus, so the underlying RST tree is circinus's (not current's). Mechanism: - scripts/import_myst.py — import md from myst/* with md- prefix - scripts/swap_sources.py — rename md-{name}.md → {name}.md before Sphinx builds, restore after; writes _build/_swap_state.json and _build/_swap_exclude.txt - docs/Makefile — html/dirhtml/pdf/livehtml all run swap → build → trap restore; explicit `swap` and `restore` targets too - docs/conf.py — MyST extensions enabled; swap exclude_patterns loader; _prefer_webp builder hook so html prefers webp over png Content (all from origin/myst/circinus): - 253 md-prefixed pages alongside each {name}.rst counterpart - 1 plain MyST-only page kept at canonical name (docs/copyright.md, no .rst counterpart) - 182 .webp images added (circinus release previously had only PNG/JPG; this PR brings webp into circinus alongside the originals) - docs/_swap.txt populated with all 253 stems → MyST is served by default; revert a page by removing its stem from _swap.txt 🤖 Generated by [robots](https://vyos.io) * fix(ext): handle RST fallback in CmdInclude when _renderer absent `cmdincludemd` is in `myst_fence_as_directive`, so MyST routes fence blocks through `render_fence → render_restructuredtext → MockRSTParser`. In that path `self.state` is a plain docutils Body with no `_renderer`, crashing the RTD build. Fall back to `nested_parse` when `_renderer` is unavailable so the directive works in both MyST and RST/MockRSTParser contexts. 🤖 Generated by [robots](https://vyos.io) * feat(conf): copy .md sources into HTML output for plain-text serving Adds a build-finished hook that mirrors every .md file from the Sphinx source tree into the HTML output directory verbatim, making unrendered MyST sources accessible alongside HTML renders at the same URL path. 🤖 Generated by [robots](https://vyos.io) * docs: address review feedback (backport from PR #1857) 🤖 Generated by [robots](https://vyos.io) * docs: port .readthedocs.yml jobs and swap-script tests from PR #1857 Parity backport from PR #1857 (current) — was missing on circinus. - .readthedocs.yml: add build.jobs.pre_build / post_build hooks that run scripts/swap_sources.py --swap before the Sphinx build and --restore after. Without this, the swap mechanism ships but never runs on RTD builds for this branch — the swap is a silent no-op. - tests/test_import_myst.py, tests/test_swap_sources.py: tests for the swap scripts. The scripts are identical to current's, so the same tests apply. Travels with the branch so CI catches per-branch regressions if the scripts ever drift. 🤖 Generated by [robots](https://vyos.io) * fix(review): add conftest, filter md- from copy, fix _prefer_webp builder list, trailing newline Agent-Logs-Url: https://github.com/vyos/vyos-documentation/sessions/64b17346-8739-4346-b619-84438cddef21 Co-authored-by: andamasov <12631358+andamasov@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: andamasov <12631358+andamasov@users.noreply.github.com>
2026-05-05docs(conf): set branch-localized html_title on circinusYuriy Andamasov
Circinus is the 1.5 LTS train, but docs/conf.py hard-coded the rolling-release title from the current branch. The page title rendered as "VyOS rolling release (current)" on the 1.5 LTS docs. Use the existing branch-localized release variable so the title resolves to "VyOS 1.5.x (circinus) LTS". Spotted while reviewing PR #1869 feedback; unrelated to that change and pre-existing. 🤖 Generated by [robots](https://vyos.io)
2026-02-16DOC: Proofreading copyright.md (#1744)LiudmylaNad
2025-11-24docs: Correct title for rolling-release "latest" docs (#1713)Alexandr K.
Update title to "VyOS rolling release (current)" to replace the misleading "VyOS 1.5.x (circinus) documentation" and keep wording consistent with other pages.
2025-02-17Disallow atlassian-bot in robots.txtrebortg
(cherry picked from commit 0e440465338457b513e8b295f95b112bde75074b)
2024-11-17Revert "readthedocs 404 test"rebortg
This reverts commit 28f6ad1e3e93c3749bc3ae4127a372aeedb7b1e5.
2024-11-17readthedocs 404 testrebortg
2024-02-19Styles refactoring (#1278)bogdankol
2024-01-13update sphinx and dependenciesrebortg
2023-11-16Bump version to 1.5Christian Breunig
2023-07-31add translation featurerebortg
2022-10-21prepare transifexrebortg
2022-04-01add sphinx panels and create 6 panels on index.rstrebortg
2022-01-24Add Markdown supportDaniil Baturin
2021-06-14autosectionslabels: reactivate pluginRobert Göhler
2021-06-11conf.py: disable autosectionlabel b/c of a unexpected build error on readthedocsRobert Göhler
2021-06-11add autosectionlabel plugin and explanationrebortg
2021-02-05Bump version to 1.4Christian Poessinger
2021-01-24Update year to 2021Christian Poessinger
2020-12-08fix version namerebortg
2020-11-26increase versionrebortg
2020-07-18404: catch page not found errorrebortg
2020-02-18VyOS Extension: fix comandlist margin in pdf and apply custom css in htmlRobert Göhler
2020-01-21conf: copyright 2020Christian Poessinger
2020-01-21conf: remove empty pages after each chapterChristian Poessinger
2020-01-04Merge branch 'master' into newdirectivesRobert Göhler
2020-01-04conf.py: resolve merge conflictRobert Göhler
2020-01-04Merge branch 'newdirectives'Robert Göhler
2020-01-04latex: add preamble for directive blockRobert Göhler
2019-12-29sphinx: integrate standalone vytask command in conf.pyRobert Göhler
References to VyOS Phabricator can now be build by using the statemenmt: :vytask:`T1234`