Skip to content

Instantly share code, notes, and snippets.

@aviadlevy
Last active April 4, 2019 10:39
Show Gist options
  • Save aviadlevy/6235439deb0343888e0e59e650a89abc to your computer and use it in GitHub Desktop.
Save aviadlevy/6235439deb0343888e0e59e650a89abc to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
import os
import semver
import subprocess
import sys
def git(*args):
return subprocess.check_output(["git"] + list(args))
def tag_repo(tag):
push_url = "https://{}:{}@{}/{}/{}.git".format(os.environ['CI_PUSH_USER'],
os.environ['CI_PUSH_TOKEN'],
os.environ['GITLAB_HOST'],
os.environ['CI_PROJECT_NAMESPACE'],
os.environ['CI_PROJECT_NAME'])
print(push_url)
git("remote", "set-url", "--push", "origin", push_url)
git("tag", tag)
git("push", "origin", tag)
def bump(latest):
try:
commit_msg = " ".join([i for i in git("log", "-1", "--pretty=%B").decode().strip().split("\n")
if not i.startswith("#")])
except subprocess.CalledProcessError:
commit_msg = "bump"
if "bump-major" in commit_msg:
return semver.bump_major(latest)
if "bump-minor" in commit_msg:
return semver.bump_minor(latest)
return semver.bump_patch(latest)
def main():
try:
latest = git("describe", "--tags").decode().strip()
except subprocess.CalledProcessError:
# No tags in the repository
version = "0.0.1"
else:
# Skip already tagged commits
if '-' not in latest:
print(latest)
return 0
version = bump(latest)
if version == -1:
return 0
tag_repo(version)
print(version)
return 0
if __name__ == "__main__":
sys.exit(main())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment