diff --git a/.gitlab-ci/generate-gitlab-ci.py b/.gitlab-ci/generate-gitlab-ci.py index 806d7c8..1bbebb3 100755 --- a/.gitlab-ci/generate-gitlab-ci.py +++ b/.gitlab-ci/generate-gitlab-ci.py @@ -3,7 +3,13 @@ # This file generates the .gitlab-ci.yml file that defines the pipeline. +import argparse import jinja2 +import os +import sys + +from pathlib import Path + distributions = [ {'name': 'fedora', 'version': '30'}, @@ -35,16 +41,34 @@ distributions = [ {'name': 'alpine', 'version': 'latest'}, ] +# The various sources for templating +SOURCE_DIR = Path('.gitlab-ci') +TEMPLATE_FILE = 'gitlab-ci.tmpl' + +BASE_DIR = Path('.') +OUTPUT_FILE = '.gitlab-ci.yml' def generate_template(): - env = jinja2.Environment(loader=jinja2.FileSystemLoader('./.gitlab-ci'), + env = jinja2.Environment(loader=jinja2.FileSystemLoader(os.fspath(SOURCE_DIR)), trim_blocks=True, lstrip_blocks=True) - template = env.get_template('gitlab-ci.tmpl') + template = env.get_template(TEMPLATE_FILE) config = {'distributions': distributions} - with open('.gitlab-ci.yml', 'w') as fd: + with open(BASE_DIR / OUTPUT_FILE, 'w') as fd: template.stream(config).dump(fd) if __name__ == '__main__': + description = (''' + This script generates the .gitlab-ci.yml file. + + It must be run from the git repository root directory and will overwrite + the existing .gitlab-ci.yml file. + ''') + parser = argparse.ArgumentParser(description=description) + parser.parse_args() + + if not SOURCE_DIR.exists(): + print('Error: run me from the top-level tree') + sys.exit(1) generate_template()