Doc-changelog action setup#
The release notes for your project can either be in your documentation or the CHANGELOG.md
file.
Follow the instructions in the update the workflow section to add the ansys/actions/doc-changelog
action
to your workflow, and then choose between adding the release notes in your documentation
or the CHANGELOG.md
file.
Update the workflow#
Update the .github/workflows/label.yml
file to use the changelog action.
Change the pull_request
trigger at the top of the preceding .yml
file so that it lists the pull request actions that cause the workflows to run:
on:
pull_request:
# opened, reopened, and synchronize are default for pull_request
# edited - when PR title or body is changed
# labeled - when labels are added to PR
types: [opened, reopened, synchronize, edited, labeled]
At the end of the .github/workflows/label.yml
file, add the following lines for the changelog action:
changelog-fragment:
name: "Create changelog fragment"
needs: [labeler]
permissions:
contents: write
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: ansys/actions/doc-changelog@{{ version }}
with:
token: ${{ secrets.PYANSYS_CI_BOT_TOKEN }}
Next, follow the instructions to create release notes in your documentation or CHANGELOG.md file depending on your preference.
Include the release notes in your documentation#
Create the
doc/changelog.d
directory and then within it add a file namedchangelog_template.jinja
that contains the following lines:
{% if sections[""] %}
{% for category, val in definitions.items() if category in sections[""] %}
{{ definitions[category]['name'] }}
{% set underline = '^' * definitions[category]['name']|length %}
{{ underline }}
{% for text, values in sections[""][category].items() %}
- {{ text }} {{ values|join(', ') }}
{% endfor %}
{% endfor %}
{% else %}
No significant changes.
{% endif %}
Create a new file named
changelog.rst
in thedoc/source
directory. Add the following lines to the file:
.. _ref_release_notes:
Release notes
#############
This document contains the release notes for the project.
.. vale off
.. towncrier release notes start
.. vale on
Note
If your project previously used CHANGELOG.md
to record the release notes, change the description under “Release notes,” replacing {org-name}
and {repo-name}
with the name of the organization and repository respectively, and {latest-version}
with the most recent version in your CHANGELOG.md
file:
This document contains the release notes for the project. See release notes for v{latest-version} and earlier
in `CHANGELOG.md <https://github.com/{org-name}/{repo-name}/blob/main/CHANGELOG.md>`_.
Add
changelog
to the toctree list in thedoc/source/index.rst
file.changelog
is placed last in thetoctree
list, so the “Release notes” tab is last in the documentation.
.. toctree::
:hidden:
:maxdepth: 3
<other files>
changelog
Add the following lines to the
doc/source/conf.py
file, replacing{org-name}
and{repo-name}
with the name of the organization and repository respectively:
# If we are on a release, we have to ignore the "release" URLs, since it is not
# available until the release is published.
if switcher_version != "dev":
linkcheck_ignore.append(
f"https://github.com/{org-name}/{repo-name}/releases/tag/v{__version__}"
)
Note
This assumes the following code already exists in the doc/source/conf.py
file:
from ansys_sphinx_theme import get_version_match
from ansys.<product>.<library> import __version__
release = version = __version__
switcher_version = get_version_match(version)
5. Add the following lines to the pyproject.toml
file, replacing {org-name}
and {repo-name}
with the name of the organization and repository respectively.
Also, replace ansys.<product>.<library>
with the name under tool.flit.module
. For example, ansys.geometry.core
.
[tool.towncrier]
package = "ansys.<product>.<library>"
directory = "doc/changelog.d"
filename = "doc/source/changelog.rst"
start_string = ".. towncrier release notes start\n"
template = "doc/changelog.d/changelog_template.jinja"
title_format = "`{version} <https://github.com/{org-name}/{repo-name}/releases/tag/v{version}>`_ - {project_date}"
issue_format = "`#{issue} <https://github.com/{org-name}/{repo-name}/pull/{issue}>`_"
[[tool.towncrier.type]]
directory = "added"
name = "Added"
showcontent = true
[[tool.towncrier.type]]
directory = "changed"
name = "Changed"
showcontent = true
[[tool.towncrier.type]]
directory = "fixed"
name = "Fixed"
showcontent = true
[[tool.towncrier.type]]
directory = "dependencies"
name = "Dependencies"
showcontent = true
[[tool.towncrier.type]]
directory = "miscellaneous"
name = "Miscellaneous"
showcontent = true
Note
If empty, the previous CHANGELOG.md
file can be removed from the repository, as the changelog is now part of the documentation.
However, if the CHANGELOG.md
file is kept, it can be adapted to include the link to the documentation changelog.
For example, the CHANGELOG.md
file could look like this:
This project uses [towncrier](https://towncrier.readthedocs.io/). Changes for the upcoming release can be found in
[changelog.rst](doc/source/changelog.rst).
Reference pull requests for the changes can be found in the PyAnsys Geometry and PyMechanical repositories. The PyAnsys Geometry pull request includes some other changes, but the changelog implementation is the same as described in this document.
Include the release notes in CHANGELOG.md
#
Create the
doc/changelog.d
directory and then within it add a file namedchangelog_template.jinja
that contains the following lines:
{% if sections[""] %}
{% for category, val in definitions.items() if category in sections[""] %}
### {{ definitions[category]['name'] }}
{% for text, values in sections[""][category].items() %}
- {{ text }} {{ values|join(', ') }}
{% endfor %}
{% endfor %}
{% else %}
No significant changes.
{% endif %}
Add the following lines to the
CHANGELOG.md
file, replacing{org-name}
and{repo-name}
with the name of the organization and repository respectively:
This project uses [towncrier](https://towncrier.readthedocs.io/) and the changes for the upcoming release can be found in <https://github.com/{org-name}/{repo-name}/tree/main/doc/changelog.d/>.
<!-- towncrier release notes start -->
Note
If the CHANGELOG.md
file already has sections for previous releases, make sure to put the
"towncrier release notes start"
comment before the release sections. For example:
<!-- towncrier release notes start -->
## [0.10.7](https://github.com/ansys/pymechanical/releases/tag/v0.10.7) - February 13 2024
3. Add the following lines to the pyproject.toml
file, replacing {org-name}
and {repo-name}
with the name of the organization and repository respectively.
Also, replace ansys.<product>.<library>
with the name under tool.flit.module
. For example, ansys.geometry.core
.
[tool.towncrier]
package = "ansys.<product>.<library>"
directory = "doc/changelog.d"
filename = "CHANGELOG.md"
start_string = "<!-- towncrier release notes start -->\n"
underlines = ["", "", ""]
template = "doc/changelog.d/changelog_template.jinja"
title_format = "## [{version}](https://github.com/ansys/{repo-name}/releases/tag/v{version}) - {project_date}"
issue_format = "[#{issue}](https://github.com/ansys/{repo-name}/pull/{issue})"
[[tool.towncrier.type]]
directory = "added"
name = "Added"
showcontent = true
[[tool.towncrier.type]]
directory = "dependencies"
name = "Dependencies"
showcontent = true
[[tool.towncrier.type]]
directory = "documentation"
name = "Documentation"
showcontent = true
[[tool.towncrier.type]]
directory = "fixed"
name = "Fixed"
showcontent = true
[[tool.towncrier.type]]
directory = "maintenance"
name = "Maintenance"
showcontent = true
[[tool.towncrier.type]]
directory = "miscellaneous"
name = "Miscellaneous"
showcontent = true
[[tool.towncrier.type]]
directory = "test"
name = "Test"
showcontent = true
A reference pull request for these changes can be found in the PyAnsys Geometry #1023 pull request.
towncrier
commands#
These commands are helpful for creating changelog fragment files manually, as well as building your CHANGELOG.md
file
with the fragments in the doc/changelog.d
directory.
Create a changelog file manually:
towncrier create -c "Added a feature" 1.added.md
Note
“Added a feature” adds the content of the file named 1.added.md
.
The number one in the “1.added.md” file is the pull request number, and “added” is a subsection
under the released version. For example, CHANGELOG.md
would look like this if
the preceding MD file only existed in the changelog.d
directory:
## [version](https://github.com/ansys/{repo-name}/releases/tag/v{version})
### Added
- Added a feature [#1](https://github.com/ansys/{repo-name}/pull/1)
When you are ready to do a release for your repository, set up the ansys/actions/doc-deploy-changelog
action
to automate the process of generating the changelog. If you want to do it manually, run the following command to
update the CHANGELOG.md
file with the files in the changelog.d
directory, replacing {version}
with your
release number. For example, 0.10.8
. Do not include “v” in the version:
towncrier build --yes --version {version}
If you want to update the CHANGELOG.md
file but keep the files in the changelog.d
directory, run this command:
towncrier build --keep --version {version}
If you only want to preview the changelog and not make changes to the CHANGELOG.md
file,
run the following command:
towncrier build --keep --draft --version {version}