Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
prepare.py 1.75 KiB
#! /usr/bin/env python3

import tarfile
import shutil
import ssl

from os import environ as env, symlink
from platform import system
from io import BytesIO
from urllib.request import Request, urlopen
from urllib.parse import quote, urlencode
from zipfile import ZipFile
from pathlib import Path


def define(key: str, value: str):
    return ["-D", f"{key}={value}"]


def define_env(name: str):
    return define(name, env[name]) if name in env else []


def fetch_artifacts(project, reference, job):
    gitlab_host = "https://git.imp.fu-berlin.de"
    project = quote(project, safe="")
    reference = quote(reference, safe="")
    params = urlencode([("job", job)], doseq=True)
    url = f"{gitlab_host}/api/v4/projects/{project}/jobs/artifacts/{reference}/download?{params}"
    headers = {"JOB-TOKEN": env["CI_JOB_TOKEN"]}
    return ZipFile(
        BytesIO(
            urlopen(
                Request(url, headers=headers), context=ssl._create_unverified_context()
            ).read()
        )
    )


def extract_cmake_package(artifacts, name):
    for filename in artifacts.namelist():
        if Path(filename).match(f"{name}-*.tar.xz"):
            with tarfile.open(fileobj=BytesIO(artifacts.read(filename))) as f:
                f.extractall("vendor")
            shutil.move(next(Path("vendor").glob(f"{name}-*/")), f"vendor/{name}")


if __name__ == "__main__":
    if system() == "Windows":
        job_stem = "package: [windows]"
    elif system() == "Linux":
        job_stem = "package: [centos]"
    else:
        assert False

    for name, project, job in [
        ("biotracker-interfaces", "bioroboticslab/biotracker/interfaces", job_stem),
    ]:
        with fetch_artifacts(project, "master", job) as artifacts:
            extract_cmake_package(artifacts, name)