[ci] Compare merge-branch base ref against the default branch (#18385)

This commit is contained in:
Clyde Stubbs
2026-08-15 06:18:22 +10:00
committed by GitHub
parent be66e8b99c
commit e5224e22ae
2 changed files with 19 additions and 3 deletions
+2 -1
View File
@@ -70,6 +70,7 @@ async function isStackedPr(github, context) {
async function detectMergeBranch(github, context) { async function detectMergeBranch(github, context) {
const labels = new Set(); const labels = new Set();
const baseRef = context.payload.pull_request.base.ref; const baseRef = context.payload.pull_request.base.ref;
const defaultBranch = context.payload.repository.default_branch;
if (baseRef === 'release') { if (baseRef === 'release') {
labels.add('merging-to-release'); labels.add('merging-to-release');
@@ -78,7 +79,7 @@ async function detectMergeBranch(github, context) {
} else if (await isStackedPr(github, context)) { } else if (await isStackedPr(github, context)) {
// GitHub manages the merge order for a stack, so these are not blocked. // GitHub manages the merge order for a stack, so these are not blocked.
labels.add('stacked-pr'); labels.add('stacked-pr');
} else if (baseRef !== 'dev') { } else if (baseRef !== defaultBranch) {
// A chain built by hand: it must not merge until its base branch does. // A chain built by hand: it must not merge until its base branch does.
labels.add('chained-pr'); labels.add('chained-pr');
} }
@@ -43,14 +43,14 @@ const WITHOUT_SCHEMA = 'CODEOWNERS = ["@esphome/core"]';
// Builds a fresh context for detectMergeBranch tests instead of mutating the // Builds a fresh context for detectMergeBranch tests instead of mutating the
// shared CONTEXT fixture above (which other describe blocks rely on). // shared CONTEXT fixture above (which other describe blocks rely on).
function makeMergeContext(baseRef, { stack } = {}) { function makeMergeContext(baseRef, { stack, defaultBranch = 'dev' } = {}) {
const pull_request = { number: 1, base: { ref: baseRef } }; const pull_request = { number: 1, base: { ref: baseRef } };
if (stack !== undefined) { if (stack !== undefined) {
pull_request.stack = stack; pull_request.stack = stack;
} }
return { return {
repo: { owner: 'esphome', repo: 'esphome' }, repo: { owner: 'esphome', repo: 'esphome' },
payload: { pull_request } payload: { pull_request, repository: { default_branch: defaultBranch } }
}; };
} }
@@ -136,6 +136,21 @@ describe('detectMergeBranch', () => {
assert.deepEqual(Array.from(labels).sort(), ['chained-pr']); assert.deepEqual(Array.from(labels).sort(), ['chained-pr']);
assert.equal(state.calls, 1); assert.equal(state.calls, 1);
}); });
it('base ref matches default branch adds no labels', async () => {
const { github } = makeStackGithub({ stack: null });
const context = makeMergeContext('other', { defaultBranch: 'other' });
const labels = await detectMergeBranch(github, context);
assert.deepEqual(Array.from(labels).sort(), []);
});
it('base ref dev when the default branch is main adds chained-pr', async () => {
const { github } = makeStackGithub({ stack: null });
const context = makeMergeContext('dev', { defaultBranch: 'main' });
const labels = await detectMergeBranch(github, context);
assert.deepEqual(Array.from(labels).sort(), ['chained-pr']);
});
}); });
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------