-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathprepare.py
More file actions
executable file
·61 lines (48 loc) · 1.83 KB
/
prepare.py
File metadata and controls
executable file
·61 lines (48 loc) · 1.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#! /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),
("biotracker-utility", "bioroboticslab/biotracker/utility", job_stem),
]:
with fetch_artifacts(project, "master", job) as artifacts:
extract_cmake_package(artifacts, name)