From a62cf24ea7d531dffe8540f1cfde2dedca70b515 Mon Sep 17 00:00:00 2001 From: Ross McFarland Date: Sun, 3 Aug 2025 14:43:54 -0700 Subject: [PATCH 1/4] doc requirements in setup.py and new requirements-doc.txt --- requirements-dev.txt | 12 ++--- requirements-docs.txt | 24 +++++++++ script/bootstrap | 2 +- script/update-requirements | 103 +++++++++++++++++++------------------ setup.py | 8 ++- 5 files changed, 92 insertions(+), 57 deletions(-) create mode 100644 requirements-docs.txt diff --git a/requirements-dev.txt b/requirements-dev.txt index b4b652b..1a8d501 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -2,15 +2,15 @@ Pygments==2.19.2 SecretStorage==3.3.3 black==24.10.0 -build==1.2.2.post1 -certifi==2025.7.14 +build==1.3.0 +certifi==2025.8.3 cffi==1.17.1 changelet==0.1.0 charset-normalizer==3.4.2 click==8.1.8; python_version<'3.10' click==8.2.1; python_version>='3.10' cmarkgfm==2024.11.20 -coverage==7.10.0 +coverage==7.10.1 cryptography==45.0.5 docutils==0.21.2 id==1.5.0 @@ -31,19 +31,19 @@ pathspec==0.12.1 platformdirs==4.3.8 pluggy==1.6.0 pprintpp==0.4.0 -pycountry-convert==0.7.2 pycountry==24.6.1 +pycountry-convert==0.7.2 pycparser==2.22 pyflakes==3.4.0 pyproject_hooks==1.2.0 +pytest==8.4.1 pytest-cov==6.2.1 pytest-mock==3.14.1 -pytest==8.4.1 pytest_network==0.0.1 readme_renderer==44.0 repoze.lru==0.7 -requests-toolbelt==1.0.0 requests==2.32.4 +requests-toolbelt==1.0.0 rfc3986==2.0.0 rich==14.1.0 semver==3.0.4 diff --git a/requirements-docs.txt b/requirements-docs.txt new file mode 100644 index 0000000..05efa5f --- /dev/null +++ b/requirements-docs.txt @@ -0,0 +1,24 @@ +# DO NOT EDIT THIS FILE DIRECTLY - use ./script/update-requirements to update +Jinja2==3.1.6 +MarkupSafe==3.0.2 +Sphinx==8.2.3 +accessible-pygments==0.0.5 +alabaster==1.0.0 +babel==2.17.0 +beautifulsoup4==4.13.4 +furo==2025.7.19 +imagesize==1.4.1 +mdit-py-plugins==0.4.2 +myst-parser==4.0.1 +roman-numerals-py==3.1.0 +snowballstemmer==3.0.1 +soupsieve==2.7 +sphinx-basic-ng==1.0.0b2 +sphinx-copybutton==0.5.2 +sphinxcontrib-applehelp==2.0.0 +sphinxcontrib-devhelp==2.0.0 +sphinxcontrib-htmlhelp==2.1.0 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==2.0.0 +sphinxcontrib-serializinghtml==2.0.0 +typing_extensions==4.14.1 diff --git a/script/bootstrap b/script/bootstrap index a7d85e7..90071ac 100755 --- a/script/bootstrap +++ b/script/bootstrap @@ -26,7 +26,7 @@ python -m pip install -U 'pip>=10.0.1' python -m pip install -r requirements.txt if [ "$ENV" != "production" ]; then - python -m pip install -r requirements-dev.txt + python -m pip install -r requirements-dev.txt -r requirements-docs.txt fi if [ -d ".git" ]; then diff --git a/script/update-requirements b/script/update-requirements index c1adc47..870b144 100755 --- a/script/update-requirements +++ b/script/update-requirements @@ -1,70 +1,75 @@ #!/usr/bin/env python3 -import re from os.path import join from subprocess import check_call, check_output -from sys import argv +from sys import argv, stdout from tempfile import TemporaryDirectory - -def print_packages(packages, heading): - print(f'{heading}:') - print(' ', end='') - print('\n '.join(packages)) - - -# would be nice if there was a cleaner way to get this, but I've not found a -# more reliable one. -with open('setup.py') as fh: - match = re.search(r"name='(?P[\w-]+)',", fh.read()) - if not match: - raise Exception('failed to determine our package name') - our_package_name = match.group('pkg') - print(f'our_package_name: {our_package_name}') - with TemporaryDirectory() as tmpdir: check_call(['python3', '-m', 'venv', tmpdir]) + def install_and_list(target): + check_call([join(tmpdir, 'bin', 'pip'), 'install', target]) + frozen = ( + check_output([join(tmpdir, 'bin', 'pip'), 'freeze']) + .decode('utf-8') + .strip() + .split('\n') + ) + # file bit skips ourself + return set(p.split('=', 1)[0] for p in frozen if 'file' not in p) + # base needs - check_call([join(tmpdir, 'bin', 'pip'), 'install', '.']) - frozen = check_output([join(tmpdir, 'bin', 'pip'), 'freeze']) - frozen = set(frozen.decode('utf-8').strip().split('\n')) + frozen = install_and_list('.') + # dev needs + dev_frozen = install_and_list('.[dev]') - frozen + # docs needs + docs_frozen = install_and_list('.[docs]') - dev_frozen - frozen - # dev additions - check_call([join(tmpdir, 'bin', 'pip'), 'install', '.[dev]']) - dev_frozen = check_output([join(tmpdir, 'bin', 'pip'), 'freeze']) - dev_frozen = set(dev_frozen.decode('utf-8').strip().split('\n')) - frozen - -# pip installs the module itself along with deps so we need to get that out of -# our list by finding the thing that was file installed during dev -frozen = sorted([p for p in frozen if not p.startswith(our_package_name)]) -dev_frozen = sorted( - [p for p in dev_frozen if not p.startswith(our_package_name)] -) + # find the installed version for each package + versions = {} + for pv in ( + check_output([join(tmpdir, 'bin', 'pip'), 'freeze']) + .decode('utf-8') + .strip() + .split('\n') + ): + if 'file' in pv: + # skip ourself + continue + p, v = pv.split('==') + versions[p] = (v,) # special handling for click until python 3.9 is gone due to it dropping # support for active versions early -i = [i for i, r in enumerate(dev_frozen) if r.startswith('click==')][0] -dev_frozen = ( - dev_frozen[:i] - + [ - "click==8.1.8; python_version<'3.10'", - f"{dev_frozen[i]}; python_version>='3.10'", - ] - + dev_frozen[i + 1 :] +versions['click'] = ( + "8.1.8; python_version<'3.10'", + f"{versions['click'][0]}; python_version>='3.10'", ) -print_packages(frozen, 'frozen') -print_packages(dev_frozen, 'dev_frozen') -script = argv[0] +def write_packages(fh, packages, header, prefix=''): + fh.write(header) + for p in sorted(packages): + for v in versions[p]: + fh.write(prefix) + fh.write(p) + fh.write('==') + fh.write(v) + fh.write('\n') + + +write_packages(stdout, frozen, header='base\n', prefix=' ') +write_packages(stdout, dev_frozen, header='dev\n', prefix=' ') +write_packages(stdout, docs_frozen, header='docs\n', prefix=' ') + +header = f'# DO NOT EDIT THIS FILE DIRECTLY - use {argv[0]} to update\n' with open('requirements.txt', 'w') as fh: - fh.write(f'# DO NOT EDIT THIS FILE DIRECTLY - use {script} to update\n') - fh.write('\n'.join(frozen)) - fh.write('\n') + write_packages(fh, frozen, header=header) with open('requirements-dev.txt', 'w') as fh: - fh.write(f'# DO NOT EDIT THIS FILE DIRECTLY - use {script} to update\n') - fh.write('\n'.join(dev_frozen)) - fh.write('\n') + write_packages(fh, dev_frozen, header=header) + +with open('requirements-docs.txt', 'w') as fh: + write_packages(fh, docs_frozen, header=header) diff --git a/setup.py b/setup.py index c2ca94a..5827ca7 100644 --- a/setup.py +++ b/setup.py @@ -70,7 +70,13 @@ setup( 'pyflakes>=2.2.0', 'readme_renderer[md]>=26.0', 'twine>=3.4.2', - ) + ), + 'docs': ( + 'Sphinx>=8.2.3', + 'furo>=2024.8.6', + 'myst-parser>=4.0.1', + 'sphinx-copybutton>=0.5.2', + ), }, install_requires=( 'PyYaml>=4.2b1', From 5590eca0bf1cc0d09291f21389776bfebeb7ddaf Mon Sep 17 00:00:00 2001 From: Ross McFarland Date: Sun, 3 Aug 2025 15:23:31 -0700 Subject: [PATCH 2/4] Port of @olofvndrhr, structure/setup from #1261 --- .../88a37c98bbcf4ea58b57854afb46b73c.md | 4 + .gitignore | 8 +- docs/conf.py | 96 +++++++++++++++++++ docs/index.md | 77 +++++++++++++++ docs/info/changelog.md | 5 + docs/info/license.md | 5 + script/generate-docs | 23 +++++ 7 files changed, 215 insertions(+), 3 deletions(-) create mode 100644 .changelog/88a37c98bbcf4ea58b57854afb46b73c.md create mode 100644 docs/conf.py create mode 100644 docs/index.md create mode 100644 docs/info/changelog.md create mode 100644 docs/info/license.md create mode 100755 script/generate-docs diff --git a/.changelog/88a37c98bbcf4ea58b57854afb46b73c.md b/.changelog/88a37c98bbcf4ea58b57854afb46b73c.md new file mode 100644 index 0000000..b76e407 --- /dev/null +++ b/.changelog/88a37c98bbcf4ea58b57854afb46b73c.md @@ -0,0 +1,4 @@ +--- +type: none +--- +Add sphinx doc generation \ No newline at end of file diff --git a/.gitignore b/.gitignore index 8bf8edf..829daa5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,18 +2,20 @@ # Do not add editor or OS specific ignores here. Have a look at adding # `excludesfile` to your `~/.gitconfig` to globally ignore such things. # -*.pyc -.coverage -.env /build/ /config/ +.coverage coverage.xml dist/ +docs/_build/ +docs/modules/ +.env env/ examples/migrating-to-octodns/config/ htmlcov/ nosetests.xml octodns.egg-info/ output/ +*.pyc tests/zones/unit.tests. tmp/ diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..d301241 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,96 @@ +import sys +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).parent.parent.resolve())) + +print(f"SYS.PATH={sys.path}") + +from octodns.__init__ import __version__ + +### sphinx config ### + +project = "octodns" +copyright = "2017-present" # noqa +author = "Ross McFarland" +release = __version__ + +extensions = [ + "sphinx.ext.autodoc", + "sphinx.ext.coverage", + "sphinx.ext.napoleon", + "sphinx.ext.intersphinx", + "sphinx.ext.todo", + "sphinx.ext.viewcode", + "myst_parser", + "sphinx_copybutton", +] + + +### autodoc ### + +autodoc_default_options = { + "members": True, + "undoc-members": True, + "private-members": True, + "special-members": "__init__, __repr__", + # "inherited-members": True, + "exclude-members": "__weakref__", + "show-inheritance": True, +} +autodoc_typehints = "both" +autodoc_typehints_description_target = "all" +autodoc_member_order = "bysource" + +### extlinks ### + +extlinks = { + "github": ("https://github.com/%s", "%s"), + "pypi": ("https://pypi.org/project/%s/", "%s"), +} +extlinks_detect_hardcoded_links = True + + +### intersphinx ### + +intersphinx_mapping = { + "python": ("https://docs.python.org/3", None), + "sphinx": ("https://www.sphinx-doc.org/en/master", None), + "dnspython": ("https://dnspython.readthedocs.io/en/stable/", None), + "six": ("https://six.readthedocs.io/", None), + "python-dateutil": ("https://dateutil.readthedocs.io/en/stable/", None), + "fqdn": ("https://fqdn.readthedocs.io/en/latest/", None), +} + + +### todo ### + +todo_include_todos = True + + +### myst ### + +myst_enable_extensions = [ + "colon_fence", + "deflist", +] +myst_heading_anchors = 3 + + +### content ### + +master_doc = "index" + +templates_path = ["_templates"] +html_static_path = ["_static"] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + + +### theme ### + +# html_theme = "alabaster" +html_theme = "furo" +html_theme_options = { + "source_repository": "https://github.com/octodns/octodns/", + "source_branch": "main", + "source_directory": "docs/", +} diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..595417f --- /dev/null +++ b/docs/index.md @@ -0,0 +1,77 @@ +# octodns documentation + +```{include} ../README.md +--- +end-before: '## Table of Contents' +--- +``` + +______________________________________________________________________ + +## Indices and tables + +- {ref}`genindex` +- {ref}`modindex` + +### Project info + +- [License](info/license.md) +- [Changelog](info/changelog.md) + +______________________________________________________________________ + +## User documentation + +```{toctree} +:caption: Guides: +:maxdepth: 1 +:glob: + +* +``` + +______________________________________________________________________ + +## Module documentation + +```{toctree} +:caption: Providers: +:maxdepth: 2 +:glob: + +modules/provider/* +``` + +```{toctree} +:caption: Sources: +:maxdepth: 2 +:glob: + +modules/source/* +``` + +```{toctree} +:caption: Records: +:maxdepth: 2 +:glob: + +modules/record/* +``` + +```{toctree} +:caption: Processors: +:maxdepth: 2 +:glob: + +modules/processor/* +``` + +```{toctree} +:caption: Other modules: +:titlesonly: +:glob: + +modules/* +modules/cmds/* +modules/secret/* +``` diff --git a/docs/info/changelog.md b/docs/info/changelog.md new file mode 100644 index 0000000..d108f58 --- /dev/null +++ b/docs/info/changelog.md @@ -0,0 +1,5 @@ +# Changelog + +```{include} ../../CHANGELOG.md + +``` diff --git a/docs/info/license.md b/docs/info/license.md new file mode 100644 index 0000000..eef79d3 --- /dev/null +++ b/docs/info/license.md @@ -0,0 +1,5 @@ +# License + +```{include} ../../LICENSE + +``` diff --git a/script/generate-docs b/script/generate-docs new file mode 100755 index 0000000..35bd362 --- /dev/null +++ b/script/generate-docs @@ -0,0 +1,23 @@ +#!/bin/bash + +set -e + +cd "$(dirname "$0")/.." +ROOT=$(pwd) +cd "$ROOT" + +rm -rf ./docs/_build ./docs/modules + +for f in $(find octodns -name "*.py" | grep -v __init__.py); do + module_name=$(echo $f | sed -e 's#/#.#g' -e 's/.py//') + outdir="docs/modules$(dirname $f | sed -e 's#octodns##')" + mkdir -p "$outdir" + cat < "${outdir}/${module_name}.rst" +==================================== +``${module_name}`` +==================================== +.. automodule:: ${module_name} +EOL +done + +sphinx-build -M html "${ROOT}/docs" "${ROOT}/docs/_build" "$@" From 972c229d8cae0d892b276b77621d4a08fda2f44d Mon Sep 17 00:00:00 2001 From: Ross McFarland Date: Sun, 3 Aug 2025 19:49:26 -0700 Subject: [PATCH 3/4] more sphnix (downstream) early deps --- requirements-dev.txt | 2 +- requirements-docs.txt | 10 +++++++--- script/cibuild | 2 ++ script/update-requirements | 18 ++++++++++++++++-- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index 1a8d501..3b44544 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -10,7 +10,7 @@ charset-normalizer==3.4.2 click==8.1.8; python_version<'3.10' click==8.2.1; python_version>='3.10' cmarkgfm==2024.11.20 -coverage==7.10.1 +coverage==7.10.2 cryptography==45.0.5 docutils==0.21.2 id==1.5.0 diff --git a/requirements-docs.txt b/requirements-docs.txt index 05efa5f..149e18f 100644 --- a/requirements-docs.txt +++ b/requirements-docs.txt @@ -1,15 +1,19 @@ # DO NOT EDIT THIS FILE DIRECTLY - use ./script/update-requirements to update Jinja2==3.1.6 MarkupSafe==3.0.2 -Sphinx==8.2.3 +Sphinx==7.4.7; python_version=='3.9' +Sphinx==8.1.3; python_version=='3.10' +Sphinx==8.2.3; python_version>='3.11' accessible-pygments==0.0.5 -alabaster==1.0.0 +alabaster==0.7.16; python_version<'3.10' +alabaster==1.0.0; python_version>='3.10' babel==2.17.0 beautifulsoup4==4.13.4 furo==2025.7.19 imagesize==1.4.1 mdit-py-plugins==0.4.2 -myst-parser==4.0.1 +myst-parser==3.0.1; python_version<'3.10' +myst-parser==4.0.1; python_version>='3.10' roman-numerals-py==3.1.0 snowballstemmer==3.0.1 soupsieve==2.7 diff --git a/script/cibuild b/script/cibuild index e652b72..2d919ca 100755 --- a/script/cibuild +++ b/script/cibuild @@ -29,4 +29,6 @@ echo "## formatting ############################################################ script/format --check || (echo "Formatting check failed, run ./script/format" && exit 1) echo "## tests/coverage ##############################################################" script/coverage +echo "## documentation ###############################################################" +script/generate-docs echo "## complete ####################################################################" diff --git a/script/update-requirements b/script/update-requirements index 870b144..f00a9d6 100755 --- a/script/update-requirements +++ b/script/update-requirements @@ -40,12 +40,26 @@ with TemporaryDirectory() as tmpdir: p, v = pv.split('==') versions[p] = (v,) -# special handling for click until python 3.9 is gone due to it dropping -# support for active versions early + +# special handling for older python versions due to libraries dropping support +# early +versions['alabaster'] = ( + "0.7.16; python_version<'3.10'", + f"{versions['alabaster'][0]}; python_version>='3.10'", +) versions['click'] = ( "8.1.8; python_version<'3.10'", f"{versions['click'][0]}; python_version>='3.10'", ) +versions['myst-parser'] = ( + "3.0.1; python_version<'3.10'", + f"{versions['myst-parser'][0]}; python_version>='3.10'", +) +versions['Sphinx'] = ( + "7.4.7; python_version=='3.9'", + "8.1.3; python_version=='3.10'", + f"{versions['Sphinx'][0]}; python_version>='3.11'", +) def write_packages(fh, packages, header, prefix=''): From 02208f39ae819edc317ff508d34b33c8027257bf Mon Sep 17 00:00:00 2001 From: Ross McFarland Date: Mon, 4 Aug 2025 18:16:05 -0700 Subject: [PATCH 4/4] move examples and include in docs, most important stuff. move index and license to bottom --- {examples => docs/examples}/README.md | 0 {examples => docs/examples}/basic/README.md | 2 +- .../examples}/basic/config/my-domain.com.yaml | 0 .../examples}/basic/config/octodns.yaml | 0 .../basic/config/unused-domain.io.yaml | 0 .../examples}/basic/requirements.txt | 0 .../examples}/basic/target/my-domain.com.yaml | 0 .../basic/target/unused-domain.io.yaml | 0 .../examples}/docker-compose.yml | 0 {examples => docs/examples}/env.sh | 0 .../examples}/migrating-to-octodns/README.md | 2 +- .../migrating-to-octodns/config/octodns.yaml | 0 .../populate/my-dumpable.com.yaml | 0 .../populate/octodns.yaml | 0 .../populate/unused-dumpable.com.yaml | 0 .../migrating-to-octodns/requirements.txt | 0 docs/index.md | 35 ++++++++++++------- 17 files changed, 25 insertions(+), 14 deletions(-) rename {examples => docs/examples}/README.md (100%) rename {examples => docs/examples}/basic/README.md (99%) rename {examples => docs/examples}/basic/config/my-domain.com.yaml (100%) rename {examples => docs/examples}/basic/config/octodns.yaml (100%) rename {examples => docs/examples}/basic/config/unused-domain.io.yaml (100%) rename {examples => docs/examples}/basic/requirements.txt (100%) rename {examples => docs/examples}/basic/target/my-domain.com.yaml (100%) rename {examples => docs/examples}/basic/target/unused-domain.io.yaml (100%) rename {examples => docs/examples}/docker-compose.yml (100%) rename {examples => docs/examples}/env.sh (100%) rename {examples => docs/examples}/migrating-to-octodns/README.md (99%) rename {examples => docs/examples}/migrating-to-octodns/config/octodns.yaml (100%) rename {examples => docs/examples}/migrating-to-octodns/populate/my-dumpable.com.yaml (100%) rename {examples => docs/examples}/migrating-to-octodns/populate/octodns.yaml (100%) rename {examples => docs/examples}/migrating-to-octodns/populate/unused-dumpable.com.yaml (100%) rename {examples => docs/examples}/migrating-to-octodns/requirements.txt (100%) diff --git a/examples/README.md b/docs/examples/README.md similarity index 100% rename from examples/README.md rename to docs/examples/README.md diff --git a/examples/basic/README.md b/docs/examples/basic/README.md similarity index 99% rename from examples/basic/README.md rename to docs/examples/basic/README.md index f210881..c692a99 100644 --- a/examples/basic/README.md +++ b/docs/examples/basic/README.md @@ -1,4 +1,4 @@ -## Basic octoDNS Setup +# Basic octoDNS Setup This is the starting point octoDNS config, it's pretty similar to what you might see for managing a set of personal domains or a small business. diff --git a/examples/basic/config/my-domain.com.yaml b/docs/examples/basic/config/my-domain.com.yaml similarity index 100% rename from examples/basic/config/my-domain.com.yaml rename to docs/examples/basic/config/my-domain.com.yaml diff --git a/examples/basic/config/octodns.yaml b/docs/examples/basic/config/octodns.yaml similarity index 100% rename from examples/basic/config/octodns.yaml rename to docs/examples/basic/config/octodns.yaml diff --git a/examples/basic/config/unused-domain.io.yaml b/docs/examples/basic/config/unused-domain.io.yaml similarity index 100% rename from examples/basic/config/unused-domain.io.yaml rename to docs/examples/basic/config/unused-domain.io.yaml diff --git a/examples/basic/requirements.txt b/docs/examples/basic/requirements.txt similarity index 100% rename from examples/basic/requirements.txt rename to docs/examples/basic/requirements.txt diff --git a/examples/basic/target/my-domain.com.yaml b/docs/examples/basic/target/my-domain.com.yaml similarity index 100% rename from examples/basic/target/my-domain.com.yaml rename to docs/examples/basic/target/my-domain.com.yaml diff --git a/examples/basic/target/unused-domain.io.yaml b/docs/examples/basic/target/unused-domain.io.yaml similarity index 100% rename from examples/basic/target/unused-domain.io.yaml rename to docs/examples/basic/target/unused-domain.io.yaml diff --git a/examples/docker-compose.yml b/docs/examples/docker-compose.yml similarity index 100% rename from examples/docker-compose.yml rename to docs/examples/docker-compose.yml diff --git a/examples/env.sh b/docs/examples/env.sh similarity index 100% rename from examples/env.sh rename to docs/examples/env.sh diff --git a/examples/migrating-to-octodns/README.md b/docs/examples/migrating-to-octodns/README.md similarity index 99% rename from examples/migrating-to-octodns/README.md rename to docs/examples/migrating-to-octodns/README.md index 15c1742..92b6d47 100644 --- a/examples/migrating-to-octodns/README.md +++ b/docs/examples/migrating-to-octodns/README.md @@ -1,4 +1,4 @@ -## Migrating to octoDNS via octodns-dump +# Migrating to octoDNS via octodns-dump Importing an existing DNS setup into octoDNS management is a very straightforward process and can generally be completed in minutes. diff --git a/examples/migrating-to-octodns/config/octodns.yaml b/docs/examples/migrating-to-octodns/config/octodns.yaml similarity index 100% rename from examples/migrating-to-octodns/config/octodns.yaml rename to docs/examples/migrating-to-octodns/config/octodns.yaml diff --git a/examples/migrating-to-octodns/populate/my-dumpable.com.yaml b/docs/examples/migrating-to-octodns/populate/my-dumpable.com.yaml similarity index 100% rename from examples/migrating-to-octodns/populate/my-dumpable.com.yaml rename to docs/examples/migrating-to-octodns/populate/my-dumpable.com.yaml diff --git a/examples/migrating-to-octodns/populate/octodns.yaml b/docs/examples/migrating-to-octodns/populate/octodns.yaml similarity index 100% rename from examples/migrating-to-octodns/populate/octodns.yaml rename to docs/examples/migrating-to-octodns/populate/octodns.yaml diff --git a/examples/migrating-to-octodns/populate/unused-dumpable.com.yaml b/docs/examples/migrating-to-octodns/populate/unused-dumpable.com.yaml similarity index 100% rename from examples/migrating-to-octodns/populate/unused-dumpable.com.yaml rename to docs/examples/migrating-to-octodns/populate/unused-dumpable.com.yaml diff --git a/examples/migrating-to-octodns/requirements.txt b/docs/examples/migrating-to-octodns/requirements.txt similarity index 100% rename from examples/migrating-to-octodns/requirements.txt rename to docs/examples/migrating-to-octodns/requirements.txt diff --git a/docs/index.md b/docs/index.md index 595417f..90f0905 100644 --- a/docs/index.md +++ b/docs/index.md @@ -8,26 +8,25 @@ end-before: '## Table of Contents' ______________________________________________________________________ -## Indices and tables - -- {ref}`genindex` -- {ref}`modindex` - -### Project info - -- [License](info/license.md) -- [Changelog](info/changelog.md) +## User documentation -______________________________________________________________________ +```{toctree} +:caption: Getting Started: +:maxdepth: 1 -## User documentation +examples/basic/README.md +examples/migrating-to-octodns/README.md +records.md +``` ```{toctree} :caption: Guides: :maxdepth: 1 :glob: -* +[a-q]* +#records.md +[s-z]* ``` ______________________________________________________________________ @@ -75,3 +74,15 @@ modules/* modules/cmds/* modules/secret/* ``` + +______________________________________________________________________ + +## Indices and tables + +- {ref}`genindex` +- {ref}`modindex` + +### Project info + +- [License](info/license.md) +- [Changelog](info/changelog.md)