summaryrefslogtreecommitdiff
path: root/ci/supportedBranches.js
blob: 003b437613f79487ac56a1115502dd2188559580 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env nix-shell
/*
#!nix-shell -i node -p nodejs
*/

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 }

// 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')
}