Created
August 24, 2018 22:31
-
-
Save loganlinn/a74bc13c20364e16dc46528863a8f590 to your computer and use it in GitHub Desktop.
python script to release gradle project based on commit message in travis-ci environment
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import logging | |
import os | |
import re | |
import subprocess | |
import sys | |
logging.basicConfig(format="%(asctime)s %(levelname)s %(message)s", datefmt='%Y-%m-%dT%H:%M:%SZ') | |
logging.getLogger().setLevel(logging.DEBUG) | |
git_exec = lambda *args: subprocess.check_call(['git'] + list(args)) | |
gradle_exec = lambda *args: subprocess.check_call(['./gradlew'] + list(args)) | |
def get_release_task(commit_message): | |
# e.g. [ci release] or [ci :example:release] | |
match = re.search("\[ci (([^][]*:)?release)\]", commit_message) | |
if match: | |
return match.group(1) | |
elif re.match('PUBLISH', commit_message): | |
return 'release' | |
def checkout_branch(branch): | |
def decorator(func): | |
def wrapper(*args, **kwargs): | |
logging.info("Checking out '%s'", branch) | |
git_exec('checkout', branch) | |
try: | |
func(*args, **kwargs) | |
finally: | |
logging.info('Checking out previous branch') | |
git_exec('checkout', '@{-1}') | |
return wrapper if branch else func | |
return decorator | |
def main(): | |
commit = os.environ.get('TRAVIS_COMMIT', 'HEAD') | |
commit_message = subprocess.check_output(['git', 'log', '--format=%B', '-n', '1', commit]) | |
release_task = get_release_task(commit_message) | |
if not release_task: | |
logging.info("Skipping release") | |
return | |
# by default Travis checks out in detached mode | |
@checkout_branch(os.environ.get('TRAVIS_BRANCH', None)) | |
def gradle_release(): | |
logging.info("Running Gradle task '%s'", release_task) | |
gradle_exec(release_task, '-Prelease.useAutomaticVersion=true') | |
logging.info("Starting release...") | |
gradle_release() | |
logging.info("Completed release.") | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment