From eca88f5ea2bb01f1be79d80abc499883a8dc98d9 Mon Sep 17 00:00:00 2001 From: Maxime Desroches Date: Sat, 5 Oct 2024 19:28:09 -0700 Subject: [PATCH] jenkins: run tests when certain files change (#33682) * test * change * work? * debug * git * temp * save * test * test * work? * fix * test * cleanup * fix * final test * fix * clean * null * final * test * save * test this * final --- Jenkinsfile | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) 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'),