#!/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 "${@}"