1*4882a593Smuzhiyun#!/usr/bin/env bash 2*4882a593Smuzhiyunset -e 3*4882a593Smuzhiyunset -o pipefail 4*4882a593Smuzhiyun 5*4882a593Smuzhiyunmain() { 6*4882a593Smuzhiyun local template="${1}" 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun preamble "${template}" 9*4882a593Smuzhiyun gen_tests 10*4882a593Smuzhiyun} 11*4882a593Smuzhiyun 12*4882a593Smuzhiyunpreamble() { 13*4882a593Smuzhiyun local template="${1}" 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun cat - "${template}" <<-_EOF_ 16*4882a593Smuzhiyun # This file is generated; do not edit! 17*4882a593Smuzhiyun # Builds appear on https://gitlab.com/buildroot.org/buildroot/pipelines 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun image: ${CI_JOB_IMAGE} 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun_EOF_ 22*4882a593Smuzhiyun} 23*4882a593Smuzhiyun 24*4882a593Smuzhiyungen_tests() { 25*4882a593Smuzhiyun local -a basics defconfigs runtimes 26*4882a593Smuzhiyun local do_basics do_defconfigs do_runtime do_testpkg 27*4882a593Smuzhiyun local defconfigs_ext cfg tst 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun basics=( DEVELOPERS flake8 package ) 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun defconfigs=( $(cd configs; LC_ALL=C ls -1 *_defconfig) ) 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun runtimes=( $(./support/testing/run-tests -l 2>&1 \ 34*4882a593Smuzhiyun | sed -r -e '/^test_run \((.*)\).*/!d; s//\1/' \ 35*4882a593Smuzhiyun | LC_ALL=C sort) 36*4882a593Smuzhiyun ) 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun if [ -n "${CI_COMMIT_TAG}" ]; then 39*4882a593Smuzhiyun # When a tag is added to the Buildroot git tree, we want 40*4882a593Smuzhiyun # to run the runtime tests and only test Qemu defconfigs. 41*4882a593Smuzhiyun defconfigs=( $(cd configs; LC_ALL=C ls -1 qemu_*_defconfig) ) 42*4882a593Smuzhiyun do_basics=true 43*4882a593Smuzhiyun do_defconfigs=base 44*4882a593Smuzhiyun do_runtime=true 45*4882a593Smuzhiyun elif [ "${CI_PIPELINE_SOURCE}" = "trigger" ]; then 46*4882a593Smuzhiyun case "${BR_SCHEDULE_JOBS}" in 47*4882a593Smuzhiyun (basic) 48*4882a593Smuzhiyun do_basics=true 49*4882a593Smuzhiyun do_defconfigs=check 50*4882a593Smuzhiyun defconfigs_ext=_check 51*4882a593Smuzhiyun ;; 52*4882a593Smuzhiyun (defconfig) 53*4882a593Smuzhiyun do_defconfigs=base 54*4882a593Smuzhiyun ;; 55*4882a593Smuzhiyun (runtime) 56*4882a593Smuzhiyun do_runtime=true 57*4882a593Smuzhiyun ;; 58*4882a593Smuzhiyun esac 59*4882a593Smuzhiyun else 60*4882a593Smuzhiyun case "${CI_COMMIT_REF_NAME}" in 61*4882a593Smuzhiyun (*-basics) 62*4882a593Smuzhiyun do_basics=true 63*4882a593Smuzhiyun do_defconfigs=check 64*4882a593Smuzhiyun defconfigs_ext=_check 65*4882a593Smuzhiyun ;; 66*4882a593Smuzhiyun (*-defconfigs) 67*4882a593Smuzhiyun do_defconfigs=base 68*4882a593Smuzhiyun ;; 69*4882a593Smuzhiyun (*-*_defconfig) 70*4882a593Smuzhiyun defconfigs=( "${CI_COMMIT_REF_NAME##*-}" ) 71*4882a593Smuzhiyun do_defconfigs=base 72*4882a593Smuzhiyun ;; 73*4882a593Smuzhiyun (*-runtime-tests) 74*4882a593Smuzhiyun do_runtime=true 75*4882a593Smuzhiyun ;; 76*4882a593Smuzhiyun (*-tests.*) 77*4882a593Smuzhiyun runtimes=( $(./support/testing/run-tests -l 2>&1 \ 78*4882a593Smuzhiyun | sed -r -e '/^test_run \((.*)\).*/!d; s//\1/' \ 79*4882a593Smuzhiyun | LC_ALL=C sort \ 80*4882a593Smuzhiyun | grep "^${CI_COMMIT_REF_NAME##*-}") 81*4882a593Smuzhiyun ) 82*4882a593Smuzhiyun do_runtime=true 83*4882a593Smuzhiyun ;; 84*4882a593Smuzhiyun esac 85*4882a593Smuzhiyun fi 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun # Retrieve defconfig for test-pkg from the git commit message (if any) 88*4882a593Smuzhiyun if grep -q -E '^test-pkg config:$' <<<"${CI_COMMIT_DESCRIPTION}"; then 89*4882a593Smuzhiyun sed -r -n -e '/^test-pkg config:$/{:a;n;p;ba;}' \ 90*4882a593Smuzhiyun <<<"${CI_COMMIT_DESCRIPTION}" \ 91*4882a593Smuzhiyun >defconfig.frag 92*4882a593Smuzhiyun if [ ! -s defconfig.frag ]; then 93*4882a593Smuzhiyun printf "Empty configuration fragment.\n" >&2; exit 1 94*4882a593Smuzhiyun fi 95*4882a593Smuzhiyun # Use --all since we expect the user having already pre-tested the 96*4882a593Smuzhiyun # new package with the default subset of toolchains. 97*4882a593Smuzhiyun ./utils/test-pkg \ 98*4882a593Smuzhiyun --all --prepare-only \ 99*4882a593Smuzhiyun --config-snippet defconfig.frag \ 100*4882a593Smuzhiyun --build-dir br-test-pkg >&2 101*4882a593Smuzhiyun do_testpkg=( $(ls -1 br-test-pkg/*/.config 2>/dev/null |xargs -r dirname ) ) 102*4882a593Smuzhiyun if [ "${#do_testpkg[@]}" -eq 0 ]; then 103*4882a593Smuzhiyun printf "Configuration fragment enables no test.\n" >&2; exit 1 104*4882a593Smuzhiyun fi 105*4882a593Smuzhiyun fi 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun # If nothing else, at least do the basics to generate a valid pipeline 108*4882a593Smuzhiyun if [ -z "${do_defconfigs}" \ 109*4882a593Smuzhiyun -a -z "${do_runtime}" \ 110*4882a593Smuzhiyun -a -z "${do_testpkg}" \ 111*4882a593Smuzhiyun ] 112*4882a593Smuzhiyun then 113*4882a593Smuzhiyun do_basics=true 114*4882a593Smuzhiyun fi 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun if ${do_basics:-false}; then 117*4882a593Smuzhiyun for tst in "${basics[@]}"; do 118*4882a593Smuzhiyun printf 'check-%s: { extends: .check-%s_base }\n' "${tst}" "${tst}" 119*4882a593Smuzhiyun done 120*4882a593Smuzhiyun fi 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun if [ -n "${do_defconfigs}" ]; then 123*4882a593Smuzhiyun for cfg in "${defconfigs[@]}"; do 124*4882a593Smuzhiyun printf '%s%s: { extends: .defconfig_%s }\n' \ 125*4882a593Smuzhiyun "${cfg}" "${defconfigs_ext}" "${do_defconfigs}" 126*4882a593Smuzhiyun done 127*4882a593Smuzhiyun fi 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun if ${do_runtime:-false}; then 130*4882a593Smuzhiyun printf '%s: { extends: .runtime_test_base }\n' "${runtimes[@]}" 131*4882a593Smuzhiyun fi 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun if [ -n "${do_testpkg}" ]; then 134*4882a593Smuzhiyun printf '%s: { extends: .test_pkg }\n' "${do_testpkg[@]}" 135*4882a593Smuzhiyun fi 136*4882a593Smuzhiyun} 137*4882a593Smuzhiyun 138*4882a593Smuzhiyunmain "${@}" 139