]> granicus.if.org Git - esp-idf/commitdiff
CI: Support switching between various versions of Python
authorRoland Dobai <dobai.roland@gmail.com>
Tue, 25 Sep 2018 12:43:07 +0000 (14:43 +0200)
committerRoland Dobai <dobai.roland@gmail.com>
Fri, 19 Oct 2018 09:12:11 +0000 (11:12 +0200)
.gitlab-ci.yml
tools/ci/setup_python.sh [new file with mode: 0644]

index 383dbd8d934af72757bca281e43dc1929cd9d36b..df1bf732274efeb6026ec5b1b8dd142730295ff7 100644 (file)
@@ -53,6 +53,7 @@ variables:
   python $APPLY_BOT_FILTER_SCRIPT || exit 0
 
 before_script:
+  - source tools/ci/setup_python.sh
   - *git_clean_stale_submodules
   # apply bot filter in before script
   - *apply_bot_filter
@@ -75,11 +76,13 @@ before_script:
 # used for check scripts which we want to run unconditionally
 .do_nothing_before_no_filter:
   before_script: &do_nothing_before_no_filter
+    - source tools/ci/setup_python.sh
     - *git_clean_stale_submodules
 
 # used for everything else where we want to do no prep, except for bot filter
 .do_nothing_before:
   before_script: &do_nothing_before
+    - source tools/ci/setup_python.sh
     - *git_clean_stale_submodules
     # apply bot filter in before script
     - *apply_bot_filter
@@ -88,6 +91,7 @@ before_script:
 
 .add_gitlab_key_before:
   before_script: &add_gitlab_key_before
+    - source tools/ci/setup_python.sh
     - *git_clean_stale_submodules
     # apply bot filter in before script
     - *apply_bot_filter
diff --git a/tools/ci/setup_python.sh b/tools/ci/setup_python.sh
new file mode 100644 (file)
index 0000000..6f8ece1
--- /dev/null
@@ -0,0 +1,49 @@
+#! /bin/bash
+
+# Regexp for matching job names which are incompatible with Python 3
+py3_incomp='assign_test|UT|IT'
+
+if [ -z ${PYTHON_VER+x} ] || [[ $CI_JOB_NAME =~ $py3_incomp ]]; then
+    # Use this version of the Python interpreter if it was not defined before or
+    # the given job is not compatible with Python 3
+    PYTHON_VER=2.7.15
+fi
+
+if [ -f /opt/pyenv/activate ];
+then
+    source /opt/pyenv/activate
+    pyenv global $PYTHON_VER || {
+                                    echo 'Python' $PYTHON_VER 'is not installed.'
+                                    INSTALLED_PY_VERS=$(pyenv versions --bare)
+
+                                    while [ ${#PYTHON_VER} -gt 0 ]
+                                    do
+                                        echo 'Tring to locate a match for' $PYTHON_VER
+
+                                        for ver in ${INSTALLED_PY_VERS[@]}
+                                        do
+                                            if [[ $ver == $PYTHON_VER* ]];
+                                            then
+                                                pyenv global $ver
+                                                break 2
+                                            fi
+                                        done
+
+                                        # Removing last character and trying to find some match.
+                                        # For example, if 3.4.8 was selected but isn't installed then it will try to
+                                        # find some other installed 3.4.X version, and then some 3.X.X version.
+                                        PYTHON_VER=${PYTHON_VER: : -1}
+                                    done
+                                }
+    python --version || {
+                            echo 'No matching Python interpreter is found!'
+                            exit 1
+                        }
+elif command -v python -V 1>/dev/null 2>&1;
+then
+    python --version
+    echo 'No /opt/pyenv/activate exists and Python from path is used.'
+else
+    echo 'No /opt/pyenv/activate exists and no Python interpreter is found!'
+    exit 1
+fi