ci/supportedBranches.js: move to ci/github-script

This way it will be covered by our package.json when we configure ES Modules
in the next commit.
This commit is contained in:
Michael Daniels
2026-08-31 18:06:11 -04:00
parent 0c4c86d086
commit 2d813b7719
12 changed files with 13 additions and 13 deletions

View File

@@ -4,7 +4,7 @@ module.exports = async ({ github, context, core, dry }) => {
const { DefaultArtifactClient } = await import('@actions/artifact')
const { readFile, writeFile } = require('node:fs/promises')
const withRateLimit = require('./withRateLimit.js')
const { classify } = require('../supportedBranches.js')
const { classify } = require('./supportedBranches.js')
const { handleMerge } = require('./merge.js')
const { handleReviewers } = require('./reviewers.js')

View File

@@ -1,4 +1,4 @@
const { classify, split } = require('../supportedBranches.js')
const { classify, split } = require('./supportedBranches.js')
type TargetBranchPolicyFacts = {
base: string

View File

@@ -6,7 +6,7 @@ import type { GitHub } from '@actions/github/lib/utils'
// They do seem quite similar, but this needs to run after eval,
// and prepare.js obviously doesn't.
const { split } = require('../supportedBranches.js')
const { split } = require('./supportedBranches.js')
const { readFile } = require('node:fs/promises')
const { postReview, dismissReviews } = require('./reviews.js')
const {

View File

@@ -1,7 +1,7 @@
// @ts-nocheck
module.exports = async ({ github, context, core, dry, cherryPicks }) => {
const { execFileSync } = require('node:child_process')
const { classify } = require('../supportedBranches.js')
const { classify } = require('./supportedBranches.js')
const withRateLimit = require('./withRateLimit.js')
const { dismissReviews, postReview } = require('./reviews.js')
const reviewKey = 'check-commits'

View File

@@ -1,4 +1,4 @@
const { classify } = require('../supportedBranches.js')
const { classify } = require('./supportedBranches.js')
const { getCommitDetailsForPR } = require('./get-pr-commit-details.js')
/** @typedef {import('./get-pr-commit-details.js').Commit} Commit */

View File

@@ -1,4 +1,4 @@
const { classify } = require('../supportedBranches.js')
const { classify } = require('./supportedBranches.js')
const { getCommitDetailsForPR } = require('./get-pr-commit-details')
/**

View File

@@ -1,5 +1,5 @@
// @ts-nocheck
const { classify } = require('../supportedBranches.js')
const { classify } = require('./supportedBranches.js')
function runChecklist({
committers,

View File

@@ -1,5 +1,5 @@
// @ts-nocheck
const { classify } = require('../supportedBranches.js')
const { classify } = require('./supportedBranches.js')
const { postReview, dismissReviews } = require('./reviews.js')
const reviewKey = 'prepare'
const supportedSystems = require('./supportedSystems.js')
@@ -65,7 +65,7 @@ module.exports = async ({ github, context, core, dry }) => {
// commits between that base and head is the real base. We can query for this via GitHub's
// REST API. There can be multiple candidates for the real base with the same number of
// commits. In this case we pick the "best" candidate by a fixed ordering of branches,
// as defined in ci/supportedBranches.js.
// as defined in ./supportedBranches.js.
//
// These requests take a while, when comparing against the wrong release - they need
// to look at way more than 10k commits in that case. Thus, we try to minimize the

View File

@@ -0,0 +1,83 @@
#!/usr/bin/env nix-shell
/*
#!nix-shell -i node -p nodejs
*/
// @ts-nocheck
const typeConfig = {
master: ['development', 'primary'],
release: ['development', 'primary'],
staging: ['development', 'secondary'],
'staging-next': ['development', 'secondary'],
'staging-nixos': ['development', 'secondary'],
'haskell-updates': ['development', 'secondary'],
nixos: ['channel'],
nixpkgs: ['channel'],
}
// "order" ranks the development branches by how likely they are the intended base branch
// when they are an otherwise equally good fit according to ci/github-script/prepare.js.
const orderConfig = {
master: 0,
release: 1,
staging: 2,
'staging-nixos': 2,
'haskell-updates': 3,
'staging-next': 4,
}
function split(branch) {
return {
...branch.match(
/(?<prefix>.+?)(-(?<version>\d{2}\.\d{2}|unstable)(?:-(?<suffix>.*))?)?$/,
).groups,
}
}
function classify(branch) {
const { prefix, version } = split(branch)
return {
branch,
order: orderConfig[prefix] ?? Infinity,
stable: (version ?? 'unstable') !== 'unstable',
type: typeConfig[prefix] ?? ['wip'],
version: version ?? 'unstable',
}
}
module.exports = { classify, split }
// If called directly via CLI, runs the following tests:
if (!module.parent) {
console.log('split(branch)')
function testSplit(branch) {
console.log(branch, split(branch))
}
testSplit('master')
testSplit('release-25.05')
testSplit('staging')
testSplit('staging-next')
testSplit('staging-25.05')
testSplit('staging-next-25.05')
testSplit('nixpkgs-25.05-darwin')
testSplit('nixpkgs-unstable')
testSplit('haskell-updates')
testSplit('backport-123-to-release-25.05')
console.log('')
console.log('classify(branch)')
function testClassify(branch) {
console.log(branch, classify(branch))
}
testClassify('master')
testClassify('release-25.05')
testClassify('staging')
testClassify('staging-next')
testClassify('staging-25.05')
testClassify('staging-next-25.05')
testClassify('nixpkgs-25.05-darwin')
testClassify('nixpkgs-unstable')
testClassify('haskell-updates')
testClassify('backport-123-to-release-25.05')
}