Contents
scd (something competely different) is a small tool with one intention: make your version bumping underoverengineered. It takes slightly different approach than bumpversion: it does not make commits or tags and do not updates version by command. It takes configuration file and adjust your version regarding this file.
It may seems a little bit complex, but it works really-really well if
you have a complex setup, where you need to manage versions not only in
literal format, but in different, complex ways in absolutely different
files. Also, it can eliminate a huge amount of copypasting in your
.bumpversion.cfg
. Also, it works with regular expressions therefore
it can eliminate design restrictions of bumpversion.
Please check official documentation for details. This README file is just a whirlwind tour.
As any Python package, you can install scd with pip or sources.
pip install scd[yaml,colors]
or
git clone https://github.com/9seconds/scd
cd scd
python setup.py install
Here is an example how can configuration file may looks like:
version:
number: 1.0.1
scheme: semver
search_patterns:
full: "{{ semver }}"
vfull: "v{{ semver }}"
major_minor_block: "\\d+\\.\\d+(?=\\s\\#\\sBUMPVERSION)"
replacement_patterns:
full: "{{ full }}"
major_minor: "{{ major }}.{{ minor }}"
major_minor_p: "{{ major }}.{{ minor }}{% if patch %}.{{ patch }}{% endif %}"
defaults:
search: full
replace: full
files:
setup.py:
- search_raw: "(?>=version\\s=\\s\\\"){{ full }}"
docs/conf.py:
- default
- search: vfull
replace: major_minor_p
- search: major_minor_block
replace_raw: "{{ next_major }}"
Yes, YAML! But you can use JSON or TOML also.
Mustaches are Jinja2 templates (like in Ansible, for example). Also, as you can see, it is possible to have a list of replacements per file.
And yes, versioning is done by schemes.
You can find a thorough explanations in docs.
Well, you would not belive, but
scd
or more verbose
scd -v
>>> Use /home/sergey/dev/pvt/scd/.scd.yaml as config file
>>> Parsed config as YAML
>>> Version is 0.1.0.dev34+342f2c2
>>> Start to process /home/sergey/dev/pvt/scd/setup.py
>>> Modify 'version="0.0.1",' to 'version="0.1.0.dev34+342f2c2",'
>>> Start to process /home/sergey/dev/pvt/scd/docs/source/conf.py
>>> Modify "version = '1.0'" to "0.1'"
>>> Modify "release = '1.0.0b1'" to "0.1.0'"
>>> Start to process /home/sergey/dev/pvt/scd/scd/__init__.py
>>> Modify '__version__ = "0.1.0"' to '0.1.0.dev34"'
Because every version releases look the same.