aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/shared-repo-unpack
blob: 8e7ec953c3d6bff0c50b300cafa0d950ca6d80e9 (plain)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/env python3
#
# Copyright Linux Foundation, Richard Purdie
#
# SPDX-License-Identifier: GPL-2.0-only
#
# Unpack a shared directory of repos to the autobuilder working directory
#

import json
import os
import sys
import subprocess
import errno
import time
import random

import utils


parser = utils.ArgParser(description='Unpacks a shared directory of repos to the autobuilder working directory.')

parser.add_argument('repojson',
                    help="The json file containing the repositories to use")
parser.add_argument('abworkdir',
                    help="The autobuilder working directory")
parser.add_argument('target',
                    help="The target we want to unpack repos for")
parser.add_argument('-c', '--cache-dir',
                    action='store',
                    help="The shared cache directory where the repos may be transferred from")
parser.add_argument('-p', '--publish-dir',
                    action='store',
                    help="Where to publish artefacts to (optional)")
parser.add_argument('--workername',
                    action='store',
                    default=None,
                    help="the name of the worker the build is running on")

args = parser.parse_args()

scriptsdir = os.path.dirname(os.path.realpath(__file__))
ourconfig = utils.loadconfig()

stashdir = utils.getconfig("REPO_STASH_DIR", ourconfig)

needrepos = utils.getconfigvar("NEEDREPOS", ourconfig, args.target, None)

with open(args.repojson) as f:
    repos = json.load(f)

targetsubdir = args.abworkdir + "/repos"
needrepos_baseddirs = [r.split('/')[0] for r in needrepos]
for repo in sorted(repos.keys()):
    # gplv2 is no longer built/tested in master
    if repo == "meta-gplv2":
        continue
    if repo not in needrepos_baseddirs:
        continue
    if args.cache_dir:
        utils.printheader("Copying in repo %s" % repo)
        utils.mkdir(targetsubdir)
        if args.target in ["a-full", "a-quick"]:
            # full/quick need all repo data due to send_qa_email.py
            subprocess.check_call(["tar", "-I", "zstd", "-C", targetsubdir, "-xf", "%s.tar.zst" % args.cache_dir])
        else:
            subprocess.check_call(["tar", "-I", "zstd", "-C", targetsubdir, "-xf", "%s.tar.zst" % args.cache_dir, "./" + repo])
    else:
        utils.printheader("Fetching repo %s" % repo)
        utils.fetchgitrepo(targetsubdir, repo, repos[repo], stashdir)
        if args.publish_dir:
            utils.publishrepo(targetsubdir, repo, args.publish_dir)
    utils.flush()

utils.setup_buildtools_tarball(ourconfig, args.workername, args.abworkdir + "/buildtools")

try:
    subprocess.check_call([scriptsdir + "/layer-config", args.abworkdir, args.target])
except subprocess.CalledProcessError as e:
    sys.exit(e.returncode)