From e2b39c29daa1b03e017059db41a347b40d6c8694 Mon Sep 17 00:00:00 2001 From: Theo Chatzimichos Date: Nov 13 2017 19:44:11 +0000 Subject: bin/get_formulas.py: Add --clone-from and --clone-branch options These two options are useful for the CI runner to clone directly from our gitlab instance, and to get the production branch directly, instead of cloning from github, adding our gitlab instance as remote and checking out the production branch. --- diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e723cf6..fc218b2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -35,7 +35,7 @@ test_show_highstate_against_forked_formulas: GIT_SSL_NO_VERIFY: 'true' before_script: - bin/prepare_test_show_highstate_env.sh - - bin/get_formulas.py -c -d /srv/formula -s -r opensuse + - bin/get_formulas.py -c -d /srv/formula -s --clone-from 'https://gitlab.infra.opensuse.org/saltstack-formulas' --clone-branch production script: bin/test_show_highstate.sh tags: - docker diff --git a/bin/get_formulas.py b/bin/get_formulas.py index b71e408..1b3453a 100755 --- a/bin/get_formulas.py +++ b/bin/get_formulas.py @@ -34,14 +34,14 @@ def git(cmd, cwd=None): sys.exit(status) -def clone_or_pull(DEST): +def clone_or_pull(CLONE_FROM, CLONE_BRANCH, DEST): def use_git_to_clone_or_pull_repo(): if not os.path.exists(DEST): os.mkdir(DEST) if os.path.isdir(FULL_PATH): git(['pull', '-q'], cwd=FULL_PATH) else: - git(['clone', '-q', url, FULL_PATH]) + git(['clone', '-q', url, FULL_PATH] + branch_opts) def use_pygit2_to_clone_or_pull_repo(): import pygit2 @@ -52,12 +52,21 @@ def clone_or_pull(DEST): else: pygit2.clone_repository(url, FULL_PATH, bare=False) - for formula, data in FORMULAS.items(): - namespace = data.get('namespace', 'saltstack-formulas') - prefix = data.get('prefix', '') - url = 'https://github.com/%s/%s%s-formula' % (namespace, prefix, formula) - FULL_PATH = '%s/%s-formula' % (DEST, formula) - use_git_to_clone_or_pull_repo() + branch_opts = [] + if CLONE_BRANCH: + branch_opts = ['-b', CLONE_BRANCH, '--single-branch'] + if CLONE_FROM: + for formula in FORMULAS.keys(): + url = '%s/%s-formula' % (CLONE_FROM, formula) + FULL_PATH = '%s/%s-formula' % (DEST, formula) + use_git_to_clone_or_pull_repo() + else: + for formula, data in FORMULAS.items(): + namespace = data.get('namespace', 'saltstack-formulas') + prefix = data.get('prefix', '') + url = 'https://github.com/%s/%s%s-formula' % (namespace, prefix, formula) + FULL_PATH = '%s/%s-formula' % (DEST, formula) + use_git_to_clone_or_pull_repo() def create_symlinks(DEST): @@ -72,6 +81,8 @@ parser = argparse.ArgumentParser(description='Loads the formulas from FORMULAS.y parser.add_argument('-p', '--pull-requests', action='store_true', help='Prints the status of the Pull Requests that are defined in FORMULAS.yaml under "pending".') parser.add_argument('-d', '--destination', nargs=1, help='Destination absolute path of the cloned (or to-be-cloned) repositories of the formulas.') parser.add_argument('-c', '--clone', action='store_true', help='Clone the formulas to the destination specified with "--destination". If the repository is already cloned, then it will be pulled/fetched.') +parser.add_argument('--clone-from', nargs=1, help='Specify the git provider to clone from together with the namespace.') +parser.add_argument('--clone-branch', nargs=1, help='Specify the branch to clone.') parser.add_argument('-s', '--symlink', action='store_true', help='Creates symlink from the specified destination to /srv/salt.') args = parser.parse_args() @@ -79,13 +90,23 @@ if args.pull_requests: check_open_pull_requests() # Every option below requires the --destination argument to be set -if args.clone or args.symlink: +if args.clone or args.symlink or args.clone_from or args.clone_branch: + if (args.clone_from or args.clone_branch) and not args.clone: + parser.print_help() + sys.exit(1) + if not args.destination or not os.path.isabs(args.destination[0]): parser.print_help() sys.exit(1) if args.clone: - clone_or_pull(args.destination[0]) + clone_from = None + clone_branch = None + if args.clone_from: + clone_from = args.clone_from[0] + if args.clone_branch: + clone_branch = args.clone_branch[0] + clone_or_pull(clone_from, clone_branch, args.destination[0]) if args.symlink: create_symlinks(args.destination[0])