sphinx-section-include 2026.11.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sphinx_section_include-2026.11.1/.git_archival.txt +1 -0
- sphinx_section_include-2026.11.1/.gitattributes +3 -0
- sphinx_section_include-2026.11.1/.github/dependabot.yml +23 -0
- sphinx_section_include-2026.11.1/.github/workflows/autofix.yml +36 -0
- sphinx_section_include-2026.11.1/.github/workflows/ci.yml +77 -0
- sphinx_section_include-2026.11.1/.github/workflows/dependabot-merge.yml +19 -0
- sphinx_section_include-2026.11.1/.github/workflows/lint.yml +61 -0
- sphinx_section_include-2026.11.1/.github/workflows/release.yml +89 -0
- sphinx_section_include-2026.11.1/.gitignore +129 -0
- sphinx_section_include-2026.11.1/.prettierrc +11 -0
- sphinx_section_include-2026.11.1/.vale.ini +13 -0
- sphinx_section_include-2026.11.1/.vscode/extensions.json +6 -0
- sphinx_section_include-2026.11.1/.vscode/settings.json +14 -0
- sphinx_section_include-2026.11.1/CHANGELOG.md +3 -0
- sphinx_section_include-2026.11.1/CONTRIBUTING.rst +121 -0
- sphinx_section_include-2026.11.1/LICENSE +21 -0
- sphinx_section_include-2026.11.1/PKG-INFO +116 -0
- sphinx_section_include-2026.11.1/README.rst +90 -0
- sphinx_section_include-2026.11.1/changelog/2026.11.01.md +7 -0
- sphinx_section_include-2026.11.1/newsfragments/.gitkeep +0 -0
- sphinx_section_include-2026.11.1/prek.toml +423 -0
- sphinx_section_include-2026.11.1/pyproject.toml +461 -0
- sphinx_section_include-2026.11.1/sample/__init__.py +1 -0
- sphinx_section_include-2026.11.1/sample/source/__init__.py +1 -0
- sphinx_section_include-2026.11.1/sample/source/chapters/instructions.txt +5 -0
- sphinx_section_include-2026.11.1/sample/source/chapters/source.rst +24 -0
- sphinx_section_include-2026.11.1/sample/source/conf.py +4 -0
- sphinx_section_include-2026.11.1/sample/source/index.rst +7 -0
- sphinx_section_include-2026.11.1/sample/source/quickstart.rst +6 -0
- sphinx_section_include-2026.11.1/setup.cfg +4 -0
- sphinx_section_include-2026.11.1/spelling_private_dict.txt +26 -0
- sphinx_section_include-2026.11.1/src/sphinx_section_include/__init__.py +40 -0
- sphinx_section_include-2026.11.1/src/sphinx_section_include/directive.py +232 -0
- sphinx_section_include-2026.11.1/src/sphinx_section_include/py.typed +0 -0
- sphinx_section_include-2026.11.1/src/sphinx_section_include/reader.py +110 -0
- sphinx_section_include-2026.11.1/src/sphinx_section_include/sections.py +78 -0
- sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/PKG-INFO +116 -0
- sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/SOURCES.txt +50 -0
- sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/dependency_links.txt +1 -0
- sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/not-zip-safe +1 -0
- sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/requires.txt +2 -0
- sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/scm_file_list.json +46 -0
- sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/scm_version.json +8 -0
- sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/top_level.txt +1 -0
- sphinx_section_include-2026.11.1/styles/snapper/LongProseLine.yml +11 -0
- sphinx_section_include-2026.11.1/styles/snapper/SemanticLineBreaks.yml +11 -0
- sphinx_section_include-2026.11.1/tests/__init__.py +1 -0
- sphinx_section_include-2026.11.1/tests/conftest.py +3 -0
- sphinx_section_include-2026.11.1/tests/test_directive.py +387 -0
- sphinx_section_include-2026.11.1/tests/test_sections.py +125 -0
- sphinx_section_include-2026.11.1/tests/wheel_smoke.py +72 -0
- sphinx_section_include-2026.11.1/zizmor.yml +12 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ref-names: $Format:%D$
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 2
|
|
3
|
+
|
|
4
|
+
updates:
|
|
5
|
+
- package-ecosystem: pip
|
|
6
|
+
allow:
|
|
7
|
+
- dependency-type: all
|
|
8
|
+
directory: /
|
|
9
|
+
schedule:
|
|
10
|
+
interval: daily
|
|
11
|
+
open-pull-requests-limit: 10
|
|
12
|
+
# doc8 caps Docutils at 0.21.2, and doccmd's MyST dependency caps it below 0.23.
|
|
13
|
+
# Remove this ignore when both tools support newer Docutils versions.
|
|
14
|
+
ignore:
|
|
15
|
+
- dependency-name: docutils
|
|
16
|
+
versions: ['>0.21.2']
|
|
17
|
+
- package-ecosystem: github-actions
|
|
18
|
+
directory: /
|
|
19
|
+
schedule:
|
|
20
|
+
interval: daily
|
|
21
|
+
|
|
22
|
+
# Dependabot cannot read prek.toml yet:
|
|
23
|
+
# https://github.com/dependabot/dependabot-core/issues/14624
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: autofix.ci
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
pull_request: {}
|
|
6
|
+
push:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
autofix:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v7
|
|
17
|
+
with:
|
|
18
|
+
fetch-depth: 0
|
|
19
|
+
fetch-tags: true
|
|
20
|
+
persist-credentials: false
|
|
21
|
+
|
|
22
|
+
- name: Install uv
|
|
23
|
+
uses: astral-sh/setup-uv@v10.3.2
|
|
24
|
+
|
|
25
|
+
- name: Run fixers
|
|
26
|
+
uses: j178/prek-action@v3.1.0
|
|
27
|
+
with:
|
|
28
|
+
prek-version: 0.5.7
|
|
29
|
+
extra-args: >-
|
|
30
|
+
--all-files --hook-stage pre-commit --no-fail-fast --verbose
|
|
31
|
+
env:
|
|
32
|
+
UV_NO_CACHE: '1'
|
|
33
|
+
UV_PYTHON: 3.13
|
|
34
|
+
|
|
35
|
+
- uses: autofix-ci/action@v1.3.4
|
|
36
|
+
if: always()
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: CI
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
pull_request: {}
|
|
8
|
+
schedule:
|
|
9
|
+
# * is a special character in YAML so you have to quote this string
|
|
10
|
+
# Run at 1:00 every day
|
|
11
|
+
- cron: 0 1 * * *
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
build:
|
|
18
|
+
strategy:
|
|
19
|
+
matrix:
|
|
20
|
+
python-version: ['3.12', '3.13', '3.14', '3.15']
|
|
21
|
+
uv-resolution: [highest, lowest-direct]
|
|
22
|
+
platform: [ubuntu-latest, windows-latest]
|
|
23
|
+
|
|
24
|
+
runs-on: ${{ matrix.platform }}
|
|
25
|
+
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v7
|
|
28
|
+
|
|
29
|
+
with:
|
|
30
|
+
persist-credentials: false
|
|
31
|
+
- name: Install uv
|
|
32
|
+
uses: astral-sh/setup-uv@v10.3.2
|
|
33
|
+
with:
|
|
34
|
+
enable-cache: true
|
|
35
|
+
cache-dependency-glob: '**/pyproject.toml'
|
|
36
|
+
|
|
37
|
+
- name: Build sample
|
|
38
|
+
run: |
|
|
39
|
+
uv run --group=dev sphinx-build -W -b html sample/source sample/build
|
|
40
|
+
env:
|
|
41
|
+
UV_PYTHON: ${{ matrix.python-version }}
|
|
42
|
+
UV_RESOLUTION: ${{ matrix.uv-resolution }}
|
|
43
|
+
|
|
44
|
+
- name: Build sample parallel
|
|
45
|
+
run: |
|
|
46
|
+
uv run --group=dev sphinx-build -j 2 -E -W -b html sample/source sample/build-parallel
|
|
47
|
+
env:
|
|
48
|
+
UV_PYTHON: ${{ matrix.python-version }}
|
|
49
|
+
UV_RESOLUTION: ${{ matrix.uv-resolution }}
|
|
50
|
+
|
|
51
|
+
- name: Run tests
|
|
52
|
+
run: |
|
|
53
|
+
uv run --group=dev pytest -s -vvv . --cov --cov-config=pyproject.toml
|
|
54
|
+
env:
|
|
55
|
+
UV_PYTHON: ${{ matrix.python-version }}
|
|
56
|
+
UV_RESOLUTION: ${{ matrix.uv-resolution }}
|
|
57
|
+
|
|
58
|
+
- name: Build distributions and test the installed wheel
|
|
59
|
+
run: |
|
|
60
|
+
uv build
|
|
61
|
+
uv run --group=release check-wheel-contents dist/*.whl
|
|
62
|
+
uv run --group=dev python tests/wheel_smoke.py
|
|
63
|
+
env:
|
|
64
|
+
UV_PYTHON: ${{ matrix.python-version }}
|
|
65
|
+
UV_RESOLUTION: ${{ matrix.uv-resolution }}
|
|
66
|
+
|
|
67
|
+
completion-ci:
|
|
68
|
+
needs: build
|
|
69
|
+
runs-on: ubuntu-latest
|
|
70
|
+
if: ${{ !cancelled() }}
|
|
71
|
+
steps:
|
|
72
|
+
- name: Check matrix job status
|
|
73
|
+
run: |-
|
|
74
|
+
if ! ${{ needs.build.result == 'success' }}; then
|
|
75
|
+
echo "One or more CI jobs failed"
|
|
76
|
+
exit 1
|
|
77
|
+
fi
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
|
|
3
|
+
name: Dependabot auto-merge
|
|
4
|
+
on: pull_request
|
|
5
|
+
|
|
6
|
+
permissions:
|
|
7
|
+
contents: write
|
|
8
|
+
pull-requests: write
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
dependabot:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
if: github.event.pull_request.user.login == 'dependabot[bot]'
|
|
14
|
+
steps:
|
|
15
|
+
- name: Enable auto-merge for Dependabot PRs
|
|
16
|
+
run: gh pr merge --auto --merge "$PR_URL"
|
|
17
|
+
env:
|
|
18
|
+
PR_URL: ${{github.event.pull_request.html_url}}
|
|
19
|
+
GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Lint
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
pull_request: {}
|
|
8
|
+
schedule:
|
|
9
|
+
# * is a special character in YAML so you have to quote this string
|
|
10
|
+
# Run at 1:00 every day
|
|
11
|
+
- cron: 0 1 * * *
|
|
12
|
+
workflow_dispatch: {}
|
|
13
|
+
|
|
14
|
+
permissions: {}
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
build:
|
|
18
|
+
strategy:
|
|
19
|
+
matrix:
|
|
20
|
+
python-version: ['3.13']
|
|
21
|
+
platform: [ubuntu-latest, windows-latest]
|
|
22
|
+
hook-stage: [pre-commit, pre-push, manual]
|
|
23
|
+
|
|
24
|
+
runs-on: ${{ matrix.platform }}
|
|
25
|
+
|
|
26
|
+
steps:
|
|
27
|
+
- uses: actions/checkout@v7
|
|
28
|
+
with:
|
|
29
|
+
persist-credentials: false
|
|
30
|
+
|
|
31
|
+
- name: Install uv
|
|
32
|
+
uses: astral-sh/setup-uv@v10.3.2
|
|
33
|
+
with:
|
|
34
|
+
enable-cache: true
|
|
35
|
+
cache-dependency-glob: '**/pyproject.toml'
|
|
36
|
+
|
|
37
|
+
- name: Lint
|
|
38
|
+
uses: j178/prek-action@v3.1.0
|
|
39
|
+
with:
|
|
40
|
+
prek-version: 0.5.7
|
|
41
|
+
extra-args: >-
|
|
42
|
+
--all-files --hook-stage ${{ matrix.hook-stage }} --verbose
|
|
43
|
+
env:
|
|
44
|
+
UV_NO_CACHE: '1'
|
|
45
|
+
UV_PYTHON: ${{ matrix.python-version }}
|
|
46
|
+
# UV_RESOLUTION is intentionally not set here. prek uses uv to
|
|
47
|
+
# install hooks, and uv inherits UV_RESOLUTION. With lowest-direct,
|
|
48
|
+
# this causes hook dependencies to resolve to ancient versions that
|
|
49
|
+
# don't build on modern Python.
|
|
50
|
+
|
|
51
|
+
completion-lint:
|
|
52
|
+
needs: build
|
|
53
|
+
runs-on: ubuntu-latest
|
|
54
|
+
if: ${{ !cancelled() }}
|
|
55
|
+
steps:
|
|
56
|
+
- name: Check matrix job status
|
|
57
|
+
run: |-
|
|
58
|
+
if ! ${{ needs.build.result == 'success' }}; then
|
|
59
|
+
echo "One or more matrix jobs failed"
|
|
60
|
+
exit 1
|
|
61
|
+
fi
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Release
|
|
3
|
+
|
|
4
|
+
on: workflow_dispatch
|
|
5
|
+
|
|
6
|
+
permissions: {}
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build:
|
|
10
|
+
name: Publish a release
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
# Specifying an environment is strongly recommended by PyPI.
|
|
14
|
+
# See https://github.com/pypa/gh-action-pypi-publish/tree/release/v1/?tab=readme-ov-file#trusted-publishing.
|
|
15
|
+
if: vars.PYPI_PUBLISH_ENABLED == 'true'
|
|
16
|
+
environment: release
|
|
17
|
+
|
|
18
|
+
permissions:
|
|
19
|
+
# This is needed for PyPI publishing.
|
|
20
|
+
# See https://github.com/pypa/gh-action-pypi-publish/tree/release/v1/?tab=readme-ov-file#trusted-publishing.
|
|
21
|
+
id-token: write
|
|
22
|
+
# This is needed to create the release tag and upload distributions.
|
|
23
|
+
contents: write
|
|
24
|
+
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v7
|
|
27
|
+
with:
|
|
28
|
+
# Fetch all history and tags for version calculation.
|
|
29
|
+
fetch-depth: 0
|
|
30
|
+
|
|
31
|
+
- name: Install uv
|
|
32
|
+
uses: astral-sh/setup-uv@v10.3.2
|
|
33
|
+
with:
|
|
34
|
+
enable-cache: true
|
|
35
|
+
cache-dependency-glob: '**/pyproject.toml'
|
|
36
|
+
|
|
37
|
+
- name: Calver calculate version
|
|
38
|
+
uses: StephaneBour/actions-calver@master
|
|
39
|
+
id: calver
|
|
40
|
+
with:
|
|
41
|
+
date_format: '%Y.%m.%d'
|
|
42
|
+
release: false
|
|
43
|
+
env:
|
|
44
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
45
|
+
|
|
46
|
+
- name: Read the reviewed release notes
|
|
47
|
+
env:
|
|
48
|
+
RELEASE: ${{ steps.calver.outputs.release }}
|
|
49
|
+
run: |
|
|
50
|
+
test -f "changelog/$RELEASE.md"
|
|
51
|
+
cp "changelog/$RELEASE.md" release-notes.md
|
|
52
|
+
|
|
53
|
+
- name: Bump version and push tag
|
|
54
|
+
id: tag_version
|
|
55
|
+
uses: mathieudutour/github-tag-action@v7
|
|
56
|
+
with:
|
|
57
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
58
|
+
custom_tag: ${{ steps.calver.outputs.release }}
|
|
59
|
+
tag_prefix: ''
|
|
60
|
+
commit_sha: ${{ github.sha }}
|
|
61
|
+
|
|
62
|
+
- name: Build a binary wheel and a source tarball
|
|
63
|
+
env:
|
|
64
|
+
NEW_TAG: ${{ steps.tag_version.outputs.new_tag }}
|
|
65
|
+
run: |
|
|
66
|
+
git fetch --tags
|
|
67
|
+
git checkout "$NEW_TAG"
|
|
68
|
+
uv build --sdist --wheel --out-dir dist/
|
|
69
|
+
uv run --group=release check-wheel-contents dist/*.whl
|
|
70
|
+
|
|
71
|
+
- name: Test the installed wheel
|
|
72
|
+
run: uv run --group=dev python tests/wheel_smoke.py
|
|
73
|
+
|
|
74
|
+
- name: Create a GitHub release
|
|
75
|
+
uses: ncipollo/release-action@v1
|
|
76
|
+
with:
|
|
77
|
+
tag: ${{ steps.tag_version.outputs.new_tag }}
|
|
78
|
+
makeLatest: true
|
|
79
|
+
name: Release ${{ steps.tag_version.outputs.new_tag }}
|
|
80
|
+
bodyFile: release-notes.md
|
|
81
|
+
artifacts: dist/*
|
|
82
|
+
artifactErrorsFailBuild: true
|
|
83
|
+
|
|
84
|
+
# We use PyPI trusted publishing rather than a PyPI API token.
|
|
85
|
+
# See https://github.com/pypa/gh-action-pypi-publish/tree/release/v1/?tab=readme-ov-file#trusted-publishing.
|
|
86
|
+
- name: Publish distribution 📦 to PyPI
|
|
87
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
88
|
+
with:
|
|
89
|
+
verbose: true
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
*.egg-info/
|
|
24
|
+
.installed.cfg
|
|
25
|
+
*.egg
|
|
26
|
+
MANIFEST
|
|
27
|
+
|
|
28
|
+
# PyInstaller
|
|
29
|
+
# Usually these files are written by a python script from a template
|
|
30
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
31
|
+
*.manifest
|
|
32
|
+
*.spec
|
|
33
|
+
|
|
34
|
+
# Installer logs
|
|
35
|
+
pip-log.txt
|
|
36
|
+
pip-delete-this-directory.txt
|
|
37
|
+
|
|
38
|
+
# Unit test / coverage reports
|
|
39
|
+
htmlcov/
|
|
40
|
+
.tox/
|
|
41
|
+
.coverage
|
|
42
|
+
.coverage.*
|
|
43
|
+
.cache
|
|
44
|
+
nosetests.xml
|
|
45
|
+
coverage.xml
|
|
46
|
+
*.cover
|
|
47
|
+
.hypothesis/
|
|
48
|
+
.pytest_cache/
|
|
49
|
+
|
|
50
|
+
# Translations
|
|
51
|
+
*.mo
|
|
52
|
+
*.pot
|
|
53
|
+
|
|
54
|
+
# Django stuff:
|
|
55
|
+
*.log
|
|
56
|
+
local_settings.py
|
|
57
|
+
db.sqlite3
|
|
58
|
+
|
|
59
|
+
# Flask stuff:
|
|
60
|
+
instance/
|
|
61
|
+
.webassets-cache
|
|
62
|
+
|
|
63
|
+
# Scrapy stuff:
|
|
64
|
+
.scrapy
|
|
65
|
+
|
|
66
|
+
# Sphinx documentation
|
|
67
|
+
docs/_build/
|
|
68
|
+
|
|
69
|
+
# PyBuilder
|
|
70
|
+
target/
|
|
71
|
+
|
|
72
|
+
# Jupyter Notebook
|
|
73
|
+
.ipynb_checkpoints
|
|
74
|
+
|
|
75
|
+
# pyenv
|
|
76
|
+
.python-version
|
|
77
|
+
|
|
78
|
+
# celery beat schedule file
|
|
79
|
+
celerybeat-schedule
|
|
80
|
+
|
|
81
|
+
# SageMath parsed files
|
|
82
|
+
*.sage.py
|
|
83
|
+
|
|
84
|
+
# Environments
|
|
85
|
+
.env
|
|
86
|
+
.venv
|
|
87
|
+
env/
|
|
88
|
+
venv/
|
|
89
|
+
ENV/
|
|
90
|
+
env.bak/
|
|
91
|
+
venv.bak/
|
|
92
|
+
|
|
93
|
+
# direnv file
|
|
94
|
+
.envrc
|
|
95
|
+
|
|
96
|
+
# IDEA ide
|
|
97
|
+
.idea/
|
|
98
|
+
|
|
99
|
+
# Spyder project settings
|
|
100
|
+
.spyderproject
|
|
101
|
+
.spyproject
|
|
102
|
+
|
|
103
|
+
# Rope project settings
|
|
104
|
+
.ropeproject
|
|
105
|
+
|
|
106
|
+
# mkdocs documentation
|
|
107
|
+
/site
|
|
108
|
+
|
|
109
|
+
# mypy
|
|
110
|
+
.mypy_cache/
|
|
111
|
+
|
|
112
|
+
# setuptools_scm
|
|
113
|
+
src/*/_setuptools_scm_version.txt
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
# Ignore Mac DS_Store files
|
|
117
|
+
.DS_Store
|
|
118
|
+
**/.DS_Store
|
|
119
|
+
|
|
120
|
+
# Vale styles downloaded by ``vale sync``
|
|
121
|
+
styles/*
|
|
122
|
+
!styles/snapper/
|
|
123
|
+
|
|
124
|
+
.ruff_cache/
|
|
125
|
+
.ty_cache/
|
|
126
|
+
sample/build/
|
|
127
|
+
|
|
128
|
+
# Dependency locks are application-specific.
|
|
129
|
+
uv.lock
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
StylesPath = styles
|
|
2
|
+
MinAlertLevel = error
|
|
3
|
+
|
|
4
|
+
Packages = https://github.com/tbhb/vale-ai-tells/releases/download/v1.29.0/ai-tells.zip
|
|
5
|
+
|
|
6
|
+
[*.{rst,md}]
|
|
7
|
+
BasedOnStyles = ai-tells, snapper
|
|
8
|
+
snapper.SemanticLineBreaks = error
|
|
9
|
+
|
|
10
|
+
# These rules misclassify established technical, example, or release-note prose
|
|
11
|
+
# in this repository. All other ai-tells rules remain enforced.
|
|
12
|
+
ai-tells.FormalTransitions = NO
|
|
13
|
+
ai-tells.VerbTricolon = NO
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"[python]": {
|
|
3
|
+
"editor.codeActionsOnSave": {
|
|
4
|
+
"source.fixAll": "explicit"
|
|
5
|
+
},
|
|
6
|
+
"editor.defaultFormatter": "charliermarsh.ruff",
|
|
7
|
+
"editor.formatOnSave": true
|
|
8
|
+
},
|
|
9
|
+
"python.testing.pytestArgs": [
|
|
10
|
+
"."
|
|
11
|
+
],
|
|
12
|
+
"python.testing.unittestEnabled": false,
|
|
13
|
+
"python.testing.pytestEnabled": true
|
|
14
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
Contributing
|
|
2
|
+
============
|
|
3
|
+
|
|
4
|
+
Contributions to this repository must pass tests and linting.
|
|
5
|
+
|
|
6
|
+
CI is the canonical source of truth.
|
|
7
|
+
|
|
8
|
+
Install contribution dependencies
|
|
9
|
+
---------------------------------
|
|
10
|
+
|
|
11
|
+
Install Python dependencies in a virtual environment.
|
|
12
|
+
|
|
13
|
+
.. code-block:: shell
|
|
14
|
+
|
|
15
|
+
uv sync --group=dev
|
|
16
|
+
|
|
17
|
+
Spell checking requires ``enchant``.
|
|
18
|
+
This can be installed on macOS, for example, with `Homebrew`_:
|
|
19
|
+
|
|
20
|
+
.. code-block:: shell
|
|
21
|
+
|
|
22
|
+
brew install enchant
|
|
23
|
+
|
|
24
|
+
and on Ubuntu with ``apt``:
|
|
25
|
+
|
|
26
|
+
.. code-block:: shell
|
|
27
|
+
|
|
28
|
+
apt-get install -y enchant
|
|
29
|
+
|
|
30
|
+
Install ``pre-commit`` hooks:
|
|
31
|
+
|
|
32
|
+
.. code-block:: shell
|
|
33
|
+
|
|
34
|
+
uv run --group=dev prek install
|
|
35
|
+
|
|
36
|
+
Linting
|
|
37
|
+
-------
|
|
38
|
+
|
|
39
|
+
Run lint tools either by committing, or with:
|
|
40
|
+
|
|
41
|
+
.. code-block:: shell
|
|
42
|
+
|
|
43
|
+
uv run --group=dev prek run --all-files --hook-stage pre-commit --verbose
|
|
44
|
+
uv run --group=dev prek run --all-files --hook-stage pre-push --verbose
|
|
45
|
+
uv run --group=dev prek run --all-files --hook-stage manual --verbose
|
|
46
|
+
|
|
47
|
+
.. _Homebrew: https://brew.sh
|
|
48
|
+
|
|
49
|
+
Running tests
|
|
50
|
+
-------------
|
|
51
|
+
|
|
52
|
+
Run ``pytest``:
|
|
53
|
+
|
|
54
|
+
.. code-block:: shell
|
|
55
|
+
|
|
56
|
+
uv run --group=dev pytest --cov --cov-config=pyproject.toml
|
|
57
|
+
|
|
58
|
+
Continuous integration
|
|
59
|
+
----------------------
|
|
60
|
+
|
|
61
|
+
Tests are run on GitHub Actions.
|
|
62
|
+
The configuration is in ``.github/workflows/``.
|
|
63
|
+
CI builds the sample with serial and parallel Sphinx readers, runs tests with 100% branch coverage, and builds distributions.
|
|
64
|
+
It also installs the wheel and builds the sample outside the checkout.
|
|
65
|
+
The test matrix covers Python 3.12 through 3.15 on Ubuntu and Windows with highest and lowest direct dependencies.
|
|
66
|
+
|
|
67
|
+
Run the sample and packaging checks locally:
|
|
68
|
+
|
|
69
|
+
.. code-block:: shell
|
|
70
|
+
|
|
71
|
+
uv run --group=dev sphinx-build -W -b html sample/source sample/build
|
|
72
|
+
uv build
|
|
73
|
+
uv run --group=release check-wheel-contents dist/*.whl
|
|
74
|
+
uv run --group=dev python tests/wheel_smoke.py
|
|
75
|
+
|
|
76
|
+
Release Process
|
|
77
|
+
---------------
|
|
78
|
+
|
|
79
|
+
Outcomes
|
|
80
|
+
~~~~~~~~
|
|
81
|
+
|
|
82
|
+
* A new ``git`` tag available to install.
|
|
83
|
+
* A new package on PyPI.
|
|
84
|
+
|
|
85
|
+
Perform a Release
|
|
86
|
+
~~~~~~~~~~~~~~~~~
|
|
87
|
+
|
|
88
|
+
Versions come from Git tags through ``setuptools-scm``.
|
|
89
|
+
The release workflow tags the reviewed commit and uses PyPI trusted publishing with the ``release`` environment.
|
|
90
|
+
Configure the trusted publisher and set ``PYPI_PUBLISH_ENABLED`` to ``true`` before dispatching a release.
|
|
91
|
+
|
|
92
|
+
#. `Install GitHub CLI`_.
|
|
93
|
+
|
|
94
|
+
#. Prepare release notes for the next CalVer version in a pull request.
|
|
95
|
+
Use the current date and increment the final numeric suffix for another release on the same date:
|
|
96
|
+
|
|
97
|
+
.. code-block:: shell
|
|
98
|
+
|
|
99
|
+
uv run --group=release towncrier build --yes --version 2026.10.30.2
|
|
100
|
+
uv run --group=dev snapper --native --max-width 0 --in-place changelog/2026.10.30.2.md
|
|
101
|
+
|
|
102
|
+
Commit the generated changelog and removed fragments, then merge after the required checks pass.
|
|
103
|
+
|
|
104
|
+
#. Dispatch the release from ``main``:
|
|
105
|
+
|
|
106
|
+
.. code-block:: shell
|
|
107
|
+
|
|
108
|
+
gh workflow run release.yml --repo adamtheturtle/sphinx-section-include
|
|
109
|
+
|
|
110
|
+
The workflow calculates the next version and requires its changelog file to exist.
|
|
111
|
+
It creates the tag and distributions without pushing a new commit to ``main``.
|
|
112
|
+
|
|
113
|
+
.. _Install GitHub CLI: https://cli.github.com/manual/installation
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
Release notes
|
|
117
|
+
-------------
|
|
118
|
+
|
|
119
|
+
Write user-facing changes as Markdown in ``newsfragments/<issue>.change.md``.
|
|
120
|
+
Towncrier writes one Markdown file per version, used directly for GitHub release notes.
|
|
121
|
+
Invalid fragment names fail release assembly.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Rippling
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|