diff --git a/Jenkinsfile b/Jenkinsfile index 7137b8bf36..47c0ad6f60 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -89,7 +89,12 @@ def deviceStage(String stageName, String deviceType, List extra_env, def steps) device(device_ip, "git checkout", extra + "\n" + readFile("selfdrive/test/setup_device_ci.sh")) } steps.each { item -> - device(device_ip, item[0], item[1]) + if (branch != "master" && item.size() == 3 && !hasPathChanged(item[2])) { + println "Skipping ${item[0]}: no changes in ${item[2]}." + return; + } else { + device(device_ip, item[0], item[1]) + } } } } @@ -97,6 +102,31 @@ def deviceStage(String stageName, String deviceType, List extra_env, def steps) } } +@NonCPS +def hasPathChanged(List paths) { + changedFiles = [] + for (changeLogSet in currentBuild.changeSets) { + for (entry in changeLogSet.getItems()) { + for (file in entry.getAffectedFiles()) { + changedFiles.add(file.getPath()) + } + } + } + + env.CHANGED_FILES = changedFiles.join(" ") + if (currentBuild.number > 1) { + env.CHANGED_FILES += currentBuild.previousBuild.getBuildVariables().get("CHANGED_FILES") + } + + for (path in paths) { + if (env.CHANGED_FILES.contains(path)) { + return true; + } + } + + return false; +} + def setupCredentials() { withCredentials([ string(credentialsId: 'azure_token', variable: 'AZURE_TOKEN'),