kumquat-buildroot/support/scripts/generate-gitlab-ci-yml
Yann E. MORIN 8fb49636d6 gitlab-ci: only check defconfigs for known branches
Currently, the check of defconfigs is run for all branches, even those
that are pushed only to run runtime tests. This is very inconvenient.

In fact, we only want to check the defconfigs on standard branches, that
is master, next, and the maintenance branches.

This will also decrease drastically the number gitlab-ci minutes used
when one pushes their repo to gitlab.com, where the number of CI minutes
are now going to be pretty severely restricted.

Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Cc: Romain Naour <romain.naour@gmail.com>
Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Cc: Arnout Vandecappelle <arnout@mind.be>
Reviewed-by: Romain Naour <romain.naour@gmail.com>
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
2020-09-09 09:26:00 +02:00

116 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -e
set -o pipefail
main() {
local template="${1}"
preamble "${template}"
gen_basics
gen_defconfigs
gen_tests
}
preamble() {
local template="${1}"
cat - "${template}" <<-_EOF_
# This file is generated; do not edit!
# Builds appear on https://gitlab.com/buildroot.org/buildroot/pipelines
image: ${CI_JOB_IMAGE}
_EOF_
}
gen_basics() {
local tst
# Skip basic tests when explicitly building defconfigs or runtime tests
case "${CI_COMMIT_REF_NAME}" in
(*-defconfigs) return;;
(*-*_defconfig) return;;
(*-runtime-tests) return;;
(*-tests.*) return;;
esac
for tst in DEVELOPERS flake8 package; do
printf 'check-%s: { extends: .check-%s_base }\n' "${tst}" "${tst}"
done
}
gen_defconfigs() {
local -a defconfigs
local template cfg ext
defconfigs=( $(cd configs; LC_ALL=C ls -1 *_defconfig) )
if [ -n "${CI_COMMIT_TAG}" ]; then
# For tags, create a pipeline.
template=base
fi
if [ -n "${CI_PIPELINE_TRIGGERED}" ]; then
# For pipeline created by using a trigger token.
template=base
fi
case "${CI_COMMIT_REF_NAME}" in
# For master, next, and maintenance branches, only check the defconfigs
(master|next|????.??.x)
template=check
ext=_check
;;
# For the branch or tag name named *-defconfigs, create a pipeline.
(*-defconfigs)
template=base
;;
(*-*_defconfig)
defconfigs=( "${CI_COMMIT_REF_NAME##*-}" )
template=base
;;
esac
if [ -n "${template}" ]; then
for cfg in "${defconfigs[@]}"; do
printf '%s%s: { extends: .defconfig_%s }\n' \
"${cfg}" "${ext}" "${template}"
done
fi
}
gen_tests() {
local -a tests
local run_tests tst
tests=( $(./support/testing/run-tests -l 2>&1 \
| sed -r -e '/^test_run \((.*)\).*/!d; s//\1/'\
| LC_ALL=C sort)
)
run_tests=false
if [ -n "${CI_COMMIT_TAG}" ]; then
# For tags, create a pipeline.
run_tests=true
fi
if [ -n "${CI_PIPELINE_TRIGGERED}" ]; then
# For pipeline created by using a trigger token.
run_tests=true
fi
case "${CI_COMMIT_REF_NAME}" in
# For the branch or tag name named *-runtime-tests, create a pipeline.
(*-runtime-tests)
run_tests=true
;;
(*-tests.*)
tests=( "${CI_COMMIT_REF_NAME##*-}" )
run_tests=true
;;
esac
if ${run_tests}; then
printf '%s: { extends: .runtime_test_base }\n' "${tests[@]}"
fi
}
main "${@}"