diff --git a/.gitignore b/.gitignore index 0d6abcf..857cede 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ *.py[cod] *.egg-info/ build/ +builds/ dist/ +src/ diff --git a/bob/cli.py b/bob/cli.py index df7180f..bc65ed6 100644 --- a/bob/cli.py +++ b/bob/cli.py @@ -1,13 +1,14 @@ # -*- coding: utf-8 -*- -"""Usage: bob build - bob deploy [--overwrite] +"""Usage: bob build [--name=FILE] + bob deploy [--overwrite] [--name=] Build formula and optionally deploy it. Options: -h --help --overwrite allow overwriting of deployed archives. + --name= allow separate name for the archived output Configuration: Environment Variables: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, S3_BUCKET, S3_PREFIX (optional), UPSTREAM_S3_BUCKET (optional), UPSTREAM_S3_PREFIX (optional) @@ -21,8 +22,8 @@ from .models import Formula from .utils import print_stderr -def build(formula): - f = Formula(path=formula) +def build(formula, name): + f = Formula(path=formula, override_path=name) try: assert f.exists @@ -36,8 +37,8 @@ def build(formula): return f -def deploy(formula, overwrite): - f = build(formula) +def deploy(formula, overwrite, name): + f = build(formula, name) print('Archiving.') f.archive() @@ -53,12 +54,13 @@ def main(): do_build = args['build'] do_deploy = args['deploy'] do_overwrite = args['--overwrite'] + do_name = args['--name'] if do_build: - build(formula) + build(formula, name=do_name) if do_deploy: - deploy(formula, overwrite=do_overwrite) + deploy(formula, overwrite=do_overwrite, name=do_name) def dispatch(): diff --git a/bob/models.py b/bob/models.py index 7f5888a..49eb010 100644 --- a/bob/models.py +++ b/bob/models.py @@ -36,9 +36,10 @@ sys.stderr = os.fdopen(sys.stderr.fileno(), 'w', 0) class Formula(object): - def __init__(self, path): + def __init__(self, path, override_path=None): self.path = path self.archived_path = None + self.override_path = override_path if not S3_BUCKET: print_stderr('The environment variable S3_BUCKET must be set to the bucket name.') @@ -135,7 +136,11 @@ class Formula(object): print('Building formula {} in {}:\n'.format(self.path, cwd_path)) # Execute the formula script. - p = process(["/usr/bin/env", "bash", "--", self.full_path, self.build_path], cwd=cwd_path) + args = ["/usr/bin/env", "bash", "--", self.full_path, self.build_path] + if self.override_path: + args.append(self.override_path) + + p = process(args, cwd=cwd_path) pipe(p.stdout, sys.stdout, indent=True) p.wait() @@ -162,7 +167,13 @@ class Formula(object): print_stderr('Deploy requires valid AWS credentials.') sys.exit(1) - key_name = '{}{}.tar.gz'.format(S3_PREFIX, self.path) + if override_name != None: + name = self.override_path + else: + name = self.path + + key_name = '{}{}.tar.gz'.format(S3_PREFIX, name) + key = self.bucket.get_key(key_name) if key: