- Drop support for Python 3.7
- Bugfix: When using
versioningit
with Hatch, don't run theonbuild
step for editable builds
- Correctly mark a certain test as requiring Mercurial
- 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 toVersioningit.do_onbuild()
andonbuild
method callables has been changed to anOnbuildFileProvider
ABC
- Always read
.hg_archival.txt
files using UTF-8 encoding - Added support for using versioningit with Hatch
- Raise a
ConfigError
if the selectedtool.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 callingget_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 toVersioningit.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 toVersioningit.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 ofrun_onbuild()
Versioningit.get_version()
now takes optionalwrite
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.
- setuptools is only needed for
- 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()
andrun_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 intoVersioningit.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 formdo_$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