-
-
Notifications
You must be signed in to change notification settings - Fork 139
Description
Spinning from the #1663, during the TSC discussions today we noticed that the tiers are documented as follows in BUILDING.md
Tier 1: These platforms represent the majority of Node.js users. The Node.js Build Working Group maintains infrastructure for full test coverage. Test failures on tier 1 platforms will block releases.
Tier 2: These platforms represent smaller segments of the Node.js user base. The Node.js Build Working Group maintains infrastructure for full test coverage. Test failures on tier 2 platforms will block releases. Infrastructure issues may delay the release of binaries for these platforms.
Experimental: May not compile or test suite may not pass. The core team does not create releases for these platforms. Test failures on experimental platforms do not block releases. Contributions to improve support for these platforms are welcome.
Which does not say anything about Tier 2 platforms must be in the pull request testing CI, and there isn't much distinction between Tier 1 and Tier 2 if they are both in the testing CI.
Personally I think given the current situation of the testing CI, we are biting more than we can chew if we still insist in keeping the Tier 2 platforms in every pull request testing CI run. It requires more resources than we currently have, increase CI run time, and creates a bigger flake surface. (for example, in the reliability report yesterday you can see several tier 2 platforms on the list). It also shifts the burden of making every changes work on that platform to individual contributors, who can be new to the project and it can be frustrating for them to get blocked by these niche platforms that they don't care too much about, and overall making it harder to gain and retain new contributors.
Is it really more important to keep every pull request to pass all the tests in these tier 2 platforms than providing a frictionless experience for contributors? Personally I don't think that's the right prioritization. Keeping the tests green on a platform in the CI, specifically, is not the same as just "keeping Node.js work on that platform" - for example a test could pass perfectly fine on a well-maintained version of the platform, but still is in trouble for some reason in the CI on that platform, which may be strictly related to the state of the machine in the CI, or the specific setup of that machine. It does not seem right say for a new contributor to open a pull request to add util.something
which is a straight-forward JS thing with a straight-forward test, and they end up scratching their head at some mysterious flake/machine problem on a niche tier 2 platform in the CI, and have to keep pinging other collaborators to restart the CI to get it landed (assuming they don't get frustrated enough themselves and give up on the PR). This can happen to tier 1 platform too, but at least the user base of tier 1 platforms is enough to deserve the attention of innocent new contributors, but tier 2 really isn't.
I think a more tenable solution would be to keep tier 2 platforms in the node-daily-master CI, and let Jenkins notify corresponding stakeholders when tests fail there. The stakeholders could come back opening an issue or opening a pull request to fix the test for that platform, and make sure that things are in order for the releases (if there are infrastructure issues that makes it hard to build the binaries in time for the release then they'll be delayed - which is precisely what the Tier 2 description says). For node-test-pull-request, we can either remove the tier 2 platforms, or only make sure that they can build but do not actually run the tests, as the marginal cost of keeping all the tests green on all these platforms isn't really worth the benefit at this point IMO.
cc @nodejs/tsc @nodejs/build