diff --git a/download-latest-firmware-build.py b/download-latest-firmware-build.py index 409e02ceee30f2dd4ca22e3b8d1355c404100376..be27efa0c45c4db1606e9a26b1918cb39b288ba0 100755 --- a/download-latest-firmware-build.py +++ b/download-latest-firmware-build.py @@ -10,6 +10,7 @@ import os.path import re import tempfile import sys +import logging import subprocess GITLAB_API_BASE = "https://gitlab.freifunk-stuttgart.de/api/v4" @@ -19,6 +20,7 @@ ap = argparse.ArgumentParser() ap.add_argument("--pipeline-id", help="Pipeline ID to download. If omitted, download latest successfull.", default=None) ap.add_argument("--pipeline-id-file", help="Store downloaded Pipeline ID in this file and only download if latest pipeline ID doesn't match file contents") ap.add_argument("--create-symlink", help="Create symlink to downloaded firmware at the specified path") +ap.add_argument("--debug", action="store_true", help="Produce lots of debug output") args = ap.parse_args() def find_version_from_archive(archive_file_list): @@ -28,30 +30,38 @@ def find_version_from_archive(archive_file_list): version_regex = re.compile(r'gluon-ffs-(([0-9]+\.[0-9]+[+][0-9]{4}-[0-9]{2}-[0-9]{2})-g\.[a-f0-9]+-s\.[a-f0-9]+-)') version_matches = version_regex.match(filename) if version_matches: + logging.debug("Found version number {}".format(version_matches.group(2))) return version_matches.group(2) return None def extract_zip(artifact_zipfile): + logging.debug("Extracting ZIP from FD {}".format(artifact_zipfile)) with zipfile.ZipFile(artifact_zipfile) as artifact_zip: version = find_version_from_archive(artifact_zip.infolist()) with tempfile.TemporaryDirectory(dir=os.getcwd()) as tempdir: # Python ZipFile doesn't support symlinks # https://bugs.python.org/issue27318 + logging.debug("Running 'unzip'") subprocess.check_call(['unzip', artifact_zipfile.name, '-d{}'.format(tempdir)], stdin=artifact_zipfile) outputdir = os.path.join(tempdir, "gluon", "output") os.rename(outputdir, version) return version def find_latest_pipeline_id(): + logging.debug("Finding pipeline ID") pipelines_request = requests.get("{}/projects/{}/pipelines".format(GITLAB_API_BASE, PROJECT_ID)) pipelines_request.raise_for_status() pipelines = pipelines_request.json() for pipeline in pipelines: if pipeline["status"] == "success" and pipeline["ref"].startswith("v"): + logging.debug("Found Pipeline ID: {}".format(pipeline["id"])) return pipeline["id"] return None +if args.debug: + logging.basicConfig(level=logging.DEBUG) + if args.pipeline_id is None: pipeline_id = int(find_latest_pipeline_id())