#!/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)