Configuration¶
rtfc is configured in TOML, either in the [rtfc] table of an
rtfc.toml file or in the [tool.rtfc] table of pyproject.toml
(see Usage). Each example below is given for both files.
Relative paths are resolved against the directory the configuration is discovered in.
- changelog¶
- Type:
- path
The changelog file the release notes are inserted into on release. Required; the file must exist and contain the insert marker comment (
.. rtfc-insertfor the rst format).[rtfc] changelog = "docs/source/changelog.rst"
[tool.rtfc] changelog = "docs/source/changelog.rst"
- directory¶
- Type:
- path
- Default:
"changelog"
The directory holding the changelog entry files. It must exist.
[rtfc] directory = "changelog.d"
[tool.rtfc] directory = "changelog.d"
- format¶
- Type:
- string
- Default:
"rst"
The documentation format of the entries and the changelog.
rstis built in; third-party formats are looked up in thertfc.formatsentry point group.[rtfc] format = "rst"
[tool.rtfc] format = "rst"
- sections¶
- Type:
- list
- Default:
- the
change,featureandbugfixsections
The changelog sections (entry categories), in output order. Each item is either a section id (its label is then derived from the id) or a table with
idandlabelkeys.[rtfc] sections = [ "deprecation", { id = "bugfix", label = "Bug fixes" }, ]
[tool.rtfc] sections = [ "deprecation", { id = "bugfix", label = "Bug fixes" }, ]
- metadata¶
- Type:
- table
- Default:
- empty (metadata is free-form)
The schema of the entry metadata fields, one table per field. Once a schema is defined, unknown metadata fields are rejected. Each field is configured with:
typeThe type of the field value:
"string","integer","boolean","number","date"or"array".itemsThe type of the array items. Required (and only allowed) when
typeis"array".requiredWhether the field must be present on every entry (defaults to
false). Mutually exclusive withdefault.defaultThe value applied when the field is absent. Mutually exclusive with
required
[rtfc.metadata.gh_issue] type = "integer" required = true [rtfc.metadata.contributors] type = "array" items = "string" default = []
[tool.rtfc.metadata.gh_issue] type = "integer" required = true [tool.rtfc.metadata.contributors] type = "array" items = "string" default = []
- render.template¶
- Type:
- string
- Default:
- the template below
The Jinja template rendering the whole release notes of a version. The template receives:
headerThe already-formatted version header.
entriesAll the entries of the release notes.
sectionsThe entries grouped by section: the unsectioned group first, then the configured sections in order. Each group has
id,label(Nonefor the unsectioned group) andentriesattributes.render_entry(),list_item(),section_header()Functions rendering an entry through
render.entry_template, wrapping text as a list item, and formatting a section heading.
The
sort_entries()filter sorts entries by the given keys:date(the default),nonce, ormetadata.<field>. Entries missing a value sorting last. The default template renders each non-empty section under its heading, entries sorted by date:{{ header }} {% for section in sections if section.entries %} {% if section.label %} {{ section_header(section.label) }} {% endif %} {% for entry in section.entries | sort_entries %} {{ list_item(render_entry(entry)) }} {% endfor %} {% endfor %}
For example, ignoring sections and rendering a single flat list:
[rtfc.render] template = """ {{ header }} {% for entry in entries | sort_entries %} {{ list_item(render_entry(entry)) }} {% endfor %} """
[tool.rtfc.render] template = """ {{ header }} {% for entry in entries | sort_entries %} {{ list_item(render_entry(entry)) }} {% endfor %} """
- render.template_file¶
- Type:
- path
- Default:
- unset
A file containing the release notes template, as an alternative to
render.template.[rtfc.render] template_file = "version.rst.jinja"
[tool.rtfc.render] template_file = "version.rst.jinja"
- render.entry_template¶
- Type:
- string
- Default:
"{{ content }}"
The Jinja template rendering a single entry, receiving
content,date,nonce,sectionandmetadatain context. Mutually exclusive withrender.entry_template_file.[rtfc.render] entry_template = "{{ content }}{% if metadata.gh_issue %} (:gh:`{{ metadata.gh_issue }}`){% endif %}"
[tool.rtfc.render] entry_template = "{{ content }}{% if metadata.gh_issue %} (:gh:`{{ metadata.gh_issue }}`){% endif %}"
- render.entry_template_file¶
- Type:
- path
- Default:
- unset
A file containing the entry template, as an alternative to
render.entry_template.[rtfc.render] entry_template_file = "entry.rst.jinja"
[tool.rtfc.render] entry_template_file = "entry.rst.jinja"
- export.<exporter>.engine¶
- Type:
- table
Exporters, converting the release notes to another format, are configured with one table per exporter id. The
enginetable selects and configures the format engine used to convert the format-specific syntax of the entries; itsnamekey discriminates the engine and its remaining keys. The built-inmarkdown,github-markdownandgitlab-markdownexporters all support thesphinxengine.[rtfc.export.markdown.engine] name = "sphinx" sphinx_directory = "docs/source"
[tool.rtfc.export.markdown.engine] name = "sphinx" sphinx_directory = "docs/source"
- export.<exporter>.engine.sphinx_directory¶
- Type:
- path
The Sphinx source directory (containing
conf.py). Required.
- export.<exporter>.engine.base_url¶
- Type:
- string
- Default:
- the
html_baseurlSphinx configuration value
Absolute URL of the published documentation, used to resolve relative links.
[rtfc.export.markdown.engine] name = "sphinx" sphinx_directory = "docs/source" base_url = "https://rtfc.readthedocs.io/en/latest"
[tool.rtfc.export.markdown.engine] name = "sphinx" sphinx_directory = "docs/source" base_url = "https://rtfc.readthedocs.io/en/latest"
See also
The sphinx extension has its own configuration
value, rtfc_config_directory, defined in conf.py.