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 #1998 committed literal git conflict markers into docs/conf.py because _copy_md_sources sits before _write_llms_txt on sagitta 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)". 🤖 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 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 PRs: - yuriy/remove-rst-swap-mechanism (rolling) - yuriy/remove-rst-swap-mechanism-circinus Changes: - Move 210 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 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. Note: .readthedocs.yml on sagitta has no jobs: block to remove (the swap was wired only at build-time via the Makefile chain on this branch). Verified: sphinx-build -b html with --keep-going produces identical warning set (409 unique — pre-existing cli.rst/aws.rst title-level warnings on this branch), identical sitemap entry count (215), identical llms.txt entry count (23), 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 remote-tracking branch 'origin/sagitta' into fix/docs-html-title-sagittaYuriy Andamasov
# Conflicts: # docs/conf.py
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-06docs(conf.py): fail loudly when html_baseurl is missingYuriy Andamasov
Same fix as `current`: replace the silent `(app.config.html_baseurl or '').rstrip('/') + '/'` fallback with an explicit `RuntimeError`. Every supported branch sets html_baseurl, so a missing value would only ever happen as a regression. Addresses CodeRabbit review feedback on PR #1876. \xf0\x9f\xa4\x96 Generated by [robots](https://vyos.io)
2026-05-06Merge remote-tracking branch 'origin/sagitta' into feat/docs-llms-txt-sagittaYuriy Andamasov
# Conflicts: # docs/conf.py
2026-05-06feat: flip swap mechanism on sagitta — MD as primary, RST as overrideYuriy Andamasov
Mirror of #1899 (current) and #1900 (circinus) for sagitta. Same logic, same scripts, per-branch file set. Changes: - Rename docs/**/md-<stem>.md to docs/**/<stem>.md (drop md- prefix) for all 210 stems previously listed in docs/_swap.txt - Rename docs/**/<stem>.rst to docs/**/rst-<stem>.rst (add rst- prefix) for the same 210 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 imported from current (post-#1899 rewrite, with inverted rename direction) - scripts/import_myst.py and tests/test_import_myst.py deleted (obsolete) - tests/test_swap_sources.py imported from current (post-#1899 rewrite) Side-effect: fixes the same 404 on /en/1.4/ View page source links that #1899 fixed for /en/rolling/ and #1900 fixed for /en/1.5/. Per-branch differences vs #1899: - sagitta has 210 stems vs current's 254 (sagitta has no vpp pages and fewer current-only features; cli + installation/cloud/aws are still RST-only on sagitta pending the title-level fix follow-up) - 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 + content for sagitta (replaces #1886)Yuriy Andamasov
Replaces the broken #1886 with a fresh, properly-converted MyST set for the sagitta (1.4.x) docs, mirroring what landed for circinus via #1897. This PR: - Re-imports 210 md-*.md files for sagitta. Source: ran the pipelines rst-to-myst converter (chrisjsewell/rst-to-myst v0.4.0, with pandoc fallback) on sagittas RST. Post-processed via the pipelines postprocess stage (10 ordered fixes for blanks, admonitions, label hyphens, pandoc artifacts, structural blanks, linter markers). Compared to the broken #1886 content (which was left over from an earlier stage-1-only run): zero raw `<div class=>` remnants. - For 23 stems where sagittas RST is byte-identical with currents RST (mostly stable policy/protocol pages and the 404 page), reuses currents already-validated md-*.md content rather than re-converting. - Drops cli and installation/cloud/aws from sagittas swap set: their RST has SEVERE/4 "Title level inconsistent" errors that crash rst-to-myst; they need an independent RST-source fix and are kept as RST-only for now. - Adds the per-page swap mechanism: scripts/swap_sources.py, scripts/import_myst.py, the matching tests under tests/, _swap.txt with 210 stems, _ext/vyos.py MyST renderer fallback, Makefile swap-wrapped targets, .readthedocs.yml swap pre/post hooks. - Adds 187 .webp images and removes 235 superseded .jpg/.png/.jpeg static assets; flips html_logo to vyos-logo.webp. - Adds the MyST swap-related blocks to docs/conf.py only: myst_enable_extensions, myst_fence_as_directive, md-*.md exclude patterns, _swap_exclude.txt reader, _prefer_webp and _copy_md_sources setup hooks. github_version fallback set to 'sagitta' to match the branch (parallel to currents 'current' and circinuss 'circinus'). Deliberately excluded (per user direction): - llms.txt and sphinx-llms-txt / sphinx-sitemap config: these will land separately for sagitta via #1870 plus a new sagitta-specific llms.txt template PR. The conf.py here does not pull those extensions in, so the build does not depend on the new pip packages. Verification before pushing: - 210 md-*.md = 210 _swap.txt stems = 210 RST siblings on sagitta (1:1:1). - 0 files contain raw `<div class=` (the breakage that took down /en/1.5/). - conf.py copyright/version/release preserve sagittas values (2024 / 1.4 / "1.4.x (sagitta)") - not currents. - html_title from currents conf.py removed - PR #1880 is the right place for sagittas branch-localized title. Supersedes / closes on merge: - #1886 (broken converter output, would break /en/1.4/ if merged). Generated by robots https://vyos.io
2026-05-06docs: link "View page source" to GitHub instead of raw text (#1889)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 "sagitta" 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 (sagitta) (#1868)" (#1894)Daniil Baturin
This reverts commit 22e34ce5aee24d2fd11f8205522ab7ecdb3c4c5e.
2026-05-06Add incremental RST-to-MyST swap mechanism (sagitta) (#1868)Yuriy Andamasov
* feat(swap-sagitta): add incremental RST-to-MyST swap mechanism Backport of the swap mechanism from feat/incremental-myst-swap onto the sagitta release branch. Built directly on top of origin/sagitta, so the underlying RST tree is sagitta'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: - 202 md-prefixed pages from origin/myst/sagitta (md-{name}.md alongside each {name}.rst counterpart) - 1 plain MyST-only page from myst/sagitta where no .rst exists (already at canonical name on sagitta: docs/copyright.md) - 240 .webp images from myst/sagitta (added alongside the existing PNG/JPG so RST builds keep their assets) - docs/_swap.txt populated with all 202 stems → MyST is served by default, revert a page by removing its stem from _swap.txt 🤖 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) Fix conversion artifacts, typos, and technical inaccuracies applicable to the sagitta branch: curly quotes, typos (deamonless, cammans, amdifferent, trough), incorrect firewall command paths, missing closing brace in zone-policy, peer name inconsistencies, hardcoded passwords replaced with vault references, and md-*.md exclusion in conf.py. 🤖 Generated by [robots](https://vyos.io) * docs: port .readthedocs.yml jobs, _ext/vyos.py fallback and swap-script tests from PR #1857 Parity backport from PR #1857 (current) — three pieces were missing on sagitta. - .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. - docs/_ext/vyos.py: CmdInclude.run() now falls back to nested_parse() when self.state._renderer is not present. Required for cfgcmd / opcmd / cmdincludemd directives to render correctly when included from MyST pages (the swap mechanism's whole point). Sagitta-only delta on _ext/vyos.py (the path = str(path) line on 224) is intentionally untouched. - tests/test_import_myst.py, tests/test_swap_sources.py: tests for the swap scripts. The scripts on this branch are byte-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(conf): skip md-*.md staging files in _copy_md_sources Agent-Logs-Url: https://github.com/vyos/vyos-documentation/sessions/919695a7-688d-41b9-89f0-540684625dbc 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): add branch-localized html_title on sagittaYuriy Andamasov
Sagitta (1.4 LTS) had no html_title defined, so the rendered page <title> and navigation top bar fell back to the Sphinx default. The sibling LTS branch (circinus) and current both set html_title; sagitta should match for consistency. Add html_title using the existing release variable so the title resolves to "VyOS 1.4.x (sagitta) LTS". Spotted while reviewing PR #1869/#1870 feedback; unrelated to that change and pre-existing. 🤖 Generated by [robots](https://vyos.io)
2026-05-04docs: use canonical /en/1.4/ baseurl instead of /en/sagitta/ aliasYuriy Andamasov
RTD redirects /en/sagitta/* to /en/1.4/*. Pointing html_baseurl at the canonical slug makes <link rel="canonical"> and the sitemap match the URL RTD actually serves, so crawlers skip the redirect hop. /en/sagitta/ still works as an alias. 🤖 Generated by [robots](https://vyos.io)
2026-05-04docs: add llms.txt and llms-full.txt generation (sagitta)Yuriy Andamasov
- Pin sphinx-llms-txt 0.7.1 and sphinx-sitemap 2.9.0 - Set html_baseurl to https://docs.vyos.io/en/sagitta/ - llms.txt rendered at build time from a Jinja template; llms-full.txt auto-generated by sphinx-llms-txt - Optional section adapted to sagitta layout (no contributing index, no VPP) - Same change applied to current and circinus in separate PRs 🤖 Generated by [robots](https://vyos.io)
2025-02-17Disallow atlassian-bot in robots.txtrebortg
2024-11-13Update Copyright YearRobert Göhler
2024-01-14update sphinx and dependenciesrebortg
2023-11-16Bump copyright yearChristian 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`
2019-12-22Sphinx: add extentionRobert Göhler
2019-12-07Docker: Docs: enable GraphViz supportChristian Poessinger
2019-11-27conf: set full version - 1.3.x (equuleus)Christian Poessinger
2019-11-24config.py: change cfcmd to cfgcmdRobert Göhler
2019-11-23add new directives "cfcmd" and "opcmd"Robert Göhler
2019-11-08conf: add VyOS logo to generated docsChristian Poessinger