summaryrefslogtreecommitdiffstats
path: root/release.py
diff options
context:
space:
mode:
authorIryna Cherniavska <i.chernyavska@gmail.com>2015-09-25 10:12:56 -0700
committerIryna Cherniavska <i.chernyavska@gmail.com>2015-09-25 10:12:56 -0700
commitded45c4dd9aabf2103e071f5489e853b4a1e5719 (patch)
treef5e9b5493cd2b2e9e38aac1802859eb442e684ed /release.py
parent764f69a47bc242383e992502491a1ae0012f13a0 (diff)
Updated release script with a --dry-run and --confirm-steps option.
Diffstat (limited to 'release.py')
-rw-r--r--release.py93
1 files changed, 68 insertions, 25 deletions
diff --git a/release.py b/release.py
index f94667b9..96b4f5c0 100644
--- a/release.py
+++ b/release.py
@@ -4,8 +4,44 @@ import re
import ast
import subprocess
import sys
+from optparse import OptionParser
DEBUG = False
+CONFIRM_STEPS = False
+DRY_RUN = False
+
+
+def skip_step():
+ """
+ Asks for user's response whether to run a step. Default is yes.
+ :return: boolean
+ """
+ global CONFIRM_STEPS
+
+ if CONFIRM_STEPS:
+ choice = raw_input("--- Confirm step? (y/N) [y] ")
+ if choice.lower() == 'n':
+ return True
+ return False
+
+
+def run_step(*args):
+ """
+ Prints out the command and asks if it should be run.
+ If yes (default), runs it.
+ :param args: list of strings (command and args)
+ """
+ global DRY_RUN
+
+ cmd = args
+ print(' '.join(cmd))
+ if skip_step():
+ print('--- Skipping...')
+ elif DRY_RUN:
+ print('--- Pretending to run...')
+ else:
+ subprocess.check_output(cmd)
+
def version(version_file):
_version_re = re.compile(r'__version__\s+=\s+(.*)')
@@ -16,41 +52,31 @@ def version(version_file):
return ver
+
def commit_for_release(version_file, ver):
- cmd = ['git', 'reset']
- print(' '.join(cmd))
- subprocess.check_output(cmd)
- cmd = ['git', 'add', version_file]
- print(' '.join(cmd))
- subprocess.check_output(cmd)
- cmd = ['git', 'commit', '--message', 'Releasing version %s' % ver]
- print(' '.join(cmd))
- subprocess.check_output(cmd)
+ run_step('git', 'reset')
+ run_step('git', 'add', version_file)
+ run_step('git', 'commit', '--message', 'Releasing version %s' % ver)
+
def create_git_tag(tag_name):
- cmd = ['git', 'tag', tag_name]
- print(' '.join(cmd))
- subprocess.check_output(cmd)
+ run_step('git', 'tag', tag_name)
+
def register_with_pypi():
- cmd = ['python', 'setup.py', 'register']
- print(' '.join(cmd))
- subprocess.check_output(cmd)
+ run_step('python', 'setup.py', 'register')
+
def create_source_tarball():
- cmd = ['python', 'setup.py', 'sdist']
- print(' '.join(cmd))
- subprocess.check_output(cmd)
+ run_step('python', 'setup.py', 'sdist')
+
def push_to_github():
- cmd = ['git', 'push', 'origin', 'master']
- print(' '.join(cmd))
- subprocess.check_output(cmd)
+ run_step('git', 'push', 'origin', 'master')
+
def push_tags_to_github():
- cmd = ['git', 'push', '--tags', 'origin']
- print(' '.join(cmd))
- subprocess.check_output(cmd)
+ run_step('git', 'push', '--tags', 'origin')
if __name__ == '__main__':
@@ -59,9 +85,26 @@ if __name__ == '__main__':
ver = version('pgcli/__init__.py')
print('Releasing Version:', ver)
- choice = raw_input('Are you sure? (y/N)')
+
+ parser = OptionParser()
+ parser.add_option(
+ "-c", "--confirm-steps", action="store_true", dest="confirm_steps",
+ default=False, help=("Confirm every step. If the step is not "
+ "confirmed, it will be skipped.")
+ )
+ parser.add_option(
+ "-d", "--dry-run", action="store_true", dest="dry_run",
+ default=False, help="Print out, but not actually run any steps."
+ )
+
+ popts, pargs = parser.parse_args()
+ CONFIRM_STEPS = popts.confirm_steps
+ DRY_RUN = popts.dry_run
+
+ choice = raw_input('Are you sure? (y/N) [n] ')
if choice.lower() != 'y':
sys.exit(1)
+
commit_for_release('pgcli/__init__.py', ver)
create_git_tag('v%s' % ver)
register_with_pypi()