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])