Ver código fonte

Merge branch 'feature/ci_tags_release_branches' into 'master'

CI support for testing & deploying release tags & branches

For CI testing & deployment of release branches:
* Test release tags as well as branches
* Swap gitlab submodule URLs to github when testing release tags or branches.

These changes are already pushed to the release/v2.0 branch.

See merge request !604

Ivan Grokhotkov 9 anos atrás
pai
commit
37304aba2d

+ 15 - 9
.gitlab-ci.yml

@@ -14,10 +14,11 @@ before_script:
   - chmod 600 ~/.ssh/id_rsa
   - echo -e "Host gitlab.espressif.cn\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
 
-  # if testing master branch, use github wifi and bt libs.
-  # if testing other branches, use gitlab wifi and bt libs (as maybe changes aren't merged to master yet)
-  - test "${CI_BUILD_REF_NAME}" = "master" || sed -i "s%https://github.com/espressif/esp32-wifi-lib%${GITLAB_SSH_SERVER}/idf/esp32-wifi-lib%" .gitmodules
-  - test "${CI_BUILD_REF_NAME}" = "master" || sed -i "s%https://github.com/espressif/esp32-bt-lib%${GITLAB_SSH_SERVER}/idf/esp32-bt-lib%" .gitmodules
+  # Set IS_PRIVATE or IS_PUBLIC depending on if our branch is public or not
+  #
+  # (the same regular expressions are used to set these are used in 'only:' sections below
+  - source make/configure_ci_environment.sh
+
   # fetch all submodules
   - git submodule update --init --recursive
 
@@ -134,7 +135,7 @@ build_docs:
     - cd docs
     - doxygen
     # If not building master branch, and there are Doxygen warnings, print them and bail out
-    - test "${CI_BUILD_REF_NAME}" = "master" || test $(cat doxygen-warning-log.txt | wc -l) -eq 0 || ( echo "Doxygen pass had some warnings:" && cat doxygen-warning-log.txt && false )
+    - test -n $IS_PRIVATE && test $(cat doxygen-warning-log.txt | wc -l) -eq 0 || ( echo "Doxygen pass had some warnings:" && cat doxygen-warning-log.txt && false )
     - make gh-linkcheck
     - make html
   artifacts:
@@ -160,6 +161,7 @@ test_build_system:
   variables:
     IDF_PATH: "$CI_PROJECT_DIR"
   script:
+    - ./make/test_configure_ci_environment.sh
     - ./make/test_build_system.sh
 
 test_report:
@@ -168,7 +170,8 @@ test_report:
   only:
     - master
     - triggers
-    - /^release\/v.*$/
+    - /^release\/v/
+    - /^v\d+\.\d+(\.\d+)?($|-)/
   tags:
     - report
   variables:
@@ -218,7 +221,8 @@ push_master_to_github:
   stage: deploy
   only:
     - master
-    - /^release\/v.*$/
+    - /^release\/v/
+    - /^v\d+\.\d+(\.\d+)?($|-)/
   tags:
     - deploy
   when: on_success
@@ -250,7 +254,8 @@ deploy_docs:
   stage: deploy
   only:
    - master
-   - /^release\/v.*$/
+   - /^release\/v/
+   - /^v\d+\.\d+(\.\d+)?($|-)/
    - triggers
   tags:
     - deploy
@@ -297,7 +302,8 @@ check_doc_links:
   when: on_success
   only:
     - master
-    - /^release\/v.*$/
+    - /^release\/v/
+    - /^v\d+\.\d+(\.\d+)?($|-)/
     - triggers
   allow_failure: true
 

+ 35 - 0
make/configure_ci_environment.sh

@@ -0,0 +1,35 @@
+#!/bin/bash
+#
+# Short script that is sourced in to the CI environment
+# in .gitlab-ci.yml
+#
+# Sets IS_PUBLIC and IS_PRIVATE based on branch type
+#
+# Tweaks .gitmodules file for private builds
+
+[ -z $CI_BUILD_REF ] && echo "This internal script should only be run by a Gitlab CI runner." && exit 1
+
+REF=$CI_BUILD_REF
+
+# Public branches are:
+# release branches - start with release/
+# release tags - look like vXX.YY or vXX.YY.ZZ with an optional dash followed by anything on the end
+# master branch
+#
+# These POSIX REs are equivalent to the REs in some "only:" sections of the gitlab-ci.yml file
+#
+if [[ $REF = "master" || $REF =~ ^release/v || $REF =~ ^v[0-9]+\.[0-9]+(\.[0-9]+)?(-|$) ]]; then
+    export IS_PUBLIC=1
+else
+    export IS_PRIVATE=1
+fi
+
+unset REF
+
+set -e
+
+if [[ $IS_PRIVATE ]]; then
+   # Redirect git submodules from public github to our private gitlab server
+   sed -i "s%https://github.com/espressif/esp32-wifi-lib%${GITLAB_SSH_SERVER}/idf/esp32-wifi-lib%" .gitmodules
+   sed -i "s%https://github.com/espressif/esp32-bt-lib%${GITLAB_SSH_SERVER}/idf/esp32-bt-lib%" .gitmodules
+fi

+ 34 - 0
make/test_configure_ci_environment.sh

@@ -0,0 +1,34 @@
+#!/bin/bash
+#
+# Short script to verify behaviour of configure_ci_environment.sh
+#
+#
+cd $(dirname $0)  # make dir
+
+touch .gitmodules  # dummy file
+
+# $1 - branch name
+# $2 - 1 if public, empty if private
+function assert_branch_public()
+{
+    (
+        CI_BUILD_REF=$1
+        set -e
+        source ./configure_ci_environment.sh
+        [[ $IS_PUBLIC = $2 ]] || exit 1
+    ) || ( echo "Expected $1 public=$2. Failing" && exit 1 )
+}
+
+assert_branch_public master 1
+assert_branch_public release/v3.0 1
+assert_branch_public release/invalid
+assert_branch_public bugfix/invalid
+assert_branch_public v1.0 1
+assert_branch_public v1.0.0 1
+assert_branch_public v50.50.50 1
+assert_branch_public v1.2-rc77 1
+assert_branch_public v1.2.3-rc1 1
+assert_branch_public v1.2.3invalid
+
+rm -f .gitmodules
+