Your Semantic Versioning personal assistant
Project description
Index
Introduction | Requirements | Motivation | Usage | Installation | Project Structure
Introduction
ongeza is Swahili for “increase” and a Python command line application (CLI) that makes following the Semantic Versioning Specification a breeze. If called with no options, ongeza will print the repo’s current git tag version. With ongeza, you can
Quickly ongeza to a patch, minor, or major version
Stash uncommitted changes before ongezaing
Create a git tag with the new version number
Bump python, php, and javascript projects
and much more…
Requirements
ongeza has been tested and is known to work on Python 2.7, 3.4, and 3.5; and PyPy 4.0
Motivation
I think we can all agree that Semantic Versioning is awesome sauce. But while coding, who has time to constantly look up the current version and figure out the new version? I created ongeza to relieve myself from this pain of having to worry about version numbers. For example, to ongeza to a minor version inside a python git repo, simply type ongeza -Ttn.
As long as the repo contains a git tag with the current version, ongeza will automagically:
calculate the new version number
figure out which file(s) to update with the new version number
make the appropriate updates and commit the changes
create a git tag with the new version number
Usage
ongeza is intended to be used from the command line.
ongeza [options] <dir>
Basic Examples
show help
ongeza -h
usage: ongeza [options] <dir>
description: ongeza makes following the Semantic Versioning Specification a breeze.
If called with no options, ongeza will print the current git repository's tag version.
If <dir> is not specified, the current dir is used.
positional arguments:
dir the project directory (default: /Users/reubano/Documents/Projects/ongeza).
optional arguments:
-h, --help show this help message and exit
-t {m,n,p}, --type {m,n,p}
version ongeza type, must be one of:
m = major - [x].0.0
n = minor - x.[y].0
p = patch - x.y.[z]
-s NEW_VERSION, --set NEW_VERSION
set arbitrary version number
-S, --skip-commit skip committing version ongezaed files
-T, --tag create git tag at HEAD with the ongezaed version number
-p, --push push to the remote origin
-a, --stash stash uncommitted changes
-f TAG_FORMAT, --tag-format TAG_FORMAT
git tag format
-F TAG_MSG_FORMAT, --tag-msg-format TAG_MSG_FORMAT
git tag message format
-c COMMIT_MSG_FORMAT, --commit-msg-format COMMIT_MSG_FORMAT
git commit message format
-i FILE, --file FILE the versioned file
-v, --version Show version and exit.
-V, --verbose increase output verbosity
view current version
ongeza
ongeza to a ``minor`` version
ongeza -tn
manually set a version
ongeza -s 1.0.2
ongeza to a ``major`` version and add a git tag
ongeza -Ttm
stash uncommitted changes and ongeza to a ``patch`` version
ongeza -atp
Advanced Examples
ongeza ``weird.file`` to a ``minor`` version and use custom formats
ongeza -tn --file='weird.file' --tag-format='{version}' --commit-msg-format='New version: {version}'
ongeza a remote directory to a ``minor`` version and use a custom tag message format
ongeza -tn --tag-msg-format='Release: {version}' /path/to/remote/dir
Installation
(You are using a virtualenv, right?)
At the command line, install ongeza using either pip (recommended)
pip install ongeza
or easy_install
easy_install ongeza
Please see the installation doc for more details.
Project structure
┌── CHANGES.rst
├── CONTRIBUTING.rst
├── INSTALLATION.rst
├── LICENSE
├── MANIFEST.in
├── Makefile
├── README.rst
├── bin
│ └── ongeza
├── ongeza
│ ├── __init__.py
│ ├── git_utils.py
│ ├── main.py
│ └── shell_utils.py
├── dev-requirements.txt
├── helpers
│ ├── check-stage
│ ├── clean
│ ├── docs
│ ├── pippy
│ ├── srcdist
│ └── wheel
├── manage.py
├── requirements.txt
├── setup.cfg
├── setup.py
├── tests
│ ├── __init__.py
│ ├── standard.rc
│ ├── test.py
│ └── test_ongeza.py
└── tox.ini
Design Principles
KISS: Keep it simple, stupid
Do one thing (version ongezaing), and do it well
Support the most common file types used for project versioning, e.g., __init__.py, package.json, etc.
Limitations
no built-in support for pre-release or build numbers, e.g., - 1.0.0-alpha, 1.0.0-alpha.1, 1.0.0-0.3.7, 1.0.0-x.7.z.92 - 1.0.0+build.1, 1.3.7+build.11.e0f985a
Scripts
ongeza comes with a built in task manager manage.py
Setup
pip install -r dev-requirements.txt
Examples
Run python linter and nose tests
manage lint
manage test
Contributing
Please mimic the coding style/conventions used in this repo. If you add new classes or functions, please add the appropriate doc blocks with examples. Also, make sure the python linter and nose tests pass.
Please see the contributing doc for more details.
License
ongeza is distributed under the MIT License.