-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
More granularity in the CI, separating code and docs changes? #8705
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
Comments
Thanks for opening your first issue here at xarray! Be sure to follow the issue template! |
Thanks @etienneschalk These are good ideas. Some things to consider:
|
Hi @dcherian, Thanks for your answer!
Flaky TestsI define a flaky test as a test that satisfy those conditions:
ExampleExample of flaky tests from my recent experience, on the same PR, failing on two different runs:
Examples from other PRs:
-> Conclusion: |
Before that we'll need to do something with the 2000+ errors reported from pyright after parsing the whole codebase :). (with some configuration tweaks and excluding some folders that can be safely ignored it is reduced down to ~1400 errors, which is still a lot). |
@etienneschalk Yes you're right! We could run the code checks only if files in A PR would be welcome, here are some docs I found. |
I have been marking flaky tests as xfailed, and think we should continue to do that. If someone has a plan to fix them, that's even better, but in lieu of that I would support more xfailing... |
@benbovy this seems like a colossal task indeed! This may be reasonably impossible actually. Even for small codebases, this can rapidly get out of hand to type a posteriori, and even sometimes may lead to "forced typed code" that is less elegant or even capable of introducing bugs...
From my recent experience, I would be in for marking I see there is a only instance of Otherwise, to use xfail, this sentence seems to summarize the best:
|
* Trigger CI only if code files are modified. Fixes #8705 * Apply suggestions from code review Co-authored-by: Maximilian Roos <[email protected]> --------- Co-authored-by: Maximilian Roos <[email protected]>
* Trigger CI only if code files are modified. Fixes #8705 * Apply suggestions from code review Co-authored-by: Maximilian Roos <[email protected]> --------- Co-authored-by: Maximilian Roos <[email protected]>
* Trigger CI only if code files are modified. Fixes #8705 * Apply suggestions from code review Co-authored-by: Maximilian Roos <[email protected]> --------- Co-authored-by: Maximilian Roos <[email protected]>
What is your issue?
Hi,
TLDR: Is there a way to only run relevant CI checks (eg documentation) when a new commit is pushed on a PR's branch?
The following issue is written from a naive user point of view. Indeed I do not know how the CI works on this project. I constated that when updating an existing Pull Request, the whole test battery is re-executed. However, it is a common scenario that someone wants to update only the documentation, for instance. In that case, it might make sense to only retrigger the documentation checks. A little bit like
pre-commit
that only runs on the updated files. Achieving such a level of granularity is not desirable as even a small code change could make geographically remote tests in the code fail, however, a high-level separation between code and docs for instance, might relieve a little bit the pipelines. This is assuming the code does not depend at all on the code. Maybe other separations exists, but the first I can think of is code vs docs.Another separation would be to have an "order" / "dependency system" in the pipeline. Eg,
A -> B -> C
; ifA
fails, there is no point into taking resources to computeB
as we know for sure the rest will fail. Such a hierarchy might be difficult for the test matrix that is unordered (eg Python Version x OS, on this project it seems to be more or less(3.9, 3.10, 3.11, 3.12) x (Ubuntu, macOS, Windows)
There is also a notion of frequency and execution time: pipelines' stages that are the most empirically likely to fail and the shortest to runshould be ran first, to avoid having them fail due to flakiness and out of bad luck when all the other checks passed before. Such a stage exists:
CI / ubuntu-latest py3.10 flaky
(it is in the name). Taking that into account, theCI Additional / Mypy
stage qualifies for both criteria should be ran before everything else for instance. Indeed, it is static code checking and very likely to fail, something a developer might also run locally before committing / pushing, and only takes one minute to run (compared to several minutes for each of stages of the Python Version x OS matrix). The goal here is to save resources (at the cost of losing the "completeness" of the CI run)The text was updated successfully, but these errors were encountered: