1image: ghcr.io/siemens/kas/kas:3.3 2 3variables: 4 CPU_REQUEST: "" 5 DEFAULT_TAG: "" 6 CACHE_DIR: $CI_BUILDS_DIR/persist 7 # These are needed as the k8s executor doesn't respect the container entrypoint 8 # by default 9 FF_KUBERNETES_HONOR_ENTRYPOINT: 1 10 FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY: 0 11 12stages: 13 - prep 14 - build 15 16# Common job fragment to get a worker ready 17.setup: 18 tags: 19 - $DEFAULT_TAG 20 stage: build 21 interruptible: true 22 variables: 23 KAS_WORK_DIR: $CI_PROJECT_DIR/work 24 KAS_REPO_REF_DIR: $CACHE_DIR/repos 25 SSTATE_DIR: $CACHE_DIR/sstate 26 DL_DIR: $CACHE_DIR/downloads 27 BB_LOGCONFIG: $CI_PROJECT_DIR/ci/logging.yml 28 TOOLCHAIN_DIR: $CACHE_DIR/toolchains 29 IMAGE_DIR: $CI_PROJECT_DIR/work/build/tmp/deploy/images 30 TOOLCHAIN_LINK_DIR: $CI_PROJECT_DIR/work/build/toolchains 31 before_script: 32 - echo KAS_WORK_DIR = $KAS_WORK_DIR 33 - echo SSTATE_DIR = $SSTATE_DIR 34 - echo DL_DIR = $DL_DIR 35 - rm -rf $KAS_WORK_DIR 36 - mkdir --verbose --parents $KAS_WORK_DIR $KAS_REPO_REF_DIR $SSTATE_DIR $DL_DIR $TOOLCHAIN_DIR $TOOLCHAIN_LINK_DIR 37 # Must do this here, as it's the only way to make sure the toolchain is installed on the same builder 38 - ./ci/get-binary-toolchains $DL_DIR $TOOLCHAIN_DIR $TOOLCHAIN_LINK_DIR 39 40# Generalised fragment to do a Kas build 41.build: 42 extends: .setup 43 variables: 44 KUBERNETES_CPU_REQUEST: $CPU_REQUEST 45 rules: 46 # Don't run MR pipelines 47 - if: $CI_PIPELINE_SOURCE == "merge_request_event" 48 when: never 49 # Don't run pipelines for tags 50 - if: $CI_COMMIT_TAG 51 when: never 52 # Don't run if BUILD_ENABLE_REGEX is set, but the job doesn't match the regex 53 - if: '$BUILD_ENABLE_REGEX != null && $CI_JOB_NAME !~ $BUILD_ENABLE_REGEX' 54 when: never 55 # Allow the dev kernels to fail and not fail the overall build 56 - if: '$KERNEL == "linux-yocto-dev"' 57 allow_failure: true 58 # Catch all for everything else 59 - if: '$KERNEL != "linux-yocto-dev"' 60 script: 61 - KASFILES=$(./ci/jobs-to-kas "$CI_JOB_NAME"):lockfile.yml 62 - kas dump --update --force-checkout --resolve-refs --resolve-env $KASFILES 63 - kas build $KASFILES 64 - ./ci/check-warnings $KAS_WORK_DIR/build/warnings.log 65 artifacts: 66 name: "logs" 67 when: always 68 paths: 69 - $CI_PROJECT_DIR/work/build/tmp/work*/**/temp/log.do_*.* 70 - $CI_PROJECT_DIR/work/build/tmp/work*/**/testimage/* 71 72# 73# Prep stage, update repositories once. 74# Set the CI variable CI_CLEAN_REPOS=1 to refetch the respositories from scratch 75# 76update-repos: 77 extends: .setup 78 stage: prep 79 script: 80 - | 81 flock --verbose --timeout 60 $KAS_REPO_REF_DIR ./ci/update-repos 82 # Only generate if doesn't already exist, to allow feature branches to drop one in. 83 if test -f lockfile.yml; then 84 echo Using existing lockfile.yml 85 else 86 # Be sure that this is the complete list of layers being fetched 87 kas dump --lock --update ci/qemuarm64.yml:ci/meta-openembedded.yml:ci/clang.yml:ci/meta-virtualization.yml | tee lockfile.yml 88 fi 89 artifacts: 90 name: "lockfile" 91 paths: 92 - lockfile.yml 93 94# 95# Build stage, the actual build jobs 96# 97# Available options for building are 98# DISTRO: [poky, poky-tiny] 99# KERNEL: [linux-yocto, linux-yocto-dev, linux-yocto-rt] 100# TOOLCHAINS: [gcc, clang, external-gccarm] 101# TCLIBC: [glibc, musl] 102# FIRMWARE: [u-boot, edk2] 103# TS: [none, trusted-services] 104# VIRT: [none, xen] 105# TESTING: testimage 106 107corstone1000-fvp: 108 extends: .build 109 parallel: 110 matrix: 111 - TESTING: [testimage, tftf] 112 tags: 113 - x86_64 114 115corstone1000-mps3: 116 extends: .build 117 118fvp-base: 119 extends: .build 120 parallel: 121 matrix: 122 - TESTING: testimage 123 - FIRMWARE: edk2 124 125fvp-baser-aemv8r64: 126 extends: .build 127 parallel: 128 matrix: 129 - TESTING: testimage 130 tags: 131 - x86_64 132 133fvps: 134 extends: .build 135 136generic-arm64: 137 extends: .build 138 139juno: 140 extends: .build 141 parallel: 142 matrix: 143 - TOOLCHAINS: [gcc, clang] 144 FIRMWARE: [u-boot, edk2] 145 146musca-b1: 147 extends: .build 148 149musca-s1: 150 extends: .build 151 152n1sdp: 153 extends: .build 154 parallel: 155 matrix: 156 - TS: [none, n1sdp-ts] 157 - OPTEE: [none, n1sdp-optee] 158 159qemu-generic-arm64: 160 extends: .build 161 parallel: 162 matrix: 163 - KERNEL: [linux-yocto, linux-yocto-dev, linux-yocto-rt] 164 TOOLCHAINS: [gcc, clang] 165 TESTING: testimage 166 167qemuarm64-secureboot: 168 extends: .build 169 parallel: 170 matrix: 171 - KERNEL: [linux-yocto, linux-yocto-dev, linux-yocto-rt] 172 TOOLCHAINS: [gcc, clang] 173 TCLIBC: [glibc, musl] 174 TS: [none, qemuarm64-secureboot-ts] 175 TESTING: testimage 176 177qemuarm64: 178 extends: .build 179 parallel: 180 matrix: 181 - DISTRO: poky 182 KERNEL: [linux-yocto, linux-yocto-dev, linux-yocto-rt] 183 TOOLCHAINS: [gcc, clang] 184 FIRMWARE: [u-boot, edk2] 185 TESTING: testimage 186 - DISTRO: poky-tiny 187 TESTING: testimage 188 - VIRT: xen 189 190qemuarm-secureboot: 191 extends: .build 192 parallel: 193 matrix: 194 - KERNEL: [linux-yocto, linux-yocto-dev, linux-yocto-rt] 195 TOOLCHAINS: [gcc, clang] 196 TCLIBC: [glibc, musl] 197 TESTING: testimage 198 - TOOLCHAINS: external-gccarm 199 TESTING: testimage 200 201qemuarm: 202 extends: .build 203 parallel: 204 matrix: 205 - DISTRO: poky 206 KERNEL: [linux-yocto, linux-yocto-dev, linux-yocto-rt] 207 TOOLCHAINS: [gcc, clang] 208 FIRMWARE: [u-boot, edk2] 209 TESTING: testimage 210 - DISTRO: poky-tiny 211 TESTING: testimage 212 - VIRT: xen 213 214qemuarmv5: 215 extends: .build 216 parallel: 217 matrix: 218 - DISTRO: poky 219 KERNEL: [linux-yocto, linux-yocto-dev, linux-yocto-rt] 220 TESTING: testimage 221 - DISTRO: poky-tiny 222 TESTING: testimage 223 224sgi575: 225 extends: .build 226 227tc1: 228 extends: .build 229 parallel: 230 matrix: 231 - TESTING: testimage 232 tags: 233 - x86_64 234 235toolchains: 236 extends: .build 237 238selftest: 239 extends: .setup 240 script: 241 - KASFILES=./ci/qemuarm64.yml:./ci/selftest.yml:lockfile.yml 242 - kas shell --update --force-checkout $KASFILES -c 'oe-selftest --num-processes 1 --run-tests runfvp' 243 244# Validate layers are Yocto Project Compatible 245check-layers: 246 extends: .setup 247 script: 248 - kas shell --update --force-checkout ci/base.yml:ci/meta-openembedded.yml:lockfile.yml --command \ 249 "yocto-check-layer-wrapper $CI_PROJECT_DIR/$LAYER --dependency $CI_PROJECT_DIR/meta-* $KAS_WORK_DIR/meta-openembedded/meta-oe --no-auto-dependency" 250 parallel: 251 matrix: 252 - LAYER: [meta-arm, meta-arm-bsp, meta-arm-toolchain] 253 254pending-updates: 255 extends: .setup 256 artifacts: 257 paths: 258 - update-report 259 script: 260 - rm -fr update-report 261 # This configuration has all of the layers we need enabled 262 - kas shell --update --force-checkout ci/qemuarm64.yml:ci/meta-openembedded.yml:lockfile.yml --command \ 263 "$CI_PROJECT_DIR/scripts/machine-summary.py -t report -o $CI_PROJECT_DIR/update-report $($CI_PROJECT_DIR/ci/listmachines.py meta-arm meta-arm-bsp)" 264 # Do this on x86 whilst the compilers are x86-only 265 tags: 266 - x86_64 267 268# What percentage of machines in the layer do we build 269machine-coverage: 270 extends: .setup 271 script: 272 - ./ci/check-machine-coverage 273 coverage: '/Coverage: \d+/' 274 275metrics: 276 extends: .setup 277 artifacts: 278 reports: 279 metrics: metrics.txt 280 script: 281 - kas shell --update --force-checkout ci/base.yml --command \ 282 "$CI_PROJECT_DIR/ci/patchreview $CI_PROJECT_DIR/meta-* --verbose --metrics $CI_PROJECT_DIR/metrics.txt" 283 284documentation: 285 extends: .setup 286 script: 287 - | 288 sudo pip3 install -r meta-arm-bsp/documentation/requirements.txt 289 for CONF in meta-*/documentation/*/conf.py ; do 290 echo Building $CONF... 291 SOURCE_DIR=$(dirname $CONF) 292 MACHINE=$(basename $SOURCE_DIR) 293 sphinx-build -vW $SOURCE_DIR build-docs/$MACHINE 294 done 295 test -d build-docs/ 296 artifacts: 297 paths: 298 - build-docs/ 299