mirror of
https://git.yoctoproject.org/meta-arm
synced 2026-05-30 00:21:17 +00:00
CI: maintain centralised repositories to speed fetching
Kas supports 'reference repositories' which are used as a local source of git objects to speed up fetches. At the beginning of the CI run we can update these repositories once to speed up later fetches. Change-Id: I138051fd3cf9b5675e0fa5007cd8088abd17db4e Signed-off-by: Ross Burton <ross.burton@arm.com> Signed-off-by: Jon Mason <jon.mason@arm.com>
This commit is contained in:
+15
-3
@@ -3,6 +3,7 @@ image: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/yocto-builder:master
|
|||||||
|
|
||||||
# First do a common bootstrap, and then build all the targets
|
# First do a common bootstrap, and then build all the targets
|
||||||
stages:
|
stages:
|
||||||
|
- prep
|
||||||
- bootstrap
|
- bootstrap
|
||||||
- build
|
- build
|
||||||
|
|
||||||
@@ -11,6 +12,7 @@ stages:
|
|||||||
stage: build
|
stage: build
|
||||||
variables:
|
variables:
|
||||||
KAS_WORK_DIR: $CI_PROJECT_DIR/work
|
KAS_WORK_DIR: $CI_PROJECT_DIR/work
|
||||||
|
KAS_REPO_REF_DIR: $CI_BUILDS_DIR/persist/repos
|
||||||
SSTATE_DIR: $CI_BUILDS_DIR/persist/sstate
|
SSTATE_DIR: $CI_BUILDS_DIR/persist/sstate
|
||||||
DL_DIR: $CI_BUILDS_DIR/persist/downloads
|
DL_DIR: $CI_BUILDS_DIR/persist/downloads
|
||||||
BB_LOGCONFIG: $CI_PROJECT_DIR/kas/logging.yml
|
BB_LOGCONFIG: $CI_PROJECT_DIR/kas/logging.yml
|
||||||
@@ -18,7 +20,7 @@ stages:
|
|||||||
- echo KAS_WORK_DIR = $KAS_WORK_DIR
|
- echo KAS_WORK_DIR = $KAS_WORK_DIR
|
||||||
- echo SSTATE_DIR = $SSTATE_DIR
|
- echo SSTATE_DIR = $SSTATE_DIR
|
||||||
- echo DL_DIR = $DL_DIR
|
- echo DL_DIR = $DL_DIR
|
||||||
- mkdir --verbose --parents $KAS_WORK_DIR $SSTATE_DIR $DL_DIR
|
- mkdir --verbose --parents $KAS_WORK_DIR $KAS_REPO_REF_DIR $SSTATE_DIR $DL_DIR
|
||||||
|
|
||||||
# Generalised fragment to do a Kas build
|
# Generalised fragment to do a Kas build
|
||||||
.build:
|
.build:
|
||||||
@@ -31,7 +33,17 @@ stages:
|
|||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# First phase, bootstrap and machine coverage
|
# Prep stage, update repositories once
|
||||||
|
#
|
||||||
|
update-repos:
|
||||||
|
extends: .setup
|
||||||
|
stage: prep
|
||||||
|
script:
|
||||||
|
- flock --verbose --timeout 60 $KAS_REPO_REF_DIR ./kas/update-repos
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bootstrap stage, bootstrap and machine coverage
|
||||||
#
|
#
|
||||||
|
|
||||||
# Build a number of native tools first to ensure the other builders don't race
|
# Build a number of native tools first to ensure the other builders don't race
|
||||||
@@ -49,7 +61,7 @@ machine-coverage:
|
|||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Second phase, the actual build jobs
|
# Build stage, the actual build jobs
|
||||||
#
|
#
|
||||||
|
|
||||||
a5ds:
|
a5ds:
|
||||||
|
|||||||
Executable
+41
@@ -0,0 +1,41 @@
|
|||||||
|
#! /usr/bin/env python3
|
||||||
|
|
||||||
|
# Update clones of the repositories we need in KAS_REPO_REF_DIR to speed up fetches
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import pathlib
|
||||||
|
|
||||||
|
def repo_shortname(url):
|
||||||
|
# Taken from Kas (Repo.__getattr__) to ensure the logic is right
|
||||||
|
from urllib.parse import urlparse
|
||||||
|
url = urlparse(url)
|
||||||
|
return ('{url.netloc}{url.path}'
|
||||||
|
.format(url=url)
|
||||||
|
.replace('@', '.')
|
||||||
|
.replace(':', '.')
|
||||||
|
.replace('/', '.')
|
||||||
|
.replace('*', '.'))
|
||||||
|
|
||||||
|
repositories = (
|
||||||
|
"https://git.yoctoproject.org/git/poky",
|
||||||
|
"https://git.openembedded.org/meta-openembedded",
|
||||||
|
"https://git.yoctoproject.org/git/meta-virtualization",
|
||||||
|
"https://git.yoctoproject.org/git/meta-zephyr",
|
||||||
|
"https://github.com/kraj/meta-clang",
|
||||||
|
)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if "KAS_REPO_REF_DIR" not in os.environ:
|
||||||
|
print("KAS_REPO_REF_DIR needs to be set")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
base_repodir = pathlib.Path(os.environ["KAS_REPO_REF_DIR"])
|
||||||
|
|
||||||
|
for repo in repositories:
|
||||||
|
repodir = base_repodir / repo_shortname(repo)
|
||||||
|
if repodir.exists():
|
||||||
|
subprocess.run(["git", "-C", repodir, "fetch"], check=True)
|
||||||
|
else:
|
||||||
|
subprocess.run(["git", "clone", "--bare", repo, repodir], check=True)
|
||||||
Reference in New Issue
Block a user