|
|
@ -92,11 +92,20 @@ 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")) |
|
|
|
device(device_ip, "git checkout", extra + "\n" + readFile("selfdrive/test/setup_device_ci.sh")) |
|
|
|
} |
|
|
|
} |
|
|
|
steps.each { item -> |
|
|
|
steps.each { item -> |
|
|
|
if (branch != "master" && item.size() == 3 && !hasPathChanged(gitDiff, item[2])) { |
|
|
|
def name = item[0] |
|
|
|
println "Skipping ${item[0]}: no changes in ${item[2]}." |
|
|
|
def cmd = item[1] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def args = item[2] |
|
|
|
|
|
|
|
def diffPaths = args.diffPaths ?: [] |
|
|
|
|
|
|
|
def cmdTimeout = args.timeout ?: 9999 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (branch != "master" && diffPaths && !hasPathChanged(gitDiff, diffPaths)) { |
|
|
|
|
|
|
|
println "Skipping ${name}: no changes in ${diffPaths}." |
|
|
|
return |
|
|
|
return |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
device(device_ip, item[0], item[1]) |
|
|
|
timeout(time: cmdTimeout, unit: 'SECONDS') { |
|
|
|
|
|
|
|
device(device_ip, name, cmd) |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -134,6 +143,9 @@ def setupCredentials() { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def step(String name, String cmd, Map args = [:]) { |
|
|
|
|
|
|
|
return [name, cmd, args] |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
node { |
|
|
|
node { |
|
|
|
env.CI = "1" |
|
|
|
env.CI = "1" |
|
|
@ -158,14 +170,14 @@ node { |
|
|
|
try { |
|
|
|
try { |
|
|
|
if (env.BRANCH_NAME == 'devel-staging') { |
|
|
|
if (env.BRANCH_NAME == 'devel-staging') { |
|
|
|
deviceStage("build release3-staging", "tici-needs-can", [], [ |
|
|
|
deviceStage("build release3-staging", "tici-needs-can", [], [ |
|
|
|
["build release3-staging", "RELEASE_BRANCH=release3-staging $SOURCE_DIR/release/build_release.sh"], |
|
|
|
step("build release3-staging", "RELEASE_BRANCH=release3-staging $SOURCE_DIR/release/build_release.sh"), |
|
|
|
]) |
|
|
|
]) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (env.BRANCH_NAME == 'master-ci') { |
|
|
|
if (env.BRANCH_NAME == 'master-ci') { |
|
|
|
deviceStage("build nightly", "tici-needs-can", [], [ |
|
|
|
deviceStage("build nightly", "tici-needs-can", [], [ |
|
|
|
["build nightly", "RELEASE_BRANCH=nightly $SOURCE_DIR/release/build_release.sh"], |
|
|
|
step("build nightly", "RELEASE_BRANCH=nightly $SOURCE_DIR/release/build_release.sh"), |
|
|
|
["build nightly-dev", "PANDA_DEBUG_BUILD=1 RELEASE_BRANCH=nightly-dev $SOURCE_DIR/release/build_release.sh"], |
|
|
|
step("build nightly-dev", "PANDA_DEBUG_BUILD=1 RELEASE_BRANCH=nightly-dev $SOURCE_DIR/release/build_release.sh"), |
|
|
|
]) |
|
|
|
]) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -176,64 +188,64 @@ node { |
|
|
|
deviceStage("onroad", "tici-needs-can", [], [ |
|
|
|
deviceStage("onroad", "tici-needs-can", [], [ |
|
|
|
// TODO: ideally, this test runs in master-ci, but it takes 5+m to build it |
|
|
|
// TODO: ideally, this test runs in master-ci, but it takes 5+m to build it |
|
|
|
//["build master-ci", "cd $SOURCE_DIR/release && TARGET_DIR=$TEST_DIR $SOURCE_DIR/scripts/retry.sh ./build_devel.sh"], |
|
|
|
//["build master-ci", "cd $SOURCE_DIR/release && TARGET_DIR=$TEST_DIR $SOURCE_DIR/scripts/retry.sh ./build_devel.sh"], |
|
|
|
["build openpilot", "cd system/manager && ./build.py"], |
|
|
|
step("build openpilot", "cd system/manager && ./build.py"), |
|
|
|
["check dirty", "release/check-dirty.sh"], |
|
|
|
step("check dirty", "release/check-dirty.sh"), |
|
|
|
["onroad tests", "pytest selfdrive/test/test_onroad.py -s"], |
|
|
|
step("onroad tests", "pytest selfdrive/test/test_onroad.py -s"), |
|
|
|
//["time to onroad", "pytest selfdrive/test/test_time_to_onroad.py"], |
|
|
|
//["time to onroad", "pytest selfdrive/test/test_time_to_onroad.py"], |
|
|
|
]) |
|
|
|
]) |
|
|
|
}, |
|
|
|
}, |
|
|
|
'HW + Unit Tests': { |
|
|
|
'HW + Unit Tests': { |
|
|
|
deviceStage("tici-hardware", "tici-common", ["UNSAFE=1"], [ |
|
|
|
deviceStage("tici-hardware", "tici-common", ["UNSAFE=1"], [ |
|
|
|
["build", "cd system/manager && ./build.py"], |
|
|
|
step("build", "cd system/manager && ./build.py"), |
|
|
|
["test pandad", "pytest selfdrive/pandad/tests/test_pandad.py", ["panda/", "selfdrive/pandad/"]], |
|
|
|
step("test pandad", "pytest selfdrive/pandad/tests/test_pandad.py", [diffPaths: ["panda/", "selfdrive/pandad/"]]), |
|
|
|
["test power draw", "pytest -s system/hardware/tici/tests/test_power_draw.py"], |
|
|
|
step("test power draw", "pytest -s system/hardware/tici/tests/test_power_draw.py"), |
|
|
|
["test encoder", "LD_LIBRARY_PATH=/usr/local/lib pytest system/loggerd/tests/test_encoder.py"], |
|
|
|
step("test encoder", "LD_LIBRARY_PATH=/usr/local/lib pytest system/loggerd/tests/test_encoder.py"), |
|
|
|
["test pigeond", "pytest system/ubloxd/tests/test_pigeond.py"], |
|
|
|
step("test pigeond", "pytest system/ubloxd/tests/test_pigeond.py"), |
|
|
|
["test manager", "pytest system/manager/test/test_manager.py"], |
|
|
|
step("test manager", "pytest system/manager/test/test_manager.py"), |
|
|
|
]) |
|
|
|
]) |
|
|
|
}, |
|
|
|
}, |
|
|
|
'loopback': { |
|
|
|
'loopback': { |
|
|
|
deviceStage("loopback", "tici-loopback", ["UNSAFE=1"], [ |
|
|
|
deviceStage("loopback", "tici-loopback", ["UNSAFE=1"], [ |
|
|
|
["build openpilot", "cd system/manager && ./build.py"], |
|
|
|
step("build openpilot", "cd system/manager && ./build.py"), |
|
|
|
["test pandad loopback", "pytest selfdrive/pandad/tests/test_pandad_loopback.py"], |
|
|
|
step("test pandad loopback", "pytest selfdrive/pandad/tests/test_pandad_loopback.py"), |
|
|
|
]) |
|
|
|
]) |
|
|
|
}, |
|
|
|
}, |
|
|
|
'camerad': { |
|
|
|
'camerad': { |
|
|
|
deviceStage("AR0231", "tici-ar0231", ["UNSAFE=1"], [ |
|
|
|
deviceStage("AR0231", "tici-ar0231", ["UNSAFE=1"], [ |
|
|
|
["build", "cd system/manager && ./build.py"], |
|
|
|
step("build", "cd system/manager && ./build.py"), |
|
|
|
["test camerad", "pytest system/camerad/test/test_camerad.py"], |
|
|
|
step("test camerad", "pytest system/camerad/test/test_camerad.py"), |
|
|
|
["test exposure", "pytest system/camerad/test/test_exposure.py"], |
|
|
|
step("test exposure", "pytest system/camerad/test/test_exposure.py"), |
|
|
|
]) |
|
|
|
]) |
|
|
|
deviceStage("OX03C10", "tici-ox03c10", ["UNSAFE=1"], [ |
|
|
|
deviceStage("OX03C10", "tici-ox03c10", ["UNSAFE=1"], [ |
|
|
|
["build", "cd system/manager && ./build.py"], |
|
|
|
step("build", "cd system/manager && ./build.py"), |
|
|
|
["test camerad", "pytest system/camerad/test/test_camerad.py"], |
|
|
|
step("test camerad", "pytest system/camerad/test/test_camerad.py"), |
|
|
|
["test exposure", "pytest system/camerad/test/test_exposure.py"], |
|
|
|
step("test exposure", "pytest system/camerad/test/test_exposure.py"), |
|
|
|
]) |
|
|
|
]) |
|
|
|
}, |
|
|
|
}, |
|
|
|
'sensord': { |
|
|
|
'sensord': { |
|
|
|
deviceStage("LSM + MMC", "tici-lsmc", ["UNSAFE=1"], [ |
|
|
|
deviceStage("LSM + MMC", "tici-lsmc", ["UNSAFE=1"], [ |
|
|
|
["build", "cd system/manager && ./build.py"], |
|
|
|
step("build", "cd system/manager && ./build.py"), |
|
|
|
["test sensord", "pytest system/sensord/tests/test_sensord.py"], |
|
|
|
step("test sensord", "pytest system/sensord/tests/test_sensord.py"), |
|
|
|
]) |
|
|
|
]) |
|
|
|
deviceStage("BMX + LSM", "tici-bmx-lsm", ["UNSAFE=1"], [ |
|
|
|
deviceStage("BMX + LSM", "tici-bmx-lsm", ["UNSAFE=1"], [ |
|
|
|
["build", "cd system/manager && ./build.py"], |
|
|
|
step("build", "cd system/manager && ./build.py"), |
|
|
|
["test sensord", "pytest system/sensord/tests/test_sensord.py"], |
|
|
|
step("test sensord", "pytest system/sensord/tests/test_sensord.py"), |
|
|
|
]) |
|
|
|
]) |
|
|
|
}, |
|
|
|
}, |
|
|
|
'replay': { |
|
|
|
'replay': { |
|
|
|
deviceStage("model-replay", "tici-replay", ["UNSAFE=1"], [ |
|
|
|
deviceStage("model-replay", "tici-replay", ["UNSAFE=1"], [ |
|
|
|
["build", "cd system/manager && ./build.py", ["selfdrive/modeld/"]], |
|
|
|
step("build", "cd system/manager && ./build.py", [diffPaths: ["selfdrive/modeld/"]]), |
|
|
|
["model replay", "selfdrive/test/process_replay/model_replay.py", ["selfdrive/modeld/"]], |
|
|
|
step("model replay", "selfdrive/test/process_replay/model_replay.py", [diffPaths: ["selfdrive/modeld/"]]), |
|
|
|
]) |
|
|
|
]) |
|
|
|
}, |
|
|
|
}, |
|
|
|
'tizi': { |
|
|
|
'tizi': { |
|
|
|
deviceStage("tizi", "tizi", ["UNSAFE=1"], [ |
|
|
|
deviceStage("tizi", "tizi", ["UNSAFE=1"], [ |
|
|
|
["build openpilot", "cd system/manager && ./build.py"], |
|
|
|
step("build openpilot", "cd system/manager && ./build.py"), |
|
|
|
["test pandad loopback", "SINGLE_PANDA=1 pytest selfdrive/pandad/tests/test_pandad_loopback.py"], |
|
|
|
step("test pandad loopback", "SINGLE_PANDA=1 pytest selfdrive/pandad/tests/test_pandad_loopback.py"), |
|
|
|
["test pandad spi", "pytest selfdrive/pandad/tests/test_pandad_spi.py"], |
|
|
|
step("test pandad spi", "pytest selfdrive/pandad/tests/test_pandad_spi.py"), |
|
|
|
["test pandad", "pytest selfdrive/pandad/tests/test_pandad.py", ["panda/", "selfdrive/pandad/"]], |
|
|
|
step("test pandad", "pytest selfdrive/pandad/tests/test_pandad.py", [diffPaths: ["panda/", "selfdrive/pandad/"]]), |
|
|
|
["test amp", "pytest system/hardware/tici/tests/test_amplifier.py"], |
|
|
|
step("test amp", "pytest system/hardware/tici/tests/test_amplifier.py"), |
|
|
|
["test qcomgpsd", "pytest system/qcomgpsd/tests/test_qcomgpsd.py"], |
|
|
|
step("test qcomgpsd", "pytest system/qcomgpsd/tests/test_qcomgpsd.py"), |
|
|
|
]) |
|
|
|
]) |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|