build.yml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400
  1. .build_template:
  2. stage: build
  3. image: $CI_DOCKER_REGISTRY/esp32-ci-env$BOT_DOCKER_IMAGE_TAG
  4. tags:
  5. - build
  6. variables:
  7. BATCH_BUILD: "1"
  8. V: "0"
  9. .build_ssc_template:
  10. extends: .build_template
  11. parallel: 3
  12. artifacts:
  13. paths:
  14. - SSC/ssc_bin
  15. expire_in: 1 week
  16. variables:
  17. TARGET_NAME: "ESP32"
  18. only:
  19. variables:
  20. - $BOT_TRIGGER_WITH_LABEL == null
  21. - $BOT_LABEL_BUILD
  22. - $BOT_LABEL_INTEGRATION_TEST
  23. - $BOT_LABEL_REGULAR_TEST
  24. script:
  25. - ./tools/ci/retry_failed.sh git clone $SSC_REPOSITORY
  26. - python $CHECKOUT_REF_SCRIPT SSC SSC
  27. - cd SSC
  28. - MAKEFLAGS= ./ci_build_ssc.sh $TARGET_NAME
  29. build_ssc_esp32:
  30. extends: .build_ssc_template
  31. variables:
  32. TARGET_NAME: "ESP32"
  33. build_ssc_esp32s2:
  34. extends: .build_ssc_template
  35. parallel: 2
  36. variables:
  37. TARGET_NAME: "ESP32S2"
  38. .build_esp_idf_tests_cmake:
  39. extends: .build_template
  40. artifacts:
  41. paths:
  42. - tools/unit-test-app/output/${IDF_TARGET}
  43. - tools/unit-test-app/builds/${IDF_TARGET}/*.json
  44. - components/idf_test/unit_test/*.yml
  45. - ${LOG_PATH}
  46. when: always
  47. expire_in: 4 days
  48. only:
  49. variables:
  50. - $BOT_TRIGGER_WITH_LABEL == null
  51. - $BOT_LABEL_BUILD
  52. - $BOT_LABEL_UNIT_TEST
  53. - $BOT_LABEL_UNIT_TEST_S2
  54. - $BOT_LABEL_REGULAR_TEST
  55. variables:
  56. LOG_PATH: "$CI_PROJECT_DIR/log_ut_cmake"
  57. PYTHON_VER: 3
  58. script:
  59. - export EXTRA_CFLAGS=${PEDANTIC_CFLAGS}
  60. - export EXTRA_CXXFLAGS=${PEDANTIC_CXXFLAGS}
  61. - mkdir -p ${LOG_PATH}
  62. - ${CI_PROJECT_DIR}/tools/ci/build_unit_test.sh
  63. - cd $CI_PROJECT_DIR/tools/unit-test-app
  64. - python tools/UnitTestParser.py
  65. build_esp_idf_tests_cmake_esp32:
  66. extends: .build_esp_idf_tests_cmake
  67. variables:
  68. IDF_TARGET: esp32
  69. build_esp_idf_tests_cmake_esp32s2:
  70. extends: .build_esp_idf_tests_cmake
  71. variables:
  72. IDF_TARGET: esp32s2
  73. .build_examples_template:
  74. extends: .build_template
  75. variables:
  76. PYTHON_VER: 3
  77. parallel: 10
  78. artifacts:
  79. when: always
  80. expire_in: 4 days
  81. only:
  82. # Here both 'variables' and 'refs' conditions are given. They are combined with "AND" logic.
  83. variables:
  84. - $BOT_TRIGGER_WITH_LABEL == null
  85. - $BOT_LABEL_BUILD
  86. - $BOT_LABEL_EXAMPLE_TEST
  87. - $BOT_LABEL_REGULAR_TEST
  88. - $BOT_LABEL_WEEKEND_TEST
  89. script:
  90. # it's not possible to build 100% out-of-tree and have the "artifacts"
  91. # mechanism work, but this is the next best thing
  92. - mkdir ${BUILD_PATH}
  93. - mkdir -p ${LOG_PATH}
  94. - ${IDF_PATH}/tools/ci/build_examples.sh
  95. # Check if the tests demand Make built binaries. If not, delete them
  96. - if [ ${EXAMPLE_TEST_BUILD_SYSTEM} == "cmake" ]; then exit 0; fi
  97. - rm -rf ${BUILD_PATH}
  98. build_examples_make:
  99. extends: .build_examples_template
  100. # This is a workaround for a rarely encountered issue with building examples in CI.
  101. # Probably related to building of Kconfig in 'make clean' stage
  102. retry: 1
  103. artifacts:
  104. paths:
  105. - $LOG_PATH
  106. variables:
  107. LOG_PATH: "${CI_PROJECT_DIR}/log_examples_make"
  108. BUILD_PATH: "${CI_PROJECT_DIR}/build_examples_make"
  109. EXAMPLE_TEST_BUILD_SYSTEM: "make"
  110. IDF_TARGET: "esp32" # currently we only support esp32
  111. only:
  112. refs:
  113. - master
  114. - /^release\/v/
  115. - /^v\d+\.\d+(\.\d+)?($|-)/
  116. - triggers
  117. - schedules
  118. - pipelines
  119. - web
  120. # same as above, but for CMake
  121. .build_examples_cmake: &build_examples_cmake
  122. extends: .build_examples_template
  123. artifacts:
  124. paths:
  125. - build_examples/list.json
  126. - build_examples/list_job_*.json
  127. - build_examples/*/*/*/sdkconfig
  128. - build_examples/*/*/*/build/*.bin
  129. - build_examples/*/*/*/build/*.elf
  130. - build_examples/*/*/*/build/*.map
  131. - build_examples/*/*/*/build/flasher_args.json
  132. - build_examples/*/*/*/build/bootloader/*.bin
  133. - build_examples/*/*/*/build/partition_table/*.bin
  134. - $LOG_PATH
  135. variables:
  136. LOG_PATH: "${CI_PROJECT_DIR}/log_examples"
  137. BUILD_PATH: "${CI_PROJECT_DIR}/build_examples"
  138. EXAMPLE_TEST_BUILD_SYSTEM: "cmake"
  139. build_examples_cmake_esp32:
  140. extends: .build_examples_cmake
  141. variables:
  142. IDF_TARGET: esp32
  143. build_examples_cmake_esp32s2:
  144. extends: .build_examples_cmake
  145. variables:
  146. IDF_TARGET: esp32s2
  147. .build_test_apps: &build_test_apps
  148. extends: .build_template
  149. stage: build
  150. artifacts:
  151. when: always
  152. paths:
  153. - build_test_apps/list.json
  154. - build_test_apps/list_job_*.json
  155. - build_test_apps/*/*/*/build/*.bin
  156. - build_test_apps/*/*/*/sdkconfig
  157. - build_test_apps/*/*/*/build/*.elf
  158. - build_test_apps/*/*/*/build/*.map
  159. - build_test_apps/*/*/*/build/flasher_args.json
  160. - build_test_apps/*/*/*/build/bootloader/*.bin
  161. - build_test_apps/*/*/*/build/partition_table/*.bin
  162. - $LOG_PATH
  163. expire_in: 3 days
  164. variables:
  165. LOG_PATH: "$CI_PROJECT_DIR/log_test_apps"
  166. BUILD_PATH: "$CI_PROJECT_DIR/build_test_apps"
  167. only:
  168. variables:
  169. - $BOT_TRIGGER_WITH_LABEL == null
  170. - $BOT_LABEL_BUILD
  171. - $BOT_LABEL_INTEGRATION_TEST
  172. - $BOT_LABEL_REGULAR_TEST
  173. - $BOT_LABEL_CUSTOM_TEST
  174. - $BOT_LABEL_WEEKEND_TEST
  175. script:
  176. - mkdir -p ${BUILD_PATH}
  177. - mkdir -p ${LOG_PATH}
  178. - ${IDF_PATH}/tools/ci/build_test_apps.sh
  179. build_test_apps_esp32:
  180. extends: .build_test_apps
  181. variables:
  182. IDF_TARGET: esp32
  183. build_test_apps_esp32s2:
  184. extends: .build_test_apps
  185. variables:
  186. IDF_TARGET: esp32s2
  187. # If you want to add new build example jobs, please add it into dependencies of `.example_test_template`
  188. .build_docs_template: &build_docs_template
  189. stage: build
  190. image: $ESP_IDF_DOC_ENV_IMAGE
  191. tags:
  192. - build_docs
  193. artifacts:
  194. when: always
  195. paths:
  196. - docs/_build/*/*/*.txt
  197. - docs/_build/*/*/html/*
  198. expire_in: 4 days
  199. only:
  200. variables:
  201. - $BOT_TRIGGER_WITH_LABEL == null
  202. - $BOT_LABEL_BUILD
  203. - $BOT_LABEL_BUILD_DOCS
  204. - $BOT_LABEL_REGULAR_TEST
  205. dependencies: []
  206. script:
  207. - cd docs
  208. - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 3.6.10 pip install -r requirements.txt
  209. - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 3.6.10 ./build_docs.py -bs html -l $DOCLANG -t $DOCTGT build
  210. build_docs_html:
  211. extends: .build_docs_template
  212. parallel:
  213. matrix:
  214. - DOCLANG: ["en", "zh_CN"]
  215. DOCTGT: ["esp32", "esp32s2"]
  216. build_docs_pdf:
  217. stage: build
  218. image: $ESP_IDF_DOC_ENV_IMAGE
  219. tags:
  220. - build_docs
  221. artifacts:
  222. when: always
  223. paths:
  224. - docs/_build/*/*/latex/*
  225. expire_in: 4 days
  226. rules:
  227. - if: '$CI_COMMIT_REF_NAME == "master"'
  228. - if: '$CI_COMMIT_REF_NAME =~ "/^release\/v/"'
  229. - if: '$CI_COMMIT_REF_NAME =~ "/^v\d+\.\d+(\.\d+)?($|-)/"'
  230. - if: $BOT_LABEL_BUILD_DOCS
  231. dependencies: []
  232. parallel:
  233. matrix:
  234. - DOCLANG: ["en", "zh_CN"]
  235. DOCTGT: ["esp32", "esp32s2"]
  236. script:
  237. - cd docs
  238. - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 3.6.10 pip install -r requirements.txt
  239. - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 3.6.10 ./build_docs.py -bs latex -l $DOCLANG -t $DOCTGT build
  240. test_build_system:
  241. extends: .build_template
  242. only:
  243. variables:
  244. - $BOT_TRIGGER_WITH_LABEL == null
  245. - $BOT_LABEL_BUILD
  246. - $BOT_LABEL_REGULAR_TEST
  247. - $BOT_LABEL_WEEKEND_TEST
  248. script:
  249. - ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh
  250. - rm -rf test_build_system
  251. - mkdir test_build_system
  252. - cd test_build_system
  253. - ${IDF_PATH}/tools/ci/test_build_system.sh
  254. test_build_system_cmake:
  255. extends: .build_template
  256. only:
  257. variables:
  258. - $BOT_TRIGGER_WITH_LABEL == null
  259. - $BOT_LABEL_BUILD
  260. - $BOT_LABEL_REGULAR_TEST
  261. - $BOT_LABEL_WEEKEND_TEST
  262. script:
  263. - ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh
  264. - rm -rf test_build_system
  265. - mkdir test_build_system
  266. - cd test_build_system
  267. - ${IDF_PATH}/tools/ci/test_build_system_cmake.sh
  268. test_build_system_cmake_macos:
  269. extends: .macos_build_template
  270. only:
  271. refs:
  272. - master
  273. - /^release\/v/
  274. - /^v\d+\.\d+(\.\d+)?($|-)/
  275. - schedules
  276. - triggers
  277. - pipelines
  278. - web
  279. variables:
  280. - $CI_PIPELINE_SOURCE != "push" && $BOT_LABEL_MACOS_TEST != null
  281. - $CI_PIPELINE_SOURCE == "push"
  282. script:
  283. - ${IDF_PATH}/tools/ci/test_configure_ci_environment.sh
  284. - rm -rf test_build_system
  285. - mkdir test_build_system
  286. - cd test_build_system
  287. - ${IDF_PATH}/tools/ci/test_build_system_cmake.sh
  288. build_docker:
  289. stage: build
  290. image: espressif/docker-builder:1
  291. tags:
  292. - build_docker_amd64_brno
  293. only:
  294. refs:
  295. - master
  296. - /^release\/v/
  297. - /^v\d+\.\d+(\.\d+)?($|-)/
  298. - schedules
  299. variables:
  300. DOCKER_TMP_IMAGE_NAME: "idf_tmp_image"
  301. before_script: []
  302. script:
  303. - export LOCAL_CI_REPOSITORY_URL=$CI_REPOSITORY_URL
  304. - if [ -n "$LOCAL_GITLAB_HTTPS_HOST" ]; then export LOCAL_CI_REPOSITORY_URL="https://gitlab-ci-token:${CI_JOB_TOKEN}@${LOCAL_GITLAB_HTTPS_HOST}/${CI_PROJECT_PATH}"; fi
  305. - echo "Using repository at $LOCAL_CI_REPOSITORY_URL"
  306. - export DOCKER_BUILD_ARGS="--build-arg IDF_CLONE_URL=${LOCAL_CI_REPOSITORY_URL} --build-arg IDF_CLONE_BRANCH_OR_TAG=${CI_COMMIT_REF_NAME} --build-arg IDF_CHECKOUT_REF=${CI_COMMIT_TAG:-$CI_COMMIT_SHA}"
  307. # Build
  308. - docker build --tag ${DOCKER_TMP_IMAGE_NAME} ${DOCKER_BUILD_ARGS} tools/docker/
  309. # We can't mount $PWD/examples/get-started/blink into the container, see https://gitlab.com/gitlab-org/gitlab-ce/issues/41227.
  310. # The workaround mentioned there works, but leaves around directories which need to be cleaned up manually.
  311. # Therefore, build a copy of the example located inside the container.
  312. - docker run --rm --workdir /opt/esp/idf/examples/get-started/blink ${DOCKER_TMP_IMAGE_NAME} idf.py build
  313. build_idf_exe:
  314. stage: build
  315. image: $CI_DOCKER_REGISTRY/esp32-toolchain-win-cross
  316. tags:
  317. - build
  318. only:
  319. refs:
  320. - master
  321. - /^release\/v/
  322. - /^v\d+\.\d+(\.\d+)?($|-)/
  323. - schedules
  324. before_script: []
  325. artifacts:
  326. paths:
  327. - tools/windows/idf_exe/build/idf-exe-v*.zip
  328. expire_in: 4 days
  329. script:
  330. - cd tools/windows/idf_exe/
  331. - mkdir build
  332. - cd build
  333. - cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain-i686-w64-mingw32.cmake -DCMAKE_BUILD_TYPE=Release ..
  334. - cmake --build .
  335. build_cmdlinerunner:
  336. stage: build
  337. image: $CI_DOCKER_REGISTRY/esp32-toolchain-win-cross
  338. tags:
  339. - build
  340. only:
  341. refs:
  342. - master
  343. - /^release\/v/
  344. - /^v\d+\.\d+(\.\d+)?($|-)/
  345. - schedules
  346. before_script: []
  347. artifacts:
  348. paths:
  349. - tools/windows/tool_setup/cmdlinerunner/build/cmdlinerunner.dll
  350. expire_in: 4 days
  351. script:
  352. - cd tools/windows/tool_setup/cmdlinerunner
  353. - mkdir build
  354. - cd build
  355. - cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain-i686-w64-mingw32.cmake -DCMAKE_BUILD_TYPE=Release ..
  356. - cmake --build .
  357. build_installer:
  358. # using a different stage here to be able to use artifacts from build_cmdlinerunner job
  359. stage: host_test
  360. image: $CI_DOCKER_REGISTRY/wine-innosetup:1
  361. tags:
  362. - build
  363. only:
  364. refs:
  365. - master
  366. - /^release\/v/
  367. - /^v\d+\.\d+(\.\d+)?($|-)/
  368. - schedules
  369. dependencies:
  370. - build_cmdlinerunner
  371. before_script: []
  372. script:
  373. - cd tools/windows/tool_setup/
  374. - ./build_installer.sh