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.
Files changed (52) hide show
  1. sphinx_section_include-2026.11.1/.git_archival.txt +1 -0
  2. sphinx_section_include-2026.11.1/.gitattributes +3 -0
  3. sphinx_section_include-2026.11.1/.github/dependabot.yml +23 -0
  4. sphinx_section_include-2026.11.1/.github/workflows/autofix.yml +36 -0
  5. sphinx_section_include-2026.11.1/.github/workflows/ci.yml +77 -0
  6. sphinx_section_include-2026.11.1/.github/workflows/dependabot-merge.yml +19 -0
  7. sphinx_section_include-2026.11.1/.github/workflows/lint.yml +61 -0
  8. sphinx_section_include-2026.11.1/.github/workflows/release.yml +89 -0
  9. sphinx_section_include-2026.11.1/.gitignore +129 -0
  10. sphinx_section_include-2026.11.1/.prettierrc +11 -0
  11. sphinx_section_include-2026.11.1/.vale.ini +13 -0
  12. sphinx_section_include-2026.11.1/.vscode/extensions.json +6 -0
  13. sphinx_section_include-2026.11.1/.vscode/settings.json +14 -0
  14. sphinx_section_include-2026.11.1/CHANGELOG.md +3 -0
  15. sphinx_section_include-2026.11.1/CONTRIBUTING.rst +121 -0
  16. sphinx_section_include-2026.11.1/LICENSE +21 -0
  17. sphinx_section_include-2026.11.1/PKG-INFO +116 -0
  18. sphinx_section_include-2026.11.1/README.rst +90 -0
  19. sphinx_section_include-2026.11.1/changelog/2026.11.01.md +7 -0
  20. sphinx_section_include-2026.11.1/newsfragments/.gitkeep +0 -0
  21. sphinx_section_include-2026.11.1/prek.toml +423 -0
  22. sphinx_section_include-2026.11.1/pyproject.toml +461 -0
  23. sphinx_section_include-2026.11.1/sample/__init__.py +1 -0
  24. sphinx_section_include-2026.11.1/sample/source/__init__.py +1 -0
  25. sphinx_section_include-2026.11.1/sample/source/chapters/instructions.txt +5 -0
  26. sphinx_section_include-2026.11.1/sample/source/chapters/source.rst +24 -0
  27. sphinx_section_include-2026.11.1/sample/source/conf.py +4 -0
  28. sphinx_section_include-2026.11.1/sample/source/index.rst +7 -0
  29. sphinx_section_include-2026.11.1/sample/source/quickstart.rst +6 -0
  30. sphinx_section_include-2026.11.1/setup.cfg +4 -0
  31. sphinx_section_include-2026.11.1/spelling_private_dict.txt +26 -0
  32. sphinx_section_include-2026.11.1/src/sphinx_section_include/__init__.py +40 -0
  33. sphinx_section_include-2026.11.1/src/sphinx_section_include/directive.py +232 -0
  34. sphinx_section_include-2026.11.1/src/sphinx_section_include/py.typed +0 -0
  35. sphinx_section_include-2026.11.1/src/sphinx_section_include/reader.py +110 -0
  36. sphinx_section_include-2026.11.1/src/sphinx_section_include/sections.py +78 -0
  37. sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/PKG-INFO +116 -0
  38. sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/SOURCES.txt +50 -0
  39. sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/dependency_links.txt +1 -0
  40. sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/not-zip-safe +1 -0
  41. sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/requires.txt +2 -0
  42. sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/scm_file_list.json +46 -0
  43. sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/scm_version.json +8 -0
  44. sphinx_section_include-2026.11.1/src/sphinx_section_include.egg-info/top_level.txt +1 -0
  45. sphinx_section_include-2026.11.1/styles/snapper/LongProseLine.yml +11 -0
  46. sphinx_section_include-2026.11.1/styles/snapper/SemanticLineBreaks.yml +11 -0
  47. sphinx_section_include-2026.11.1/tests/__init__.py +1 -0
  48. sphinx_section_include-2026.11.1/tests/conftest.py +3 -0
  49. sphinx_section_include-2026.11.1/tests/test_directive.py +387 -0
  50. sphinx_section_include-2026.11.1/tests/test_sections.py +125 -0
  51. sphinx_section_include-2026.11.1/tests/wheel_smoke.py +72 -0
  52. sphinx_section_include-2026.11.1/zizmor.yml +12 -0
@@ -0,0 +1 @@
1
+ ref-names: $Format:%D$
@@ -0,0 +1,3 @@
1
+ .git_archival.txt export-subst
2
+ * text=auto eol=lf
3
+ *.rst conflict-marker-size=32
@@ -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,11 @@
1
+ {
2
+ "overrides": [
3
+ {
4
+ "files": ["*.yaml", "*.yml"],
5
+ "options": {
6
+ "singleQuote": true,
7
+ "printWidth": 100
8
+ }
9
+ }
10
+ ]
11
+ }
@@ -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,6 @@
1
+ {
2
+ "recommendations": [
3
+ "charliermarsh.ruff",
4
+ "ms-python.python"
5
+ ]
6
+ }
@@ -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,3 @@
1
+ # Changelog
2
+
3
+ Release notes are in [changelog/](changelog/).
@@ -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.