-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[clang][ci] Move libc++ testing into the main PR pipeline #93318
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
16ec4c7
5be9db1
d2ce8f2
a585ece
9160288
ad6a5df
5d56a7e
67ed5ce
6cd1e08
cac43ab
9bbf851
e2ba15e
a739134
8d10d51
9c1b04a
34c2cb9
735def1
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -85,6 +85,22 @@ function compute-projects-to-test() { | |
done | ||
} | ||
|
||
function compute-runtimes-to-test() { | ||
projects=${@} | ||
for project in ${projects}; do | ||
case ${project} in | ||
clang) | ||
for p in libcxx libcxxabi libunwind; do | ||
echo $p | ||
done | ||
;; | ||
*) | ||
# Nothing to do | ||
;; | ||
esac | ||
done | ||
} | ||
|
||
function add-dependencies() { | ||
projects=${@} | ||
for project in ${projects}; do | ||
|
@@ -178,6 +194,15 @@ function check-targets() { | |
cross-project-tests) | ||
echo "check-cross-project" | ||
;; | ||
libcxx) | ||
echo "check-cxx" | ||
;; | ||
libcxxabi) | ||
echo "check-cxxabi" | ||
;; | ||
libunwind) | ||
echo "check-unwind" | ||
;; | ||
lldb) | ||
echo "check-all" # TODO: check-lldb may not include all the LLDB tests? | ||
;; | ||
|
@@ -207,17 +232,6 @@ if echo "$modified_dirs" | grep -q -E "^(libcxx|libcxxabi|libunwind|runtimes|cma | |
EOF | ||
fi | ||
|
||
# If clang changed. | ||
if echo "$modified_dirs" | grep -q -E "^(clang)$"; then | ||
cat <<EOF | ||
- trigger: "clang-ci" | ||
build: | ||
message: "${buildMessage}" | ||
commit: "${BUILDKITE_COMMIT}" | ||
branch: "${BUILDKITE_BRANCH}" | ||
EOF | ||
fi | ||
|
||
# Generic pipeline for projects that have not defined custom steps. | ||
# | ||
# Individual projects should instead define the pre-commit CI tests that suits their | ||
|
@@ -231,6 +245,10 @@ linux_projects_to_test=$(exclude-linux $(compute-projects-to-test ${modified_pro | |
linux_check_targets=$(check-targets ${linux_projects_to_test} | sort | uniq) | ||
linux_projects=$(add-dependencies ${linux_projects_to_test} | sort | uniq) | ||
|
||
linux_runtimes_to_test=$(compute-runtimes-to-test ${linux_projects_to_test}) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I was trying to understand why my PR which touches LLVM and MLIR but not clang triggered all the runtime tests, and ended up here. It's not clear to me why is the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I believe this line does what it's supposed to do. Runtimes are tested here not for their sake, but as an additional testing for Clang. So, if you make a change in LLVM, it's clear that Clang might be affected, so it needs to be tested. Runtimes are acting as an extension of There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sure, in theory... But that seems like a stretch to me. I remember recently that clang folks argued to removed the flang tests when changing clang because of the likelihood of breaking Flang with clang tests. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
I believe Flang was tested on Clang changes to make sure Clang didn't make any incompatible changes to the driver, which Flang reuses. This is a different use case from testing Clang itself, and yes, we believed (and likely still) that it didn't bring enough value, especially when it was rendering the whole Clang CI unusable.
I find it hard to prove this statement either way. But I find it much easier to believe that (a) Clang is insufficiently tested; (b) libc++ tests bring a lot of coverage. So I believe the value is there, and the cost is building the tests and running them, which is as good as it gets. Additionally, "don't run those Clang tests if Clang is tested because of an LLVM change" kind of logic make it harder to reason about CI. Statements like "this change has passed Clang CI" would require additional context to understand which tests were actually ran.
To me the ratio is rather clear. If you want to push for this, you'd have to open a PR yourself. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
I see exactly the same kind of transitive dependency issue: one project depends on another and running all the possible tests for the dependent project on a change to the upstream project is deemed "not worth it". We reduced the coverage for Flang tests for the sake of Clang "velocity": this is exactly the same for LLVM here.
Referring to "clang CI" is a rather vague statement to me: testing in generally goes into "tiers" and the "premerge" tiers is about tradeoff in terms of value/cost, while you're making a completeness arguments. There are tons of things that we don't test in pre-merge. Also the buildbot does not seem to cover this, which is quite annoying because now pre-merge is broken (see https://buildkite.com/llvm-project/github-pull-requests/builds/104995#019239b1-1aaa-411a-9fd2-9dcfdce25c3d ) by libcxx while the post merge is green, which should only ever happen if the PR is responsible for the breakage.
It's not very hard: the data may be difficult to surface but it exists. How many PR touching only LLVM failed libcxx tests but not clang? |
||
linux_runtime_check_targets=$(check-targets ${linux_runtimes_to_test} | sort | uniq) | ||
linux_runtimes=$(echo ${linux_runtimes_to_test} | sort | uniq) | ||
|
||
windows_projects_to_test=$(exclude-windows $(compute-projects-to-test ${modified_projects})) | ||
windows_check_targets=$(check-targets ${windows_projects_to_test} | sort | uniq) | ||
windows_projects=$(add-dependencies ${windows_projects_to_test} | sort | uniq) | ||
|
@@ -255,7 +273,7 @@ if [[ "${linux_projects}" != "" ]]; then | |
CC: 'clang' | ||
CXX: 'clang++' | ||
commands: | ||
- './.ci/monolithic-linux.sh "$(echo ${linux_projects} | tr ' ' ';')" "$(echo ${linux_check_targets})"' | ||
- './.ci/monolithic-linux.sh "$(echo ${linux_projects} | tr ' ' ';')" "$(echo ${linux_check_targets})" "$(echo ${linux_runtimes} | tr ' ' ';')" "$(echo ${linux_runtime_check_targets})"' | ||
EOF | ||
fi | ||
|
||
|
This file was deleted.
Uh oh!
There was an error while loading. Please reload this page.