versioningit
- When
git describe
fails to retrieve a tag, the resulting log/error message now includes all options passed to the command (based on contribution by @jenshnielsen) - When
hg log
fails to retrieve a tag, the resulting log/error message now includes the tag pattern passed tolatesttag()
, if any
- Migrated from setuptools to hatch
- Support using the
onbuild
step with Hatch - Breaking: The
build_dir
argument passed to Versioningit.do_onbuild() andonbuild
method callables has been changed to an OnbuildFileProvider ABC
- Always read
.hg_archival.txt
files using UTF-8 encoding - Added support for using versioningit with Hatch
- Raise a ConfigError if the selected
tool.versioningit.format
field is not a string - Update tests for pydantic 2.0
- Update tests for Python 3.12
- Support Python 3.12
- The custom setuptools command classes can now be imported directly from the
versioningit.cmdclass
module as an alternative to calling get_cmdclasses()
- Drop support for Python 3.6
- Support Python 3.11
- Use tomllib on Python 3.11
- Don't run the
onbuild
step under setuptools' upcoming PEP 660 editable mode (contributed by @abravalheri)
- The
{version}
placeholder in the "basic"format
step has been renamed to{base_version}
. The old name remains usable, but is deprecated.- Breaking: The
version
argument passed to Versioningit.do_format() andformat
method callables has been renamed tobase_version
.
- Breaking: The
- A
{version_tuple}
field, along with the fields available in theformat
step, is now available for use in templates in thewrite
andonbuild
steps.- New step and subtable: "template-fields"
- Breaking: The
version
arguments passed to Versioningit.do_write(), Versioningit.do_onbuild(), run_onbuild(), andwrite
&onbuild
method callables have been replaced withtemplate_fields
arguments - Added a get_template_fields_from_distribution() function for use by callers of run_onbuild()
- Versioningit.get_version() now takes optional
write
andfallback
arguments - The
onbuild
step is no longer run when building from an sdist; the configuration therefore no longer needs to be idempotent - Drop setuptools runtime dependency
- setuptools is only needed for get_cmdclasses(), which should only be called in an environment where setuptools is already installed.
- Prevent log messages from being printed twice under recent versions of setuptools
- Values supplied for the
require-match
parameters of thetag2version
andonbuild
steps must now actually be booleans; previously, values of any type were accepted and were converted to booleans. - Added a Versioningit.run() method that returns a structure containing all intermediate & final values
- "git" method:
{author_date}
and{committer_date}
are no longer "clamped" to less than or equal to{build_date}
. This undocumented behavior was based on a misinterpretation of theSOURCE_DATE_EPOCH
spec, and was even applied whenSOURCE_DATE_EPOCH
was not set. - When resolving entry points, if multiple entry points with the given group & name are found, error instead of using the first one returned
- Backport "Don't run the
onbuild
step under setuptools' upcoming PEP 660 editable mode" from v2.0.1 (contributed by @abravalheri)
- Do not import setuptools unless needed (contributed by @jenshnielsen)
- Added custom setuptools commands for inserting the project version into a source file at build time
- New step and subtable: "onbuild"
- New public get_cmdclasses() and run_onbuild() functions
- Moved documentation from the README to a Read the Docs site
- Established external documentation for the public library API
- When falling back to using
tool.versioningit.default-version
, emit a warning if the version is not PEP 440-compliant. - The
versioningit
command now honors theVERSIONINGIT_LOG_LEVEL
environment variable
- Changes to custom methods:
- The signatures of the method functions have changed; user-supplied parameters are now passed as a single
params: Dict[str, Any]
argument instead of as keyword arguments. - User-supplied parameters with the same names as step-specific method arguments are no longer discarded.
- The signatures of the method functions have changed; user-supplied parameters are now passed as a single
- Changes to the "git-archive" method:
- Lightweight tags are now ignored (by default, but see below) when installing from a repository in order to match the behavior of the
%(describe)
format placeholder. - The "match" and "exclude" settings are now parsed from the
describe-subst
parameter, which is now required, and the oldmatch
andexclude
parameters are now ignored. - Git 2.35's "tags" option for honoring lightweight tags is now recognized.
- Added a dedicated error message when an invalid
%(describe)
placeholder is "expanded" into itself in an archive
- Lightweight tags are now ignored (by default, but see below) when installing from a repository in order to match the behavior of the
- The
file
parameter to the "basic" write method is now required when the[tool.versioningit.write]
table is present. If you don't want to write the version to a file, omit the table entirely. - Library API:
Config
is no longer exported; it should now be considered private.- Merged
Versioningit.from_config()
functionality into Versioningit.from_project_dir() - Renamed
Versioningit.from_config_obj()
toVersioningit.from_config()
; it should now be considered private
- Git 1.8.0 is now the minimum required version for the git methods, and this is documented. (Previously, the undocumented minimum version was Git 1.8.5.)
- Document the minimum supported Mercurial version as 5.2.
- Call importlib.metadata.entry_points() only once and reuse the result for a speedup (contributed by @jenshnielsen)
- Support Python 3.10
- Support tomli 2.0
- Gave the CLI interface an
-n
/--next-version
option for showing a project's next release version - Added a get_next_version() function
- Added a mention to the README of the existence of exported functionality other than get_version()
- Renamed the individual step-calling methods of Versioningit to have names of the form
do_$STEP()
- Update for tomli 1.2.0
- The log messages displayed for unknown parameters are now at WARNING level instead of INFO and include suggestions for what you might have meant
- "git"
vcs
method:default-tag
will now be honored if thegit describe
command fails (which generally only happens in a repository without any commits) - Added an experimental "git-archive" method for determining a version when installing from a Git archive
- Project directories under
.git/
are no longer considered to be under version control - Project directories inside Git working directories that are not themselves tracked by Git are no longer considered to be under version control
- Support added for installing from Mercurial repositories & archives
- Add more logging messages
- Changed default version formats to something that doesn't use
{next_version}
- "basic"
tag2version
method:- If
regex
is given and it does not contain a group named "version
," the entire text matched by the regex will be used as the version - Added a
require-match
parameter for erroring if the regex does not match
- If
- "basic"
write
method:encoding
now defaults to UTF-8 - New
next-version
methods:"minor-release"
,"smallest-release"
, and"null"
- Replaced
entrypoints
dependency withimportlib-metadata
- Added
tool.versioningit.default-version
for setting the version to use if an error occurs - When building a project from a shallow clone or in a non-sdist directory without VCS information, display an informative error message.
Alpha release