docs.yml 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. .patterns-docs: &patterns-docs
  2. - ".gitlab/ci/docs.yml"
  3. - "docs/**/*"
  4. - "components/**/*.h"
  5. - "components/**/Kconfig*"
  6. - "components/**/CMakeList.txt"
  7. - "components/**/sdkconfig*"
  8. - "tools/kconfig_new/**/*"
  9. - "CONTRIBUTING.rst"
  10. .if-protected: &if-protected
  11. if: '($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_BRANCH =~ /^release\/v/ || $CI_COMMIT_TAG =~ /^v\d+\.\d+(\.\d+)?($|-)/)'
  12. .if-protected-no_label: &if-protected-no_label
  13. if: '($CI_COMMIT_REF_NAME == "master" || $CI_COMMIT_BRANCH =~ /^release\/v/ || $CI_COMMIT_TAG =~ /^v\d+\.\d+(\.\d+)?($|-)/) && $BOT_TRIGGER_WITH_LABEL == null'
  14. .if-label-build_docs: &if-label-build_docs
  15. if: '$BOT_LABEL_BUILD_DOCS || $CI_MERGE_REQUEST_LABELS =~ /^(?:[^,\n\r]+,)*build_docs(?:,[^,\n\r]+)*$/i'
  16. .if-label-docs: &if-label-docs
  17. if: '$BOT_LABEL_DOCS || $CI_MERGE_REQUEST_LABELS =~ /^(?:[^,\n\r]+,)*docs(?:,[^,\n\r]+)*$/i'
  18. .if-label-docs_full: &if-label-docs_full
  19. if: '$BOT_LABEL_DOCS_FULL || $CI_MERGE_REQUEST_LABELS =~ /^(?:[^,\n\r]+,)*docs_full(?:,[^,\n\r]+)*$/i'
  20. .if-dev-push: &if-dev-push
  21. if: '$CI_COMMIT_REF_NAME != "master" && $CI_COMMIT_BRANCH !~ /^release\/v/ && $CI_COMMIT_TAG !~ /^v\d+\.\d+(\.\d+)?($|-)/ && ($CI_PIPELINE_SOURCE == "push" || $CI_PIPELINE_SOURCE == "merge_request_event")'
  22. .doc-rules:build:docs:
  23. rules:
  24. - <<: *if-protected
  25. - <<: *if-label-build_docs
  26. - <<: *if-label-docs
  27. - <<: *if-label-docs_full
  28. - <<: *if-dev-push
  29. changes: *patterns-docs
  30. # stage: pre_check
  31. check_readme_links:
  32. extends:
  33. - .pre_check_job_template
  34. - .doc-rules:build:docs
  35. tags: ["build", "amd64", "internet"]
  36. allow_failure: true
  37. script:
  38. - python ${IDF_PATH}/tools/ci/check_readme_links.py
  39. check_docs_lang_sync:
  40. extends:
  41. - .pre_check_job_template
  42. - .doc-rules:build:docs
  43. script:
  44. - cd docs
  45. - ./check_lang_folder_sync.sh
  46. .build_docs_template:
  47. image: $ESP_IDF_DOC_ENV_IMAGE
  48. tags:
  49. - build_docs
  50. dependencies: []
  51. script:
  52. - cd docs
  53. - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 3.6.10 pip install -r requirements.txt
  54. - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 3.6.10 ./build_docs.py -bs $DOC_BUILDERS -l $DOCLANG -t $DOCTGT build
  55. parallel:
  56. matrix:
  57. - DOCLANG: ["en", "zh_CN"]
  58. DOCTGT: ["esp32", "esp32s2", "esp32c3"]
  59. check_docs_gh_links:
  60. extends:
  61. - .pre_check_job_template
  62. - .build_docs_template
  63. - .doc-rules:build:docs
  64. script:
  65. - cd docs
  66. - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 3.6.10 pip install -r requirements.txt
  67. - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 3.6.10 ./build_docs.py gh-linkcheck
  68. # stage: build_doc
  69. # Add this stage to let the build_docs job run in parallel with build
  70. .build_docs_build_stage_template:
  71. extends:
  72. - .build_docs_template
  73. stage: build_doc
  74. needs:
  75. - job: check_docs_lang_sync
  76. artifacts: false
  77. - job: check_docs_gh_links
  78. artifacts: false
  79. # Doc jobs have a lot of special cases, we specify rules here directly instead
  80. # in dependencies.yml to simplify things
  81. build_docs_html_full:
  82. extends:
  83. - .build_docs_build_stage_template
  84. rules:
  85. - <<: *if-protected
  86. - <<: *if-label-docs_full
  87. artifacts:
  88. when: always
  89. paths:
  90. - docs/_build/*/*/*.txt
  91. - docs/_build/*/*/html/*
  92. expire_in: 4 days
  93. variables:
  94. DOC_BUILDERS: "html"
  95. build_docs_html_fast:
  96. extends:
  97. - .build_docs_build_stage_template
  98. rules:
  99. - <<: *if-label-docs_full
  100. when: never
  101. - <<: *if-label-build_docs
  102. - <<: *if-label-docs
  103. - <<: *if-dev-push
  104. changes: *patterns-docs
  105. artifacts:
  106. when: always
  107. paths:
  108. - docs/_build/*/*/*.txt
  109. - docs/_build/*/*/html/*
  110. expire_in: 4 days
  111. variables:
  112. DOC_BUILDERS: "html"
  113. DOCS_FAST_BUILD: "yes"
  114. build_docs_pdf:
  115. extends:
  116. - .build_docs_build_stage_template
  117. rules:
  118. - <<: *if-protected
  119. - <<: *if-label-docs_full
  120. artifacts:
  121. when: always
  122. paths:
  123. - docs/_build/*/*/latex/*
  124. expire_in: 4 days
  125. variables:
  126. DOC_BUILDERS: "latex"
  127. .deploy_docs_template:
  128. extends:
  129. - .before_script_no_sync_submodule
  130. image: $ESP_IDF_DOC_ENV_IMAGE
  131. stage: test_deploy
  132. tags:
  133. - deploy
  134. - shiny
  135. variables:
  136. DOCS_BUILD_DIR: "${IDF_PATH}/docs/_build/"
  137. PYTHONUNBUFFERED: 1
  138. dependencies: []
  139. script:
  140. - add_doc_server_ssh_keys $DOCS_DEPLOY_PRIVATEKEY $DOCS_DEPLOY_SERVER $DOCS_DEPLOY_SERVER_USER
  141. - export GIT_VER=$(git describe --always)
  142. - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 3.6.10 ${IDF_PATH}/tools/ci/deploy_docs.py
  143. # stage: test_deploy
  144. deploy_docs_preview:
  145. extends:
  146. - .deploy_docs_template
  147. rules:
  148. - <<: *if-label-build_docs
  149. - <<: *if-label-docs
  150. dependencies:
  151. - build_docs_html_fast
  152. - build_docs_html_full
  153. - build_docs_pdf
  154. variables:
  155. TYPE: "preview"
  156. # older branches use DOCS_DEPLOY_KEY, DOCS_SERVER, DOCS_SERVER_USER, DOCS_PATH for preview server so we keep these names for 'preview'
  157. DOCS_DEPLOY_PRIVATEKEY: "$DOCS_DEPLOY_KEY"
  158. DOCS_DEPLOY_SERVER: "$DOCS_SERVER"
  159. DOCS_DEPLOY_SERVER_USER: "$DOCS_SERVER_USER"
  160. DOCS_DEPLOY_PATH: "$DOCS_PATH"
  161. DOCS_DEPLOY_URL_BASE: "https://$CI_DOCKER_REGISTRY/docs/esp-idf"
  162. # stage: post_deploy
  163. deploy_docs_production:
  164. # The DOCS_PROD_* variables used by this job are "Protected" so these branches must all be marked "Protected" in Gitlab settings
  165. extends:
  166. - .deploy_docs_template
  167. rules:
  168. - <<: *if-protected-no_label
  169. stage: post_deploy
  170. dependencies: # set dependencies to null to avoid missing artifacts issue
  171. needs: # ensure runs after push_to_github succeeded
  172. - build_docs_html_full
  173. - build_docs_pdf
  174. - job: push_to_github
  175. artifacts: false
  176. variables:
  177. TYPE: "preview"
  178. DOCS_DEPLOY_PRIVATEKEY: "$DOCS_PROD_DEPLOY_KEY"
  179. DOCS_DEPLOY_SERVER: "$DOCS_PROD_SERVER"
  180. DOCS_DEPLOY_SERVER_USER: "$DOCS_PROD_SERVER_USER"
  181. DOCS_DEPLOY_PATH: "$DOCS_PROD_PATH"
  182. DOCS_DEPLOY_URL_BASE: "https://docs.espressif.com/projects/esp-idf"
  183. check_doc_links:
  184. extends:
  185. - .build_docs_template
  186. - .rules:protected
  187. stage: post_deploy
  188. tags: ["build", "amd64", "internet"]
  189. artifacts:
  190. when: always
  191. paths:
  192. - docs/_build/*/*/*.txt
  193. - docs/_build/*/*/linkcheck/*.txt
  194. expire_in: 1 week
  195. allow_failure: true
  196. script:
  197. - cd docs
  198. - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 3.6.10 pip install -r requirements.txt
  199. # At the moment this check will always fail due to multiple known limitations, ignore result
  200. - ${IDF_PATH}/tools/ci/multirun_with_pyenv.sh -p 3.6.10 ./build_docs.py -l $DOCLANG -t $DOCTGT linkcheck || { echo "THERE ARE ISSUES DUE TO KNOWN LIMITATIONS, PLEASE FIX THEM. Nowadays we're ignored them to pass pipeline."; true; }