kumquat-buildroot/support/scripts/generate-gitlab-ci-yml
Yann E. MORIN 245a64c387 support/scripts: prioritize conditions for pipeline creation
When multiple conditions match simultaneously, even though that should
not happen in practice, we want the more "important" one to win over
the less "important" ones. For example, a tag is more important than a
branch name or a trigger.

Currently, the latest condition to match takes precendence over any
previous one, while we want the exact opposite.

Fix that with proper fallbacks in else-blocks.

Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2020-09-22 21:29:39 +02:00

116 lines
2.8 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
elif [ -n "${CI_PIPELINE_TRIGGERED}" ]; then
# For pipeline created by using a trigger token.
template=base
else
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
fi
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
elif [ -n "${CI_PIPELINE_TRIGGERED}" ]; then
# For pipeline created by using a trigger token.
run_tests=true
else
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
fi
if ${run_tests}; then
printf '%s: { extends: .runtime_test_base }\n' "${tests[@]}"
fi
}
main "${@}"