.gitlab-ci.yml 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. image: ghcr.io/siemens/kas/kas:3.2
  2. variables:
  3. CPU_REQUEST: ""
  4. DEFAULT_TAG: ""
  5. # These are needed as the k8s executor doesn't respect the container entrypoint
  6. # by default
  7. FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY: 0
  8. FF_KUBERNETES_HONOR_ENTRYPOINT: 1
  9. stages:
  10. - prep
  11. - build
  12. # Common job fragment to get a worker ready
  13. .setup:
  14. tags:
  15. - $DEFAULT_TAG
  16. stage: build
  17. interruptible: true
  18. variables:
  19. KAS_WORK_DIR: $CI_PROJECT_DIR/work
  20. KAS_REPO_REF_DIR: $CI_BUILDS_DIR/persist/repos
  21. SSTATE_DIR: $CI_BUILDS_DIR/persist/sstate
  22. DL_DIR: $CI_BUILDS_DIR/persist/downloads
  23. BB_LOGCONFIG: $CI_PROJECT_DIR/ci/logging.yml
  24. TOOLCHAIN_DIR: $CI_BUILDS_DIR/persist/toolchains
  25. IMAGE_DIR: $CI_PROJECT_DIR/work/build/tmp/deploy/images
  26. TOOLCHAIN_LINK_DIR: $CI_PROJECT_DIR/work/build/toolchains
  27. before_script:
  28. - echo KAS_WORK_DIR = $KAS_WORK_DIR
  29. - echo SSTATE_DIR = $SSTATE_DIR
  30. - echo DL_DIR = $DL_DIR
  31. - rm -rf $KAS_WORK_DIR
  32. - mkdir --verbose --parents $KAS_WORK_DIR $KAS_REPO_REF_DIR $SSTATE_DIR $DL_DIR $TOOLCHAIN_DIR $TOOLCHAIN_LINK_DIR
  33. # Must do this here, as it's the only way to make sure the toolchain is installed on the same builder
  34. - ./ci/get-binary-toolchains $DL_DIR $TOOLCHAIN_DIR $TOOLCHAIN_LINK_DIR
  35. # This can be removed with Kas 3.2
  36. - sudo apt-get update && sudo apt-get install --yes python3-subunit
  37. # Generalised fragment to do a Kas build
  38. .build:
  39. extends: .setup
  40. variables:
  41. KUBERNETES_CPU_REQUEST: $CPU_REQUEST
  42. script:
  43. - KASFILES=$(./ci/jobs-to-kas "$CI_JOB_NAME")
  44. - kas shell --update --force-checkout $KASFILES -c 'cat conf/*.conf'
  45. - kas build $KASFILES
  46. - ./ci/check-warnings $KAS_WORK_DIR/build/warnings.log
  47. artifacts:
  48. name: "logs"
  49. when: on_failure
  50. paths:
  51. - $CI_PROJECT_DIR/work/build/tmp/work*/**/temp/log.do_*.*
  52. # Workaround for Zephyr not currectly handling TESTIMAGE_AUTO
  53. .build_and_test:
  54. extends: .setup
  55. script:
  56. - KASFILES=$(./ci/jobs-to-kas "$CI_JOB_NAME")
  57. - kas shell --update --force-checkout $KASFILES -c 'cat conf/*.conf'
  58. - kas build $KASFILES
  59. - kas build $KASFILES -c testimage
  60. - ./ci/check-warnings $KAS_WORK_DIR/build/warnings.log
  61. #
  62. # Prep stage, update repositories once
  63. #
  64. update-repos:
  65. extends: .setup
  66. stage: prep
  67. script:
  68. - flock --verbose --timeout 60 $KAS_REPO_REF_DIR ./ci/update-repos
  69. #
  70. # Build stage, the actual build jobs
  71. #
  72. # Available options for building are
  73. # TOOLCHAINS: [gcc, clang, armgcc, external-gccarm]
  74. # TCLIBC: [glibc, musl]
  75. # VIRT: [none, xen]
  76. # TESTING: testimage
  77. corstone500:
  78. extends: .build
  79. parallel:
  80. matrix:
  81. - TESTING: testimage
  82. tags:
  83. - x86_64
  84. corstone1000-fvp:
  85. extends: .build
  86. parallel:
  87. matrix:
  88. - TESTING: [testimage,tftf]
  89. tags:
  90. - x86_64
  91. corstone1000-mps3:
  92. extends: .build
  93. fvp-base:
  94. extends: .build
  95. parallel:
  96. matrix:
  97. - TESTING: testimage
  98. tags:
  99. - x86_64
  100. fvp-base-arm32:
  101. extends: .build
  102. parallel:
  103. matrix:
  104. - TOOLCHAINS: [gcc, external-gccarm]
  105. TESTING: testimage
  106. tags:
  107. - x86_64
  108. fvp-baser-aemv8r64:
  109. extends: .build
  110. parallel:
  111. matrix:
  112. - TESTING: testimage
  113. tags:
  114. - x86_64
  115. fvps:
  116. extends: .build
  117. gem5-arm64:
  118. extends: .build
  119. parallel:
  120. matrix:
  121. - VIRT: [none, xen]
  122. gem5-atp-arm64:
  123. extends: .build
  124. generic-arm64:
  125. extends: .build
  126. juno:
  127. extends: .build
  128. parallel:
  129. matrix:
  130. - TOOLCHAINS: [gcc, clang]
  131. FIRMWARE: [none, edk2]
  132. microbit-v1:
  133. extends: .build_and_test
  134. parallel:
  135. matrix:
  136. - TESTING: testimage-zephyr
  137. musca-b1:
  138. extends: .build
  139. musca-s1:
  140. extends: .build
  141. n1sdp:
  142. extends: .build
  143. parallel:
  144. matrix:
  145. - TOOLCHAINS: [gcc, armgcc]
  146. qemu-cortex-a53:
  147. extends: .build
  148. qemu-cortex-m3:
  149. extends: .build_and_test
  150. parallel:
  151. matrix:
  152. - TESTING: testimage-zephyr
  153. qemu-cortex-r5:
  154. extends: .build
  155. qemu-generic-arm64:
  156. extends: .build
  157. parallel:
  158. matrix:
  159. - TOOLCHAINS: [gcc, clang]
  160. TESTING: testimage
  161. qemuarm64-secureboot:
  162. extends: .build
  163. parallel:
  164. matrix:
  165. - TOOLCHAINS: [gcc, clang]
  166. TCLIBC: [glibc, musl]
  167. TESTING: testimage
  168. qemuarm64:
  169. extends: .build
  170. parallel:
  171. matrix:
  172. - VIRT: xen
  173. qemuarm:
  174. extends: .build
  175. parallel:
  176. matrix:
  177. - TOOLCHAINS: [gcc, clang]
  178. TESTING: testimage
  179. - VIRT: xen
  180. qemuarmv5:
  181. extends: .build
  182. parallel:
  183. matrix:
  184. - TESTING: testimage
  185. sgi575:
  186. extends: .build
  187. tc0:
  188. extends: .build
  189. tags:
  190. - x86_64
  191. tc1:
  192. extends: .build
  193. tags:
  194. - x86_64
  195. toolchains:
  196. extends: .build
  197. selftest:
  198. extends: .setup
  199. script:
  200. - KASFILES=./ci/qemuarm64.yml:./ci/selftest.yml
  201. - kas shell --update --force-checkout $KASFILES -c 'oe-selftest --num-processes 1 --run-tests runfvp'
  202. # Validate layers are Yocto Project Compatible
  203. check-layers:
  204. extends: .setup
  205. script:
  206. - kas shell --update --force-checkout ci/base.yml:ci/meta-openembedded.yml --command \
  207. "yocto-check-layer-wrapper $CI_PROJECT_DIR/$LAYER --dependency $CI_PROJECT_DIR/meta-* $KAS_WORK_DIR/meta-openembedded/meta-oe --no-auto-dependency"
  208. parallel:
  209. matrix:
  210. - LAYER: [meta-arm, meta-arm-bsp, meta-arm-toolchain, meta-gem5]
  211. pending-updates:
  212. extends: .setup
  213. artifacts:
  214. paths:
  215. - update-report
  216. script:
  217. - rm -fr update-report
  218. # This configuration has all of the layers we need enabled
  219. - kas shell ci/gem5-arm64.yml --command \
  220. "$CI_PROJECT_DIR/scripts/machine-summary.py -t report -o $CI_PROJECT_DIR/update-report $($CI_PROJECT_DIR/ci/listmachines.py meta-arm meta-arm-bsp meta-gem5)"
  221. # Do this on x86 whilst the compilers are x86-only
  222. tags:
  223. - x86_64
  224. # What percentage of machines in the layer do we build
  225. machine-coverage:
  226. extends: .setup
  227. script:
  228. - ./ci/check-machine-coverage
  229. coverage: '/Coverage: \d+/'
  230. metrics:
  231. extends: .setup
  232. artifacts:
  233. reports:
  234. metrics: metrics.txt
  235. script:
  236. - kas shell --update --force-checkout ci/base.yml --command \
  237. "$CI_PROJECT_DIR/ci/patchreview $CI_PROJECT_DIR/meta-* --verbose --metrics $CI_PROJECT_DIR/metrics.txt"