gitlab CI: extend the generation script to be somewhat more generic
[platform/upstream/libevdev.git] / .gitlab-ci / generate-gitlab-ci.py
index 806d7c8..1bbebb3 100755 (executable)
@@ -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()