Repository navigation
ci: build master changes through a merge queue - #1560
Conversation
rubenporras
left a comment
There was a problem hiding this comment.
I think
PR builds no longer read the published snapshot (-Dtycho.baseline=disable -Dtycho.baseline.replace=none).
is not correct, the PR should still read the last released version to know that a plugin version must be updated. So I think the flags -Dtycho.baseline=disable -Dtycho.baseline.replace=none should not be applied like that. Can we change it so that the check stays but against the release and not the snapshot?
b5bb07d to
4f8a34e
Compare
|
(Comment left by Claude at João's request.) @rubenporras, the check against the last release stays in PR builds; those two flags only switch off the comparison with the published snapshot:
The description made that unclear. I've reworded it, the workflow comment and the commit message to say that PR builds still compare versions with the last release; the behaviour is unchanged. |
|
(Comment left by Claude at João's request.) @rubenporras, on why LSP4E has never hit this although its setup is the same as ours (minute-resolution jgit qualifiers, the swap against its published snapshot, no merge queue):
That's why this PR keeps the swap. The merge queue keeps merges from landing in the same minute, and |
Run the verify checks on merge_group so master can be gated by a merge queue that builds one PR at a time on top of the current master. Merge-queue and snapshot builds keep replacing artifacts with the published snapshot's, but now fail when a version the snapshot already has comes with different content (-Dtycho.baseline=failCommon) instead of silently swapping in the published copy. Two merges within one minute gave the runtime feature one version for two contents; the snapshot build then took #1551's feature, which pins xtext.ui 17.3.3, and failed to resolve the umbrella feature. PR builds still compare versions with the last release (compare-version-with-baselines reads none of these properties) but no longer replace anything with the published snapshot, so a bad or newer snapshot cannot fail an unrelated PR; the queue build checks the PR against master. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
4f8a34e to
0d8060e
Compare
Why the change
Master should only ever move to a commit that was built exactly as the snapshot build will build it, so two PRs that are green on their own can no longer break master together or share a version.
Special things to note
masterruleset, with rebase merges, one PR per group, one group building at a time, all-green grouping and a 60-minute check timeout. Adding it first would leave queued PRs waiting for checks that never run. The rule must not be bypassable, by admins or direct pushes, or same-minute merges become possible again.-Dtycho.baseline=failCommonfails the build when an artifact has a version the published snapshot already has, with different content. Tycho's default only warns and swaps in the published copy. On 28 Sep, fix(xtext): match case-sensitive pattern lookups against the candidate name #1551 and fix(xtext.ui): iterate a snapshot of the matches when showing a running search #1552 were merged 9 s apart, so the runtime feature got one version for two contents. The snapshot build swapped in fix(xtext): match case-sensitive pattern lookups against the candidate name #1551's feature, which pinsxtext.ui17.3.3, and failed to resolve. The last good snapshot swapped 36 artifacts, all identical, so the guard has no false positives there. Because the queue builds one PR at a time and each takes a full CI run, two merges to master can no longer land in the same minute. Pushes to version branches (v*) don't go through the queue; their snapshot builds are covered byfailCommon.tycho-p2-extras:compare-version-with-baselinesagainstp2/releases/latest, doesn't read thetycho.baselineproperties and runs as before. This PR's own build ran it in 61 modules.-Dtycho.baseline=disable -Dtycho.baseline.replace=noneonly switch offtycho-p2-plugin's comparison withp2/snapshots/latest.Change outline
🤖 Generated with Claude Code