#!/usr/bin/env bash
set -e
set -o pipefail

main() {
    local template="${1}"

    preamble "${template}"

    gen_defconfigs

    ./support/testing/run-tests -l 2>&1 \
    | sed -r -e '/^test_run \((.*)\).*/!d; s//\1: { extends: .runtime_test }/' \
    | LC_ALL=C sort
}

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_defconfigs() {
    local -a defconfigs
    local build_defconfigs cfg

    defconfigs=( $(cd configs; LC_ALL=C ls -1 *_defconfig) )

    build_defconfigs=false
    if [ -n "${CI_COMMIT_TAG}" ]; then
        # For tags, create a pipeline.
        build_defconfigs=true
    fi
    if [ -n "${CI_PIPELINE_TRIGGERED}" ]; then
        # For pipeline created by using a trigger token.
        build_defconfigs=true
    fi
    case "${CI_COMMIT_REF_NAME}" in
        # For the branch or tag name named *-defconfigs, create a pipeline.
        (*-defconfigs) build_defconfigs=true;;
    esac

    for cfg in "${defconfigs[@]}"; do
        printf '%s_check: { extends: .defconfig_check }\n' "${cfg}"
        if ${build_defconfigs}; then
            printf '%s: { extends: .defconfig }\n' "${cfg}"
        fi
    done
}

main "${@}"
