Please disregard, sloppy scripting bit me

On Tue, May 4, 2021 at 4:53 PM Jon Mason via lists.yoctoproject.org
<[email protected]> wrote:
>
> Signed-off-by: Jon Mason <[email protected]>
> ---
>  .gitlab-ci.yml                                | 174 ++++++++++++++++++
>  ci/96b-avenger96.yml                          |   9 +
>  ci/96b-nitrogen.yml                           |   6 +
>  ci/acrn.yml                                   |   6 +
>  ci/base.yml                                   |  35 ++++
>  ci/check-machine-coverage                     |  26 +++
>  ci/check-warnings                             |  18 ++
>  ci/jobs-to-kas                                |  19 ++
>  ci/logging.yml                                |  13 ++
>  ci/meta-oe.yml                                |   8 +
>  ci/meta-python.yml                            |  10 +
>  ci/qemu-cortex-m3.yml                         |   6 +
>  ci/qemu-nios2.yml                             |   6 +
>  ci/qemu-x86.yml                               |   6 +
>  ci/testimage.yml                              |   5 +
>  ci/update-repos                               |  40 ++++
>  .../zephyr-kernel/zephyr-kernel-test.inc      |   3 +
>  17 files changed, 390 insertions(+)
>  create mode 100644 .gitlab-ci.yml
>  create mode 100644 ci/96b-avenger96.yml
>  create mode 100644 ci/96b-nitrogen.yml
>  create mode 100644 ci/acrn.yml
>  create mode 100644 ci/base.yml
>  create mode 100755 ci/check-machine-coverage
>  create mode 100755 ci/check-warnings
>  create mode 100755 ci/jobs-to-kas
>  create mode 100644 ci/logging.yml
>  create mode 100644 ci/meta-oe.yml
>  create mode 100644 ci/meta-python.yml
>  create mode 100644 ci/qemu-cortex-m3.yml
>  create mode 100644 ci/qemu-nios2.yml
>  create mode 100644 ci/qemu-x86.yml
>  create mode 100644 ci/testimage.yml
>  create mode 100755 ci/update-repos
>
> diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
> new file mode 100644
> index 000000000000..26bd1b7a5c62
> --- /dev/null
> +++ b/.gitlab-ci.yml
> @@ -0,0 +1,174 @@
> +image: ghcr.io/siemens/kas/kas-isar
> +
> +  # First do a common bootstrap, and then build all the targets
> +stages:
> +  - prep
> +  - bootstrap
> +  - build
> +  - test
> +
> +# Common job fragment to get a worker ready
> +.setup:
> +  stage: build
> +  variables:
> +    KAS_WORK_DIR: $CI_PROJECT_DIR/work
> +    KAS_REPO_REF_DIR: $CI_BUILDS_DIR/persist/repos
> +    SSTATE_DIR: $CI_BUILDS_DIR/persist/sstate
> +    DL_DIR: $CI_BUILDS_DIR/persist/downloads
> +    BB_LOGCONFIG: $CI_PROJECT_DIR/ci/logging.yml
> +  before_script:
> +    - echo KAS_WORK_DIR = $KAS_WORK_DIR
> +    - echo SSTATE_DIR = $SSTATE_DIR
> +    - echo DL_DIR = $DL_DIR
> +    - mkdir --verbose --parents $KAS_WORK_DIR $KAS_REPO_REF_DIR $SSTATE_DIR 
> $DL_DIR
> +
> +# Generalised fragment to do a Kas build
> +.build:
> +  extends: .setup
> +  script:
> +  - KASFILES=$(./ci/jobs-to-kas $CI_JOB_NAME)
> +  - kas shell --update --force-checkout $KASFILES -c 'cat conf/*.conf'
> +  - kas build $KASFILES
> +  - ./ci/check-warnings $KAS_WORK_DIR/build/warnings.log
> +
> +# KAS testing
> +.test:
> +  extends: .setup
> +  stage: test
> +  script:
> +    - sudo chown -R builder $KAS_WORK_DIR
> +    - sudo chgrp -R builder $KAS_WORK_DIR
> +    - KASFILES=$(./ci/jobs-to-kas $CI_JOB_NAME)
> +    - kas build $KASFILES -c testimage
> +
> +
> +#
> +# Prep stage, update repositories once
> +#
> +update-repos:
> +  extends: .setup
> +  stage: prep
> +  script:
> +  - flock --verbose --timeout 60 $KAS_REPO_REF_DIR ./ci/update-repos
> +
> +
> +#
> +# Bootstrap stage, machine coverage
> +#
> +
> +# What percentage of machines in the layer do we build
> +machine-coverage:
> +  stage: bootstrap
> +  script:
> +  - ./ci/check-machine-coverage
> +  coverage: '/Coverage: \d+/'
> +
> +
> +#
> +# Build stage, the actual build jobs
> +#
> +
> +96b-avenger96:
> +  extends: .build
> +
> +96b-nitrogen:
> +  extends: .build
> +
> +acrn:
> +  extends: .build
> +
> +qemu-cortex-m3:
> +  extends: .build
> +  artifacts:
> +    paths:
> +      - work/build/tmp-newlib/deploy/images/qemu-cortex-m3/*
> +    expire_in: 1 day
> +
> +qemu-nios2:
> +  extends: .build
> +  artifacts:
> +    paths:
> +      - work/build/tmp-newlib/deploy/images/qemu-nios2/*
> +    expire_in: 1 day
> +  allow_failure: true
> +
> +qemu-x86:
> +  extends: .build
> +  artifacts:
> +    paths:
> +      - work/build/tmp-newlib/deploy/images/qemu-x86/*
> +    expire_in: 1 day
> +
> +
> +#
> +# Third phase, the test jobs
> +#
> +
> +# QEMU based machines can use testimage, others will need something else 
> (i.e., LAVA)
> +
> +qemu-cortex-m3/testimage:
> +  extends: .test
> +  needs:
> +    - job: qemu-cortex-m3
> +
> +qemu-nios2/testimage:
> +  extends: .test
> +  needs:
> +    - job: qemu-nios2
> +  allow_failure: true
> +
> +qemu-x86/testimage:
> +  extends: .test
> +  needs:
> +    - job: qemu-x86
> +
> +
> +#
> +# Utility tasks, not executed automatically
> +#
> +
> +# Make the persistant files modifiable by all runners
> +chmod-presistent:
> +  extends: .setup
> +  stage: prep
> +  when: manual
> +  script:
> +  - chmod -R 755 $CI_BUILDS_DIR/persist/*
> +
> +delete-dl-dir:
> +  extends: .setup
> +  stage: prep
> +  when: manual
> +  script:
> +  - rm -rf $DL_DIR/*
> +
> +delete-repo-dir:
> +  extends: .setup
> +  stage: prep
> +  when: manual
> +  script:
> +  - rm -rf $KAS_REPO_REF_DIR/*
> +
> +# Delete all sstate
> +delete-sstate:
> +  extends: .setup
> +  stage: prep
> +  when: manual
> +  script:
> +  - rm -rf $SSTATE_DIR/*
> +
> +# Wipe out old sstate
> +prune-sstate:
> +  extends: .setup
> +  stage: prep
> +  when: manual
> +  script:
> +  - find $SSTATE_DIR -type f -atime +30 -delete
> +
> +# Report on disk usage
> +usage:
> +  extends: .setup
> +  stage: prep
> +  when: manual
> +  script:
> +  - du -h -s $DL_DIR $SSTATE_DIR $KAS_REPO_REF_DIR
> diff --git a/ci/96b-avenger96.yml b/ci/96b-avenger96.yml
> new file mode 100644
> index 000000000000..9ab58aa83ffa
> --- /dev/null
> +++ b/ci/96b-avenger96.yml
> @@ -0,0 +1,9 @@
> +header:
> +  version: 9
> +  includes:
> +    - base.yml
> +
> +machine: 96b-avenger96
> +
> +target:
> +  - zephyr-philosophers
> diff --git a/ci/96b-nitrogen.yml b/ci/96b-nitrogen.yml
> new file mode 100644
> index 000000000000..ecd96fb67136
> --- /dev/null
> +++ b/ci/96b-nitrogen.yml
> @@ -0,0 +1,6 @@
> +header:
> +  version: 9
> +  includes:
> +    - base.yml
> +
> +machine: 96b-nitrogen
> diff --git a/ci/acrn.yml b/ci/acrn.yml
> new file mode 100644
> index 000000000000..53748defebec
> --- /dev/null
> +++ b/ci/acrn.yml
> @@ -0,0 +1,6 @@
> +header:
> +  version: 9
> +  includes:
> +    - base.yml
> +
> +machine: acrn
> diff --git a/ci/base.yml b/ci/base.yml
> new file mode 100644
> index 000000000000..1e25e6655165
> --- /dev/null
> +++ b/ci/base.yml
> @@ -0,0 +1,35 @@
> +header:
> +  version: 9
> +  includes:
> +    - meta-python.yml
> +
> +distro: zephyr
> +
> +defaults:
> +  repos:
> +    refspec: hardknott
> +
> +repos:
> +  meta-zephyr:
> +
> +  poky:
> +    url: https://git.yoctoproject.org/git/poky
> +    layers:
> +      meta:
> +      meta-poky:
> +
> +env:
> +  BB_LOGCONFIG: ""
> +
> +local_conf_header:
> +  base: |
> +    CONF_VERSION = "1"
> +    INHERIT += "rm_work"
> +    ERROR_QA = "${WARN_QA}"
> +  testimage: |
> +    IMAGE_CLASSES += "testimage"
> +
> +machine: unset
> +
> +target:
> +  - zephyr-kernel-test-all
> diff --git a/ci/check-machine-coverage b/ci/check-machine-coverage
> new file mode 100755
> index 000000000000..726714d8b0fe
> --- /dev/null
> +++ b/ci/check-machine-coverage
> @@ -0,0 +1,26 @@
> +#! /usr/bin/env python3
> +
> +from pathlib import Path
> +import sys
> +
> +metazephyr = Path.cwd()
> +
> +if metazephyr.name != "meta-zephyr":
> +    print("Not running inside meta-zephyr")
> +    sys.exit(1)
> +
> +# All machine configurations
> +machines = metazephyr.glob("conf/machine/*.conf")
> +machines = set(p.stem for p in machines)
> +
> +# All kas files
> +kas = metazephyr.glob("ci/*.yml")
> +kas = set(p.stem for p in kas)
> +
> +missing = machines - kas
> +print(f"The following machines are missing: {', '.join(sorted(missing))}.")
> +
> +covered = len(machines) - len(missing)
> +total = len(machines)
> +percent = int(covered / total * 100)
> +print(f"Coverage: {percent}%")
> diff --git a/ci/check-warnings b/ci/check-warnings
> new file mode 100755
> index 000000000000..cc396423d8bf
> --- /dev/null
> +++ b/ci/check-warnings
> @@ -0,0 +1,18 @@
> +#! /bin/bash
> +
> +# Expects the path to a log file as $1, and if this file has any content
> +# then display the contents and exit with an error code.
> +
> +set -e -u
> +
> +LOGFILE=$1
> +
> +if test -s $LOGFILE; then
> +    echo ==============================
> +    echo The build had warnings/errors:
> +    echo ==============================
> +    cat $LOGFILE
> +    exit 1
> +fi
> +
> +exit 0
> diff --git a/ci/jobs-to-kas b/ci/jobs-to-kas
> new file mode 100755
> index 000000000000..70579703bc07
> --- /dev/null
> +++ b/ci/jobs-to-kas
> @@ -0,0 +1,19 @@
> +#! /bin/bash
> +
> +# Read a GitLab CI job name on $1 and transform it to a
> +# list of Kas yaml files
> +
> +set -e -u
> +
> +# Read Job namne from $1 and split on /
> +IFS=/ read -r -a PARTS<<<$1
> +
> +# Prefix each part with ci/
> +PARTS=("${PARTS[@]/#/ci/}")
> +
> +# Suffix each part with .yml
> +PARTS=("${PARTS[@]/%/.yml}")
> +
> +# Print colon-separated
> +IFS=":"
> +echo "${PARTS[*]}"
> diff --git a/ci/logging.yml b/ci/logging.yml
> new file mode 100644
> index 000000000000..3af10295f8f3
> --- /dev/null
> +++ b/ci/logging.yml
> @@ -0,0 +1,13 @@
> +# Python logging configuration to write all warnings to a separate file
> +version: 1
> +
> +handlers:
> +  warnings:
> +    class: logging.FileHandler
> +    level: WARNING
> +    filename: warnings.log
> +    formatter: BitBake.logfileFormatter
> +
> +loggers:
> +  BitBake:
> +    handlers: [warnings]
> diff --git a/ci/meta-oe.yml b/ci/meta-oe.yml
> new file mode 100644
> index 000000000000..ccd34f3a3ffa
> --- /dev/null
> +++ b/ci/meta-oe.yml
> @@ -0,0 +1,8 @@
> +header:
> +  version: 9
> +
> +repos:
> +  meta-openembedded:
> +    url: https://git.openembedded.org/meta-openembedded
> +    layers:
> +      meta-oe:
> diff --git a/ci/meta-python.yml b/ci/meta-python.yml
> new file mode 100644
> index 000000000000..3f76118ccd09
> --- /dev/null
> +++ b/ci/meta-python.yml
> @@ -0,0 +1,10 @@
> +header:
> +  version: 9
> +  includes:
> +    - meta-oe.yml
> +
> +repos:
> +  meta-openembedded:
> +    url: https://git.openembedded.org/meta-openembedded
> +    layers:
> +      meta-python:
> diff --git a/ci/qemu-cortex-m3.yml b/ci/qemu-cortex-m3.yml
> new file mode 100644
> index 000000000000..73b46039abed
> --- /dev/null
> +++ b/ci/qemu-cortex-m3.yml
> @@ -0,0 +1,6 @@
> +header:
> +  version: 9
> +  includes:
> +    - base.yml
> +
> +machine: qemu-cortex-m3
> diff --git a/ci/qemu-nios2.yml b/ci/qemu-nios2.yml
> new file mode 100644
> index 000000000000..75166054c265
> --- /dev/null
> +++ b/ci/qemu-nios2.yml
> @@ -0,0 +1,6 @@
> +header:
> +  version: 9
> +  includes:
> +    - base.yml
> +
> +machine: qemu-nios2
> diff --git a/ci/qemu-x86.yml b/ci/qemu-x86.yml
> new file mode 100644
> index 000000000000..c5d23f471bf8
> --- /dev/null
> +++ b/ci/qemu-x86.yml
> @@ -0,0 +1,6 @@
> +header:
> +  version: 9
> +  includes:
> +    - base.yml
> +
> +machine: qemu-x86
> diff --git a/ci/testimage.yml b/ci/testimage.yml
> new file mode 100644
> index 000000000000..e97e8970ec5e
> --- /dev/null
> +++ b/ci/testimage.yml
> @@ -0,0 +1,5 @@
> +header:
> +  version: 9
> +
> +target:
> +  - zephyr-kernel-test-all
> diff --git a/ci/update-repos b/ci/update-repos
> new file mode 100755
> index 000000000000..fa638aad2efb
> --- /dev/null
> +++ b/ci/update-repos
> @@ -0,0 +1,40 @@
> +#! /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";,
> +)
> +
> +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():
> +            print("Updating %s..." % repo)
> +            subprocess.run(["git", "-C", repodir, "fetch"], check=True)
> +        else:
> +            print("Cloning %s..." % repo)
> +            subprocess.run(["git", "clone", "--bare", repo, repodir], 
> check=True)
> diff --git a/recipes-kernel/zephyr-kernel/zephyr-kernel-test.inc 
> b/recipes-kernel/zephyr-kernel/zephyr-kernel-test.inc
> index b6b4766692a7..f5b1f0f035a8 100644
> --- a/recipes-kernel/zephyr-kernel/zephyr-kernel-test.inc
> +++ b/recipes-kernel/zephyr-kernel/zephyr-kernel-test.inc
> @@ -5,6 +5,9 @@ ZEPHYRTESTS_remove = "fifo fpu_sharing lifo mbox mem_heap 
> mem_pool \
>  # Exclude tests which does not build for various reasons
>  ZEPHYRTESTS_remove = "gen_isr_table spinlock smp mp"
>
> +# Exclude tests that are no longer passing
> +ZEPHYRTESTS_remove += "common pending sleep context"
> +
>  # test_context will fail because QEMU for ARM does not emulate CortexM3 
> BASEPRI register
>  #ZEPHYRTESTS_remove_arm += ""
>
> --
> 2.20.1
>
>
> 
>
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#53376): https://lists.yoctoproject.org/g/yocto/message/53376
Mute This Topic: https://lists.yoctoproject.org/mt/82589644/21656
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/yocto/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to