about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPietro Albini <pietro@pietroalbini.org>2019-10-23 15:56:21 +0200
committerPietro Albini <pietro@pietroalbini.org>2019-10-29 10:01:27 +0100
commit53be2724157ca6fe9412e52dea56d4b29759ac11 (patch)
tree6ab3506eb3b82b4967517d6b7486ca5c2cfe3395
parent2dd4e7320e620dc9a59423c55a7db3520ba8b553 (diff)
ci: enable "run when submodule changes" with environment variables
We have a job in our CI (PR's x86_64-gnu-tools) that's supposed to run
only when a submodule is changed in the PR, and it works by having a
task at the start of the build that skips all the following tasks if the
condition isn't met.

Before this commit that task was gated with template parameters, which
is a unique feature of Azure Pipelines. To make our CI more generic this
commit switches the gate to use a simple environment variable plus a
condition, which should be supported on more CI providers.
-rw-r--r--src/ci/azure-pipelines/pr.yml14
-rw-r--r--src/ci/azure-pipelines/steps/run.yml29
2 files changed, 15 insertions, 28 deletions
diff --git a/src/ci/azure-pipelines/pr.yml b/src/ci/azure-pipelines/pr.yml
index 62e23efe1ef..566e654fdb3 100644
--- a/src/ci/azure-pipelines/pr.yml
+++ b/src/ci/azure-pipelines/pr.yml
@@ -22,14 +22,6 @@ jobs:
         IMAGE: x86_64-gnu-llvm-6.0
       mingw-check:
         IMAGE: mingw-check
-
-- job: LinuxTools
-  timeoutInMinutes: 600
-  pool:
-    vmImage: ubuntu-16.04
-  steps:
-    - template: steps/run.yml
-      parameters:
-        only_on_updated_submodules: 'yes'
-  variables:
-    IMAGE: x86_64-gnu-tools
+      x86_64-gnu-tools:
+        IMAGE: x86_64-gnu-tools
+        CI_ONLY_WHEN_SUBMODULES_CHANGED: 1
diff --git a/src/ci/azure-pipelines/steps/run.yml b/src/ci/azure-pipelines/steps/run.yml
index 01858cca50b..f3339808567 100644
--- a/src/ci/azure-pipelines/steps/run.yml
+++ b/src/ci/azure-pipelines/steps/run.yml
@@ -6,11 +6,6 @@
 #
 # Check travis config for `gdb --batch` command to print all crash logs
 
-parameters:
-  # When this parameter is set to anything other than an empty string the tests
-  # will only be executed when the commit updates submodules
-  only_on_updated_submodules: ''
-
 steps:
 
 # Disable automatic line ending conversion, which is enabled by default on
@@ -29,18 +24,18 @@ steps:
 # Set the SKIP_JOB environment variable if this job is supposed to only run
 # when submodules are updated and they were not. The following time consuming
 # tasks will be skipped when the environment variable is present.
-- ${{ if parameters.only_on_updated_submodules }}:
-  - bash: |
-      set -e
-      # Submodules pseudo-files inside git have the 160000 permissions, so when
-      # those files are present in the diff a submodule was updated.
-      if git diff HEAD^ | grep "^index .* 160000" >/dev/null 2>&1; then
-          echo "Executing the job since submodules are updated"
-      else
-          echo "Not executing this job since no submodules were updated"
-          echo "##vso[task.setvariable variable=SKIP_JOB;]1"
-      fi
-    displayName: Decide whether to run this job
+- bash: |
+    set -e
+    # Submodules pseudo-files inside git have the 160000 permissions, so when
+    # those files are present in the diff a submodule was updated.
+    if git diff HEAD^ | grep "^index .* 160000" >/dev/null 2>&1; then
+        echo "Executing the job since submodules are updated"
+    else
+        echo "Not executing this job since no submodules were updated"
+        echo "##vso[task.setvariable variable=SKIP_JOB;]1"
+    fi
+  displayName: Decide whether to run this job
+  condition: and(succeeded(), variables.CI_ONLY_WHEN_SUBMODULES_CHANGED)
 
 # Spawn a background process to collect CPU usage statistics which we'll upload
 # at the end of the build. See the comments in the script here for more