Skip to content

Instantly share code, notes, and snippets.

@maurobaraldi
Created May 8, 2019 20:04
Show Gist options
  • Save maurobaraldi/1a821a7adcdb034988308e19da5b1eda to your computer and use it in GitHub Desktop.
Save maurobaraldi/1a821a7adcdb034988308e19da5b1eda to your computer and use it in GitHub Desktop.
Bump version from YAML files. Used to bump version form Helm chart files.
#!/usr/bin/env python3
import yaml
def version(filename):
'''Load version from Chart.yaml file.'''
with open(filename, 'r') as f:
return yaml.load(f).get('version')
def set(filename, major, minor, patch):
'''
Set version following Semantic Versioning
More about SemVer https://semver.org/spec/v2.0.0.html
'''
version = '{}.{}.{}'.format(major, minor, patch)
with open(filename, 'r+') as f:
chart = yaml.load(f)
chart['version'] = version
with open(filename, 'w') as f:
yaml.dump(chart, f, default_flow_style=False)
return version
def bump(filename, ver, inc, num):
'''
Bump version.
Args:
- ver = version to be bumped
- inc = major, minor, patch
- num = number to increment to current version.
Ex: bump(filename, '1.2.2', 'patch', 1)
> '1.2.3'
'''
major, minor, patch = ver.split('.')
if inc == 'major': major = int(major) + num
if inc == 'minor': minor = int(minor) + num
if inc == 'patch': patch = int(patch) + num
set(filename, major, minor, patch)
print('New version: {}.{}.{}'.format(major, minor, patch))
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('filename')
parser.add_argument('release')
parser.add_argument('number')
args = parser.parse_args()
current = version(args.filename)
release = args.release
number = args.number
bump(args.filename, current, release, int(number))
@maurobaraldi
Copy link
Author

Usage

python bumpv.py path/to/Chart.yaml patch 1
python bumpv.py path/to/Chart.yaml minor 1
python bumpv.py path/to/Chart.yaml major 1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment