docs.yml 6.5 KB

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