dephell project bump¶
Bump project version. Versioning scheme specified as --versioning and bumping rule or new version specified as positional argument. For example, bump minor version number by semver rules:
$ dephell project bump --versioning=semver minor
INFO generated new version (old=0.3.2, new=0.4.0)
INFO file bumped (path=/home/gram/Documents/dephell/dephell/__init__.py)
It’s recommend to explicitly add versioning in config to let your users know which scheme you’re using in your project:
[tool.dephell.main]
versioning = "semver"
If you don’t have dephell config, you should explicitly specify from parameter:
dephell project bump --from-format=poetry --from-path=pyproject.toml minor
Or just add it into your config:
[tool.dephell.main]
from = {format = "poetry", path = "pyproject.toml"}
Command steps:
- Try to detect version from
fromfile. - Try to detect version from project source code.
- Generate new version.
- Write new version in source code. DepHell looks for
__version__variable in project source and writes new version in it. - Write new version in
fromfile.
Git tag¶
The command adds git tag if --tag option (or tag = <your_template> in the config) is specified as template.
Template can be string with {version} placeholder (e.g. v.{version}) or just prefix string (e.g. v.)
$ dephell project bump --tag=v. minor
INFO generated new version (old=0.8.0, new=0.9.0)
INFO file bumped (path=/home/gram/Documents/dephell/dephell/__init__.py)
INFO commit and tag
INFO tag created, do not forget to push it: git push --tags
Rules¶
init– write initial version for current versioning scheme.majororbreaking– increment first number of version. Inpep,semver, andcomverit means breaking changes that can broke third-party code that depends on your project. Example:1.2.3→2.0.0. Zero major version has special meaning: before1.0.0release any increment ofminornumber can break anything.minororfeature– increment second number of version. Inpep, andsemverit means non-breaking new features. Example:1.2.3→1.2.0.patch,fixormicro– increment third number of version. Inpep, andsemverit means bugfixes that don’t add new features or break anything. Forcalverit usually means hotfixes that must be delivered ASAP. Example:1.2.3→1.2.4.pre,rcoralpha– increment pre-release number. Semantic depends on versioning scheme. A pre-release version indicates that the version is unstable and anything can be changed until release.premajor– applies bothpreandmajor. Example:1.2.3→2.0.0-rc.1preminor– applies bothpreandminor. Example:1.2.3→1.3.0-rc.1prepatch– applies bothpreandpatch. Example:1.2.3→1.2.4-rc.1release– removes any pre-release number. Example:1.2.3-rc.1→1.2.3post– increment post-release number. This is supported only bypep. Post-release number increment means some changes that do not affect the distributed software at all. For example, correcting an error in the release notes, metainfo, including license in the package etc.dev– incrementdevnumber. Kind of pre-release that must not be used for any purposes except the project development. So, dev-releases should not be uploaded on public index servers. This version number also supported only bypep.local– increment local version number. This number separated from main version by+. See more details in the next section.
Local number¶
- Local number specified in
pepand behave like post-release:1.2+1>1.2. - Be careful, local numbers compared as strings:
1.2+9>1.2+10. - PEP recommends to use this number to indicate applying some patches to the release. For example, patch for compatibility with Ubuntu, with Django or with another project.
semverandcomverallow to use “build metadata” with the same meaning as local number inpep. However, insemverandcomverthese metadata doesn’t affect versions ordering. For example,1.2+1 == 1.2. For all Python projects all tools uses pep, so you shouldn’t worry about it. Thence, DepHell allows you to use local number forsemverandcomvertoo.- Local number can contains any ASCII letters, digits and dot.
- We recommend to use local number for nightly releases. It’s like pre-release, but when you don’t know version of future release and just add local number to the latest release version. See discussion in SemVer repository for more details: Nightly builds not supported
- When you specifying rule as
local, DepHell just increments previous local number: 1 → 2 → 3… When you want to specify exact value for local version you can pass instead of rule+sign and local version number. For example, if your current version1.2.3+1and you rundephell project bump +lolyour new version will be1.2.3+lol.
Versioning schemes¶
- pep – versioning scheme specified in PEP-420. Based on SemVer, but has much more features. All tools in Python (and DepHell too) parse projects versions by this PEP, so you can use it for your project and don’t care about machines. However, this pep allows to make over-complicated versions that really difficult to understand for humans.
- semver – most recommend versioning scheme. Allows your users (and machines) by version easily understand when you have broken something in your project, have added some new features or have fixed some bugs. If you don’t know what to use, use it.
- comver – this is semver without
patchnumber. All changes that don’t broke anything incrementsminorversion number. You can use it if in your project it’s difficult to separate bug fixes and features. - calver – it’s when you use current date (year and month) instead of version. For example,
2018.12. DepHell uses 4-numbers year as major number to explicitly indicate that your project uses CalVer. Also you can passmicrorule to add day in the version number. If previous release was today thenmicrorule will just increment this number. You can use this versioning if you don’t want to care about versioning at all. However, this is strongly discouraged for any projects that can be used as dependency for third-party code. - romver – romantic versioning (not Sentimental Versioning, please) is when humans and marketing more important for you than machines. Bumping
major,minororpatchnumber shows importance of changes and says nothing about type of this changes. Every update can break everything. As calver, never use this versioning in tools that can be used in any third-party code. But it’s OK for products for users like Firefox. DepHell allows onlymajor,minorandpatchrules for RomVer because this versioning for humans, and humans don’t understand complicated combinations ofpre,postandlocal. - serial – this is just single number that you increment for every release (1, 2, 3…). Simplest versioning scheme, but doesn’t provide any information about release changes type. Avoid this scheme if possible.
- roman – roman numbers versioning. Never use it. It won’t work after third release. However, you can try it for your internal project. Just for fun. Don’t say anyone that I’ve recommended it to you.
- zerover – kind of
semver, but yourmajornumber always 0. Sounds like joke, but this is the best versioning for experimental projects that can broke anything in any release. So, if it’s about your project then explicitly specifyzeroverversioning in your DepHell config. It says to your users that they can’t upgrade without running quite strong integration tests.
Projects that use these versioning schemes¶
- semver:
- comver:
- calver:
- romver:
- roman:
- zerover:
Command examples¶
SemVer:
$ dephell project bump init
INFO generated new version (old=0.0.0, new=0.1.0)
$ dephell project bump fix
INFO generated new version (old=0.1.0, new=0.1.1)
$ dephell project bump minor
INFO generated new version (old=0.1.1, new=0.2.0)
$ dephell project bump major
INFO generated new version (old=0.2.0, new=1.0.0)
$ dephell project bump pre
INFO generated new version (old=1.0.0, new=1.0.0-rc.1)
$ dephell project bump post
ERROR ValueError: rule post is unsupported by scheme semver
$ dephell project bump local
INFO generated new version (old=1.0.0-rc.1, new=1.0.0-rc.1+1)
$ dephell project bump +ubuntu1
INFO generated new version (old=1.0.0-rc.1+1, new=1.0.0-rc.1+ubuntu1)
CalVer:
$ dephell project bump --versioning=calver init
INFO generated new version (old=1.0.0-rc.1+ubuntu1, new=2019.4)
# today
$ dephell project bump --versioning=calver micro
INFO generated new version (old=2019.4, new=2019.4.9)
# if execute `micro` again: today + 1
$ dephell project bump --versioning=calver micro
INFO generated new version (old=2019.4.9, new=2019.4.10)
PEP:
$ dephell project bump --versioning=pep init
INFO generated new version (old=2019.4.10, new=0.1.0)
$ dephell project bump --versioning=pep pre
INFO generated new version (old=0.1.0, new=0.1.0rc1)
$ dephell project bump --versioning=pep post
INFO generated new version (old=0.1.0rc1, new=0.1.0.post1)
# `dev` can be attached to `pre` or `post` too
$ dephell project bump --versioning=pep dev
INFO generated new version (old=0.1.0.post1, new=0.1.0.post1.dev1)
ZeroVer:
$ dephell project bump --versioning=zerover major
ERROR ValueError: rule major is unsupported by scheme zerover
$ dephell project bump --versioning=zerover minor
INFO generated new version (old=0.3.2, new=0.4.0)
Roman:
$ dephell project bump --versioning=roman init
INFO generated new version (old=0.3.2, new=I)
$ dephell project bump --versioning=roman major
INFO generated new version (old=I, new=II)
Custom version:
$ dephell project bump 0.3.2
INFO generated new version (old=0.1.0.post1.dev1, new=0.3.2)
See also¶
- dephell inspect versioning to get information about the project versioning scheme and available rules.
- dephell project build to make release dist archives.