generate-gitlab-ci-yml 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #!/usr/bin/env bash
  2. set -e
  3. set -o pipefail
  4. main() {
  5. local template="${1}"
  6. preamble "${template}"
  7. gen_tests
  8. }
  9. preamble() {
  10. local template="${1}"
  11. cat - "${template}" <<-_EOF_
  12. # This file is generated; do not edit!
  13. # Builds appear on https://gitlab.com/buildroot.org/buildroot/pipelines
  14. image: ${CI_JOB_IMAGE}
  15. _EOF_
  16. }
  17. gen_tests() {
  18. local -a basics defconfigs runtimes
  19. local do_basics do_defconfigs do_runtime
  20. local defconfigs_ext cfg tst
  21. basics=( DEVELOPERS flake8 package )
  22. defconfigs=( $(cd configs; LC_ALL=C ls -1 *_defconfig) )
  23. runtimes=( $(./support/testing/run-tests -l 2>&1 \
  24. | sed -r -e '/^test_run \((.*)\).*/!d; s//\1/' \
  25. | LC_ALL=C sort)
  26. )
  27. if [ -n "${CI_COMMIT_TAG}" ]; then
  28. do_basics=true
  29. do_defconfigs=base
  30. do_runtime=true
  31. elif [ "${CI_PIPELINE_SOURCE}" = "trigger" ]; then
  32. case "${BR_SCHEDULE_JOBS}" in
  33. (basic)
  34. do_basics=true
  35. do_defconfigs=check
  36. defconfigs_ext=_check
  37. ;;
  38. (defconfig)
  39. do_defconfigs=base
  40. ;;
  41. (runtime)
  42. do_runtime=true
  43. ;;
  44. esac
  45. else
  46. case "${CI_COMMIT_REF_NAME}" in
  47. (*-basics)
  48. do_basics=true
  49. do_defconfigs=check
  50. defconfigs_ext=_check
  51. ;;
  52. (*-defconfigs)
  53. do_defconfigs=base
  54. ;;
  55. (*-*_defconfig)
  56. defconfigs=( "${CI_COMMIT_REF_NAME##*-}" )
  57. do_defconfigs=base
  58. ;;
  59. (*-runtime-tests)
  60. do_runtime=true
  61. ;;
  62. (*-tests.*)
  63. runtimes=( "${CI_COMMIT_REF_NAME##*-}" )
  64. do_runtime=true
  65. ;;
  66. esac
  67. fi
  68. # If nothing else, at least do the basics to generate a valid pipeline
  69. if [ -z "${do_defconfigs}" \
  70. -a -z "${do_runtime}" \
  71. ]
  72. then
  73. do_basics=true
  74. fi
  75. if ${do_basics:-false}; then
  76. for tst in "${basics[@]}"; do
  77. printf 'check-%s: { extends: .check-%s_base }\n' "${tst}" "${tst}"
  78. done
  79. fi
  80. if [ -n "${do_defconfigs}" ]; then
  81. for cfg in "${defconfigs[@]}"; do
  82. printf '%s%s: { extends: .defconfig_%s }\n' \
  83. "${cfg}" "${defconfigs_ext}" "${do_defconfigs}"
  84. done
  85. fi
  86. if ${do_runtime:-false}; then
  87. printf '%s: { extends: .runtime_test_base }\n' "${runtimes[@]}"
  88. fi
  89. }
  90. main "${@}"