User Guide¶
Reason why¶
Essentially, in BuildNN we use a custom full automation in package release cycle. Therefore, we needed a tool to update package versions with a minimal overhead.
We embrace the config paradigma for package metadata: take away metadata from setup.py and
move them to setup.cfg or pyproject.toml
NOTE: full
pyproject.tomlandpoetrysupport will come soon…
Explore the CLI¶
$ pymetager --help
Usage: pymetager [OPTIONS] COMMAND [ARGS]...
Options:
-q, --quiet Flag for minimal output.
--config_fp FILE Custom path for setup.cfg. [default: ./setup.cfg]
--help Show this message and exit.
Commands:
echo-meta-elm
increment
let’s use info print function
$ pymetager echo-meta-elm --help
--- PYPACK-METAGER ---
A BuildNN Open Source project.
Reading/Writing from/to ./setup.cfg
Usage: pymetager echo-meta-elm [OPTIONS] [NAME]
Options:
-s, --section TEXT
--help Show this message and exit
$ pymetager echo-meta-elm version
--- PYPACK-METAGER ---
A BuildNN Open Source project.
Reading/Writing from/to ./setup.cfg
0.0.1
Or, concisely
$ pymetager -q echo-meta-elm version
0.0.1
Increment Version¶
Strictly following Python’s PEP440 Guidelines
[A] Increment micro version¶
$ pymetager increment micro
--- PYPACK-METAGER ---
A BuildNN Open Source project.
Reading/Writing from/to ./setup.cfg
Read config from ./setup.cfg
Updating version `0.0.1` to `0.0.2`.
Writing back config...
[B] Increment minor version¶
$ pymetager increment minor
--- PYPACK-METAGER ---
A BuildNN Open Source project.
Reading/Writing from/to ./setup.cfg
Read config from ./setup.cfg
Updating version `0.0.1` to `0.1`.
Writing back config...
[C] Increment major version¶
$ pymetager increment major
--- PYPACK-METAGER ---
A BuildNN Open Source project.
Reading/Writing from/to ./setup.cfg
Read config from ./setup.cfg
Updating version `0.0.1` to `1.0`.
Writing back config...
Major version increment will be visible in
setup.cfgas you will see opening the file$ cat setup.cfg ... [metadata] name = my-awesome-package version = 1.0 ...
[D] Increment version segment (dev, pre, post)¶
[D1] Increment dev¶
Let’s say we are at version 0.0.1.
$ pymetager echo-meta-elm version
--- PYPACK-METAGER ---
A BuildNN Open Source project.
Reading/Writing from/to ./setup.cfg
0.0.1
The following attempt to pass to dev version segment will fail
(we can not move from full release back to dev)…
$ pymetager increment segment -s dev
--- PYPACK-METAGER ---
A BuildNN Open Source project.
Reading/Writing from/to ./setup.cfg
Read config from ./setup.cfg
Traceback (most recent call last):
... <traceback stuff>
File "<>/pymetager/src/pymetager/cli.py", line 64, in increment
update_config_version(
File "<>/pymetager/src/pymetager/version_manager.py", line 177, in update_config_version
new_version = _version_ops[element](version, **kwargs)
File "<>/pymetager/src/pymetager/version_manager.py", line 123, in increment_segment
raise ValueError("Current version Segment is higher than the required one!")
ValueError: Current version Segment is higher than the required one!
What we can do, is to pass from current version to a new one (eg. incrementing the upstream micro version)
in dev segment:
$ pymetager increment segment -s dev -u micro
--- PYPACK-METAGER ---
A BuildNN Open Source project.
Reading/Writing from/to ./setup.cfg
Read config from ./setup.cfg
Updating version `0.0.1` to `0.0.2.dev0`.
Writing back config...
[D2] Increment pre¶
Note:
presegment is prior to release, thus from release on you cannot revert back to pre or dev. You can update to pre only dev.
$ pymetager increment segment -s pre
--- PYPACK-METAGER ---
A BuildNN Open Source project.
Reading/Writing from/to ./setup.cfg
Read config from ./setup.cfg
Updating version `0.0.2.dev0` to `0.0.2rc0`.
Writing back config...
Note:
rcstands for release candidate :)
[D3] Increment –> Release¶
After release candidate validation or directly from dev, we can go with full release:
$ pymetager increment release
--- PYPACK-METAGER ---
A BuildNN Open Source project.
Reading/Writing from/to ./setup.cfg
Read config from ./setup.cfg
Updating version `0.0.2rc0` to `0.0.2`.
Writing back config...
[D4] Increment post¶
Note: you can increment to post from release and every other segment type. Once in post segment, you can go only to the next release (or to its dev, using
--increment_upstream) Post is used for small bugfix after release in prod
$ pymetager increment segment -s post
--- PYPACK-METAGER ---
A BuildNN Open Source project.
Reading/Writing from/to ./setup.cfg
Read config from ./setup.cfg
Updating version `0.0.2` to `0.0.2.post0`.
Writing back config...