@ -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<String> 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'),