mirror of
https://github.com/NixOS/nixpkgs.git
synced 2026-10-31 01:02:20 +00:00
ci/github-script/check-target-branch: add policy tests
Tests reflect status quo. They establish baseline for later policy
changes. Some test cases are obvious bugs (e.g. mass rebuild checks are
skipped on staging-nixos), others may also be questionable.
Assisted-by: Codex gpt-5.6-sol medium
(cherry picked from commit e1aa8c4d16)
This commit is contained in:
committed by
github-actions[bot]
parent
7c2242edbc
commit
bec0b0629c
203
ci/github-script/check-target-branch-policy.test.ts
Normal file
203
ci/github-script/check-target-branch-policy.test.ts
Normal file
@@ -0,0 +1,203 @@
|
||||
const assert = require('node:assert/strict')
|
||||
const test = require('node:test')
|
||||
const { decideTargetBranchReview } = require('./check-target-branch-policy.ts')
|
||||
|
||||
type DecisionFacts = {
|
||||
base: string
|
||||
head: string
|
||||
maxRebuildCount: number
|
||||
rebuildsAllTests: boolean
|
||||
isExemptKernelUpdate: boolean
|
||||
isExemptHomeAssistantUpdate: boolean
|
||||
}
|
||||
|
||||
type Decision =
|
||||
| 'mass-rebuild'
|
||||
| 'nixos-rebuild'
|
||||
| 'possible-mass-rebuild'
|
||||
| 'skip-development-merge'
|
||||
| 'dismiss'
|
||||
|
||||
const defaults: DecisionFacts = {
|
||||
base: 'master',
|
||||
head: 'topic-branch',
|
||||
maxRebuildCount: 0,
|
||||
rebuildsAllTests: false,
|
||||
isExemptKernelUpdate: false,
|
||||
isExemptHomeAssistantUpdate: false,
|
||||
}
|
||||
|
||||
const cases: Array<{
|
||||
name: string
|
||||
facts: Partial<DecisionFacts>
|
||||
expected: Decision
|
||||
}> = [
|
||||
{
|
||||
name: 'allows fewer than 500 rebuilds on master',
|
||||
facts: { maxRebuildCount: 499 },
|
||||
expected: 'dismiss',
|
||||
},
|
||||
{
|
||||
name: 'flags 500 rebuilds on master as a possible mass rebuild',
|
||||
facts: { maxRebuildCount: 500 },
|
||||
expected: 'possible-mass-rebuild',
|
||||
},
|
||||
{
|
||||
name: 'flags 999 rebuilds on master as a possible mass rebuild',
|
||||
facts: { maxRebuildCount: 999 },
|
||||
expected: 'possible-mass-rebuild',
|
||||
},
|
||||
{
|
||||
name: 'flags 1000 rebuilds on master as a mass rebuild',
|
||||
facts: { maxRebuildCount: 1000 },
|
||||
expected: 'mass-rebuild',
|
||||
},
|
||||
{
|
||||
name: 'does not check mass rebuilds on staging-nixos',
|
||||
facts: { base: 'staging-nixos', maxRebuildCount: 24_000 },
|
||||
expected: 'dismiss',
|
||||
},
|
||||
{
|
||||
name: 'does not check mass rebuilds on a release staging-nixos branch',
|
||||
facts: { base: 'staging-nixos-26.05', maxRebuildCount: 1000 },
|
||||
expected: 'dismiss',
|
||||
},
|
||||
{
|
||||
name: 'allows mass rebuilds on staging',
|
||||
facts: { base: 'staging', maxRebuildCount: 1000 },
|
||||
expected: 'dismiss',
|
||||
},
|
||||
{
|
||||
name: 'flags a mass rebuild on a release branch',
|
||||
facts: { base: 'release-26.05', maxRebuildCount: 1000 },
|
||||
expected: 'mass-rebuild',
|
||||
},
|
||||
{
|
||||
name: 'flags NixOS test rebuilds on master',
|
||||
facts: { rebuildsAllTests: true },
|
||||
expected: 'nixos-rebuild',
|
||||
},
|
||||
{
|
||||
name: 'flags NixOS test rebuilds on a release branch',
|
||||
facts: { base: 'release-26.05', rebuildsAllTests: true },
|
||||
expected: 'nixos-rebuild',
|
||||
},
|
||||
{
|
||||
name: 'allows NixOS test rebuilds on staging-nixos',
|
||||
facts: { base: 'staging-nixos', rebuildsAllTests: true },
|
||||
expected: 'dismiss',
|
||||
},
|
||||
{
|
||||
name: 'does not flag a possible mass rebuild when staging-nixos rebuilds all NixOS tests',
|
||||
facts: {
|
||||
base: 'staging-nixos',
|
||||
maxRebuildCount: 500,
|
||||
rebuildsAllTests: true,
|
||||
},
|
||||
expected: 'dismiss',
|
||||
},
|
||||
{
|
||||
name: 'does not check possible mass rebuilds on staging-nixos',
|
||||
facts: { base: 'staging-nixos', maxRebuildCount: 500 },
|
||||
expected: 'dismiss',
|
||||
},
|
||||
{
|
||||
name: 'skips staging into master',
|
||||
facts: {
|
||||
head: 'staging',
|
||||
maxRebuildCount: 24_000,
|
||||
},
|
||||
expected: 'skip-development-merge',
|
||||
},
|
||||
{
|
||||
name: 'skips staging-nixos into master',
|
||||
facts: {
|
||||
head: 'staging-nixos',
|
||||
maxRebuildCount: 24_000,
|
||||
},
|
||||
expected: 'skip-development-merge',
|
||||
},
|
||||
{
|
||||
name: 'skips master into staging-nixos',
|
||||
facts: {
|
||||
base: 'staging-nixos',
|
||||
head: 'master',
|
||||
maxRebuildCount: 24_000,
|
||||
},
|
||||
expected: 'skip-development-merge',
|
||||
},
|
||||
{
|
||||
name: 'skips staging into staging-nixos',
|
||||
facts: {
|
||||
base: 'staging-nixos',
|
||||
head: 'staging',
|
||||
maxRebuildCount: 24_000,
|
||||
},
|
||||
expected: 'skip-development-merge',
|
||||
},
|
||||
{
|
||||
name: 'skips release staging-nixos into its release branch',
|
||||
facts: {
|
||||
base: 'release-26.05',
|
||||
head: 'staging-nixos-26.05',
|
||||
maxRebuildCount: 24_000,
|
||||
},
|
||||
expected: 'skip-development-merge',
|
||||
},
|
||||
{
|
||||
name: 'skips a release branch into its staging-nixos branch',
|
||||
facts: {
|
||||
base: 'staging-nixos-26.05',
|
||||
head: 'release-26.05',
|
||||
maxRebuildCount: 24_000,
|
||||
},
|
||||
expected: 'skip-development-merge',
|
||||
},
|
||||
{
|
||||
name: 'skips release staging into its staging-nixos branch',
|
||||
facts: {
|
||||
base: 'staging-nixos-26.05',
|
||||
head: 'staging-26.05',
|
||||
maxRebuildCount: 24_000,
|
||||
},
|
||||
expected: 'skip-development-merge',
|
||||
},
|
||||
{
|
||||
name: 'kernel exemption suppresses a possible mass rebuild',
|
||||
facts: { maxRebuildCount: 999, isExemptKernelUpdate: true },
|
||||
expected: 'dismiss',
|
||||
},
|
||||
{
|
||||
name: 'kernel exemption suppresses a definite mass rebuild',
|
||||
facts: { maxRebuildCount: 1000, isExemptKernelUpdate: true },
|
||||
expected: 'dismiss',
|
||||
},
|
||||
{
|
||||
name: 'kernel exemption suppresses a NixOS test rebuild',
|
||||
facts: { rebuildsAllTests: true, isExemptKernelUpdate: true },
|
||||
expected: 'dismiss',
|
||||
},
|
||||
{
|
||||
name: 'Home Assistant exemption suppresses a mass rebuild',
|
||||
facts: {
|
||||
maxRebuildCount: 1500,
|
||||
isExemptHomeAssistantUpdate: true,
|
||||
},
|
||||
expected: 'dismiss',
|
||||
},
|
||||
{
|
||||
name: 'Home Assistant exemption does not suppress a NixOS test rebuild',
|
||||
facts: {
|
||||
maxRebuildCount: 1500,
|
||||
rebuildsAllTests: true,
|
||||
isExemptHomeAssistantUpdate: true,
|
||||
},
|
||||
expected: 'nixos-rebuild',
|
||||
},
|
||||
]
|
||||
|
||||
for (const { name, facts, expected } of cases) {
|
||||
test(name, () => {
|
||||
assert.equal(decideTargetBranchReview({ ...defaults, ...facts }), expected)
|
||||
})
|
||||
}
|
||||
@@ -2,7 +2,8 @@
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"typecheck": "tsc --build",
|
||||
"test": "npm run typecheck"
|
||||
"testsuite": "node --test",
|
||||
"test": "npm run typecheck && npm run testsuite"
|
||||
},
|
||||
"//": [
|
||||
"Keep `@actions/core` and `@actions/github` in sync with",
|
||||
|
||||
Reference in New Issue
Block a user