github-settings-as-code 3.2.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +17 -15
  2. package/dist/cmd/repo-settings.mjs +4 -2
  3. package/dist/cmd/repo-settings.mjs.map +1 -1
  4. package/dist/github/actions-settings/apply.d.mts.map +1 -1
  5. package/dist/github/actions-settings/apply.mjs +0 -4
  6. package/dist/github/actions-settings/apply.mjs.map +1 -1
  7. package/dist/github/actions-settings/backup.d.mts +1 -1
  8. package/dist/github/actions-settings/backup.d.mts.map +1 -1
  9. package/dist/github/actions-settings/backup.mjs +4 -4
  10. package/dist/github/actions-settings/backup.mjs.map +1 -1
  11. package/dist/github/actions-settings/constants.d.mts +1 -1
  12. package/dist/github/clear-json-files.d.mts +17 -0
  13. package/dist/github/clear-json-files.d.mts.map +1 -0
  14. package/dist/github/clear-json-files.mjs +29 -0
  15. package/dist/github/clear-json-files.mjs.map +1 -0
  16. package/dist/github/constants.d.mts +1 -0
  17. package/dist/github/constants.d.mts.map +1 -1
  18. package/dist/github/constants.mjs +1 -0
  19. package/dist/github/constants.mjs.map +1 -1
  20. package/dist/github/environments/api/get-environments.d.mts +1 -1
  21. package/dist/github/environments/apply.d.mts +3 -3
  22. package/dist/github/environments/apply.d.mts.map +1 -1
  23. package/dist/github/environments/apply.mjs +5 -9
  24. package/dist/github/environments/apply.mjs.map +1 -1
  25. package/dist/github/environments/backup.d.mts +6 -1
  26. package/dist/github/environments/backup.d.mts.map +1 -1
  27. package/dist/github/environments/backup.mjs +11 -5
  28. package/dist/github/environments/backup.mjs.map +1 -1
  29. package/dist/github/environments/constants.d.mts +1 -1
  30. package/dist/github/environments/read-environment-contents.d.mts +0 -1
  31. package/dist/github/environments/read-environment-contents.d.mts.map +1 -1
  32. package/dist/github/environments/read-environment-contents.mjs +0 -1
  33. package/dist/github/environments/read-environment-contents.mjs.map +1 -1
  34. package/dist/github/index.d.mts +2 -0
  35. package/dist/github/index.d.mts.map +1 -1
  36. package/dist/github/index.mjs +2 -0
  37. package/dist/github/index.mjs.map +1 -1
  38. package/dist/github/pages/apply.d.mts.map +1 -1
  39. package/dist/github/pages/apply.mjs +0 -2
  40. package/dist/github/pages/apply.mjs.map +1 -1
  41. package/dist/github/pages/backup.d.mts +11 -1
  42. package/dist/github/pages/backup.d.mts.map +1 -1
  43. package/dist/github/pages/backup.mjs +18 -5
  44. package/dist/github/pages/backup.mjs.map +1 -1
  45. package/dist/github/repository/apply.d.mts.map +1 -1
  46. package/dist/github/repository/apply.mjs +0 -4
  47. package/dist/github/repository/apply.mjs.map +1 -1
  48. package/dist/github/repository/backup.d.mts.map +1 -1
  49. package/dist/github/repository/backup.mjs +4 -4
  50. package/dist/github/repository/backup.mjs.map +1 -1
  51. package/dist/github/ruleset/apply.d.mts.map +1 -1
  52. package/dist/github/ruleset/apply.mjs +9 -9
  53. package/dist/github/ruleset/apply.mjs.map +1 -1
  54. package/dist/github/ruleset/backup.d.mts +7 -0
  55. package/dist/github/ruleset/backup.d.mts.map +1 -1
  56. package/dist/github/ruleset/backup.mjs +20 -7
  57. package/dist/github/ruleset/backup.mjs.map +1 -1
  58. package/dist/github/ruleset/read-rule-set-contents.d.mts +0 -1
  59. package/dist/github/ruleset/read-rule-set-contents.d.mts.map +1 -1
  60. package/dist/github/ruleset/read-rule-set-contents.mjs +0 -1
  61. package/dist/github/ruleset/read-rule-set-contents.mjs.map +1 -1
  62. package/dist/github/settings-file-path.d.mts +14 -0
  63. package/dist/github/settings-file-path.d.mts.map +1 -0
  64. package/dist/github/settings-file-path.mjs +41 -0
  65. package/dist/github/settings-file-path.mjs.map +1 -0
  66. package/dist/github/variables/api/list-repo-variables.d.mts.map +1 -1
  67. package/dist/github/variables/api/list-repo-variables.mjs +3 -1
  68. package/dist/github/variables/api/list-repo-variables.mjs.map +1 -1
  69. package/dist/github/variables/apply.d.mts +9 -0
  70. package/dist/github/variables/apply.d.mts.map +1 -1
  71. package/dist/github/variables/apply.mjs +31 -17
  72. package/dist/github/variables/apply.mjs.map +1 -1
  73. package/dist/github/variables/backup.d.mts +20 -0
  74. package/dist/github/variables/backup.d.mts.map +1 -0
  75. package/dist/github/variables/backup.mjs +35 -0
  76. package/dist/github/variables/backup.mjs.map +1 -0
  77. package/dist/github/variables/constants.d.mts +65 -0
  78. package/dist/github/variables/constants.d.mts.map +1 -0
  79. package/dist/github/variables/constants.mjs +48 -0
  80. package/dist/github/variables/constants.mjs.map +1 -0
  81. package/dist/github/variables/index.d.mts +2 -0
  82. package/dist/github/variables/index.d.mts.map +1 -1
  83. package/dist/github/variables/index.mjs +2 -0
  84. package/dist/github/variables/index.mjs.map +1 -1
  85. package/dist/github/vulnerability-alerts/apply.d.mts.map +1 -1
  86. package/dist/github/vulnerability-alerts/apply.mjs +0 -2
  87. package/dist/github/vulnerability-alerts/apply.mjs.map +1 -1
  88. package/dist/github/vulnerability-alerts/backup.d.mts +1 -1
  89. package/dist/github/vulnerability-alerts/backup.d.mts.map +1 -1
  90. package/dist/github/vulnerability-alerts/backup.mjs +4 -4
  91. package/dist/github/vulnerability-alerts/backup.mjs.map +1 -1
  92. package/package.json +35 -34
  93. package/src/cmd/repo-settings.mts +5 -2
  94. package/src/github/actions-settings/apply.mts +0 -9
  95. package/src/github/actions-settings/backup.mts +6 -11
  96. package/src/github/actions-settings/constants.mts +1 -1
  97. package/src/github/clear-json-files.mts +31 -0
  98. package/src/github/clear-json-files.test.mts +78 -0
  99. package/src/github/constants.mts +2 -0
  100. package/src/github/environments/api/get-environments.mts +1 -1
  101. package/src/github/environments/apply.mts +8 -13
  102. package/src/github/environments/backup.mts +13 -12
  103. package/src/github/environments/constants.mts +1 -1
  104. package/src/github/environments/read-environment-contents.mts +0 -4
  105. package/src/github/index.mts +2 -0
  106. package/src/github/pages/apply.mts +0 -6
  107. package/src/github/pages/backup.mts +21 -12
  108. package/src/github/repository/apply.mts +0 -9
  109. package/src/github/repository/backup.mts +5 -10
  110. package/src/github/ruleset/apply.mts +10 -18
  111. package/src/github/ruleset/backup.mts +23 -13
  112. package/src/github/ruleset/read-rule-set-contents.mts +0 -4
  113. package/src/github/ruleset/schema.test.mts +13 -24
  114. package/src/github/settings-file-path.mts +51 -0
  115. package/src/github/settings-file-path.test.mts +70 -0
  116. package/src/github/variables/api/list-repo-variables.mts +3 -1
  117. package/src/github/variables/apply.mts +54 -27
  118. package/src/github/variables/backup.mts +47 -0
  119. package/src/github/variables/constants.mts +61 -0
  120. package/src/github/variables/constants.test.mts +112 -0
  121. package/src/github/variables/index.mts +2 -0
  122. package/src/github/vulnerability-alerts/apply.mts +0 -6
  123. package/src/github/vulnerability-alerts/backup.mts +6 -11
@@ -1 +1 @@
1
- {"version":3,"file":"backup.mjs","sourceRoot":"","sources":["../../../src/github/pages/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAEzD,0CAA0C;AAC1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,GAAG,GAAY,IAAI,EACJ,EAAE;IACjB,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;IAE9B,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAE1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CACV,mEAAmE,CACpE,CAAC;QAEF,OAAO;IACT,CAAC;IAED,mEAAmE;IACnE,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,EACzC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CACvC,CAAC;IAEF,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,sBAAsB,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,kBAAkB,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,MAAM,mBAAmB,EAAE,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"backup.mjs","sourceRoot":"","sources":["../../../src/github/pages/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EACtC,GAAG,GAAY,IAAI,EACJ,EAAE;IACjB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAE1C,MAAM,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAEzC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CACV,+EAA+E,CAChF,CAAC;QAEF,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,sBAAsB,EAAE,CAAC;QACjC,CAAC;QAED,OAAO;IACT,CAAC;IAED,mEAAmE;IACnE,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,EAChD,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,CACvC,CAAC;IAEF,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,sBAAsB,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,kBAAkB,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,MAAM,mBAAmB,EAAE,CAAC;AAC9B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"apply.d.mts","sourceRoot":"","sources":["../../../src/github/repository/apply.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAqBvB,eAAO,MAAM,uBAAuB,QAAa,OAAO,CAAC,IAAI,CA4D5D,CAAC"}
1
+ {"version":3,"file":"apply.d.mts","sourceRoot":"","sources":["../../../src/github/repository/apply.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAoBvB,eAAO,MAAM,uBAAuB,QAAa,OAAO,CAAC,IAAI,CAoD5D,CAAC"}
@@ -7,10 +7,8 @@ import * as t from 'ts-fortress';
7
7
  import { formatUncommittedFiles, isDirectlyExecuted, Result, } from 'ts-repo-utils';
8
8
  import { repositorySettingsDir, settingsJsonName } from '../constants.mjs';
9
9
  import { getRepositorySettings, updateRepository } from './api/index.mjs';
10
- import { backupRepositorySettings } from './backup.mjs';
11
10
  import { repositoryKeysToPick, RepositoryPicked, } from './constants.mjs';
12
11
  export const applyRepositorySettings = async () => {
13
- await backupRepositorySettings(false);
14
12
  const settings = await readSettings();
15
13
  await updateRepository({
16
14
  payload: {
@@ -48,8 +46,6 @@ export const applyRepositorySettings = async () => {
48
46
  const str = JSON.stringify(Obj.pick(repositorySettings, repositoryKeysToPick), undefined, 2);
49
47
 
50
48
  await fs.writeFile(path.resolve(repositorySettingsDir, settingsJsonName), str);
51
-
52
- await fs.writeFile(path.resolve(repositorySettingsDir, 'bk', settingsJsonName), str);
53
49
  await formatUncommittedFiles();
54
50
  }
55
51
  };
@@ -1 +1 @@
1
- {"version":3,"file":"apply.mjs","sourceRoot":"","sources":["../../../src/github/repository/apply.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply.mjs","sourceRoot":"","sources":["../../../src/github/repository/apply.mts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"backup.d.mts","sourceRoot":"","sources":["../../../src/github/repository/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAevB,eAAO,MAAM,wBAAwB,SAC9B,OAAO,KACX,OAAO,CAAC,IAAI,CAkBd,CAAC"}
1
+ {"version":3,"file":"backup.d.mts","sourceRoot":"","sources":["../../../src/github/repository/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAUvB,eAAO,MAAM,wBAAwB,SAC9B,OAAO,KACX,OAAO,CAAC,IAAI,CAkBd,CAAC"}
@@ -3,16 +3,16 @@ import 'dotenv/config';
3
3
  import * as fs from 'node:fs/promises';
4
4
  import * as path from 'node:path';
5
5
  import { Obj } from 'ts-data-forge';
6
- import { formatUncommittedFiles, isDirectlyExecuted, makeEmptyDir, } from 'ts-repo-utils';
6
+ import { formatUncommittedFiles, isDirectlyExecuted } from 'ts-repo-utils';
7
+ import { clearJsonFilesIn } from '../clear-json-files.mjs';
7
8
  import { repositorySettingsDir, settingsJsonName } from '../constants.mjs';
8
9
  import { getRepositorySettings } from './api/index.mjs';
9
10
  import { repositoryKeysToPick } from './constants.mjs';
10
- const backupDir = path.resolve(repositorySettingsDir, './bk');
11
11
  export const backupRepositorySettings = async (fmt = true) => {
12
- await makeEmptyDir(backupDir);
13
12
  const repositorySettings = await getRepositorySettings();
13
+ await clearJsonFilesIn(repositorySettingsDir);
14
14
 
15
- await fs.writeFile(path.resolve(backupDir, settingsJsonName), JSON.stringify(Obj.pick(repositorySettings, repositoryKeysToPick), undefined, 2));
15
+ await fs.writeFile(path.resolve(repositorySettingsDir, settingsJsonName), JSON.stringify(Obj.pick(repositorySettings, repositoryKeysToPick), undefined, 2));
16
16
  if (fmt) {
17
17
  await formatUncommittedFiles();
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"backup.mjs","sourceRoot":"","sources":["../../../src/github/repository/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAE9D,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC3C,GAAG,GAAY,IAAI,EACJ,EAAE;IACjB,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;IAE9B,MAAM,kBAAkB,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAEzD,mEAAmE;IACnE,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,gBAAgB,CAAC,EACzC,IAAI,CAAC,SAAS,CACZ,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,EAClD,SAAS,EACT,CAAC,CACF,CACF,CAAC;IAEF,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,sBAAsB,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,kBAAkB,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,MAAM,wBAAwB,EAAE,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"backup.mjs","sourceRoot":"","sources":["../../../src/github/repository/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC3C,GAAG,GAAY,IAAI,EACJ,EAAE;IACjB,MAAM,kBAAkB,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAEzD,MAAM,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;IAE9C,mEAAmE;IACnE,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,gBAAgB,CAAC,EACrD,IAAI,CAAC,SAAS,CACZ,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,EAClD,SAAS,EACT,CAAC,CACF,CACF,CAAC;IAEF,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,sBAAsB,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,kBAAkB,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,MAAM,wBAAwB,EAAE,CAAC;AACnC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"apply.d.mts","sourceRoot":"","sources":["../../../src/github/ruleset/apply.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAmBvB,eAAO,MAAM,aAAa,QAAa,OAAO,CAAC,IAAI,CAiElD,CAAC"}
1
+ {"version":3,"file":"apply.d.mts","sourceRoot":"","sources":["../../../src/github/ruleset/apply.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAevB,eAAO,MAAM,aAAa,QAAa,OAAO,CAAC,IAAI,CA6DlD,CAAC"}
@@ -1,20 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
  import 'dotenv/config';
3
3
  import * as fs from 'node:fs/promises';
4
- import * as path from 'node:path';
5
4
  import { Obj } from 'ts-data-forge';
6
5
  import { formatUncommittedFiles, isDirectlyExecuted } from 'ts-repo-utils';
7
6
  import { rulesetsDir } from '../constants.mjs';
7
+ import { settingsFilePath } from '../settings-file-path.mjs';
8
8
  import { createRuleset, getAllRulesets, getRuleset, updateRuleset, } from './api/index.mjs';
9
- import { backupRulesets } from './backup.mjs';
10
9
  import { rulesetKeysToPick } from './constants.mjs';
11
- import { readRulesetBackupFiles, readRulesetFiles, } from './read-rule-set-contents.mjs';
10
+ import { readRulesetFiles } from './read-rule-set-contents.mjs';
12
11
  export const applyRulesets = async () => {
13
- await backupRulesets(false);
14
12
  const rulesets = await readRulesetFiles();
15
- const backupIds = await readRulesetBackupFiles().then((rs) => new Set(rs.map((r) => r.id)));
16
- const rulesetsToUpdate = rulesets.filter((r) => backupIds.has(r.id));
17
- const rulesetsToCreate = rulesets.filter((r) => !backupIds.has(r.id));
13
+
14
+
15
+
16
+ const existingIds = await getAllRulesets().then((rs) => new Set(rs.map((r) => r.id)));
17
+ const rulesetsToUpdate = rulesets.filter((r) => existingIds.has(r.id));
18
+ const rulesetsToCreate = rulesets.filter((r) => !existingIds.has(r.id));
18
19
  for (const ruleset of rulesetsToUpdate) {
19
20
  await updateRuleset({
20
21
  rulesetId: ruleset.id,
@@ -47,9 +48,8 @@ export const applyRulesets = async () => {
47
48
  const content = await getRuleset(rule.id);
48
49
  const str = JSON.stringify(Obj.pick(content, rulesetKeysToPick), undefined, 2);
49
50
 
50
- await fs.writeFile(path.resolve(rulesetsDir, `${rule.name}.json`), str);
51
51
 
52
- await fs.writeFile(path.resolve(rulesetsDir, `./bk/${rule.name}.json`), str);
52
+ await fs.writeFile(settingsFilePath(rulesetsDir, rule.name), str);
53
53
  }
54
54
  await formatUncommittedFiles();
55
55
  }
@@ -1 +1 @@
1
- {"version":3,"file":"apply.mjs","sourceRoot":"","sources":["../../../src/github/ruleset/apply.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply.mjs","sourceRoot":"","sources":["../../../src/github/ruleset/apply.mts"],"names":[],"mappings":"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"}
@@ -1,4 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import 'dotenv/config';
3
+ /**
4
+ * ruleset の現在値を宣言ファイルへ撮り直す。
5
+ *
6
+ * 先に直下の `*.json` を消してから書くので、撮り直したあとにそこに在るものが
7
+ * live から取れたものそのものになる。取れなかった ruleset は `git status` に
8
+ * 削除として現れる。理由は {@link clearJsonFilesIn} を参照。
9
+ */
3
10
  export declare const backupRulesets: (fmt?: boolean) => Promise<void>;
4
11
  //# sourceMappingURL=backup.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"backup.d.mts","sourceRoot":"","sources":["../../../src/github/ruleset/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAevB,eAAO,MAAM,cAAc,SAAe,OAAO,KAAU,OAAO,CAAC,IAAI,CAkBtE,CAAC"}
1
+ {"version":3,"file":"backup.d.mts","sourceRoot":"","sources":["../../../src/github/ruleset/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAUvB;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,SAAe,OAAO,KAAU,OAAO,CAAC,IAAI,CA0BtE,CAAC"}
@@ -1,20 +1,33 @@
1
1
  #!/usr/bin/env node
2
2
  import 'dotenv/config';
3
3
  import * as fs from 'node:fs/promises';
4
- import * as path from 'node:path';
5
4
  import { Obj } from 'ts-data-forge';
6
- import { formatUncommittedFiles, isDirectlyExecuted, makeEmptyDir, } from 'ts-repo-utils';
5
+ import { formatUncommittedFiles, isDirectlyExecuted } from 'ts-repo-utils';
6
+ import { clearJsonFilesIn } from '../clear-json-files.mjs';
7
7
  import { rulesetsDir } from '../constants.mjs';
8
+ import { settingsFilePath } from '../settings-file-path.mjs';
8
9
  import { getAllRulesets, getRuleset } from './api/index.mjs';
9
10
  import { rulesetKeysToPick } from './constants.mjs';
10
- const backupDir = path.resolve(rulesetsDir, './bk');
11
+
12
+
13
+
14
+
15
+
16
+
17
+
11
18
  export const backupRulesets = async (fmt = true) => {
12
- await makeEmptyDir(backupDir);
13
19
  const rulesetsResult = await getAllRulesets();
14
- for (const rule of rulesetsResult) {
15
- const content = await getRuleset(rule.id);
16
20
 
17
- await fs.writeFile(path.resolve(backupDir, `${rule.name}.json`), JSON.stringify(Obj.pick(content, rulesetKeysToPick), undefined, 2));
21
+
22
+ const contents = await Promise.all(rulesetsResult.map(async (rule) => ({
23
+ name: rule.name,
24
+ content: await getRuleset(rule.id),
25
+ })));
26
+ await clearJsonFilesIn(rulesetsDir);
27
+ for (const { name, content } of contents) {
28
+
29
+
30
+ await fs.writeFile(settingsFilePath(rulesetsDir, name), JSON.stringify(Obj.pick(content, rulesetKeysToPick), undefined, 2));
18
31
  }
19
32
  if (fmt) {
20
33
  await formatUncommittedFiles();
@@ -1 +1 @@
1
- {"version":3,"file":"backup.mjs","sourceRoot":"","sources":["../../../src/github/ruleset/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAEpD,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,GAAG,GAAY,IAAI,EAAiB,EAAE;IACzE,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;IAE9B,MAAM,cAAc,GAAG,MAAM,cAAc,EAAE,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE1C,mEAAmE;QACnE,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,IAAI,OAAO,CAAC,EAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CACnE,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,sBAAsB,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,kBAAkB,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"backup.mjs","sourceRoot":"","sources":["../../../src/github/ruleset/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,GAAG,GAAY,IAAI,EAAiB,EAAE;IACzE,MAAM,cAAc,GAAG,MAAM,cAAc,EAAE,CAAC;IAE9C,sCAAsC;IACtC,mBAAmB;IACnB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;KACnC,CAAC,CAAC,CACJ,CAAC;IAEF,MAAM,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAEpC,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,QAAQ,EAAE,CAAC;QACzC,sDAAsD;QACtD,mEAAmE;QACnE,MAAM,EAAE,CAAC,SAAS,CAChB,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,EACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CACnE,CAAC;IACJ,CAAC;IAED,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,sBAAsB,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,kBAAkB,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC"}
@@ -1,4 +1,3 @@
1
1
  import { RulesetPicked } from './constants.mjs';
2
2
  export declare const readRulesetFiles: () => Promise<readonly RulesetPicked[]>;
3
- export declare const readRulesetBackupFiles: () => Promise<readonly RulesetPicked[]>;
4
3
  //# sourceMappingURL=read-rule-set-contents.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read-rule-set-contents.d.mts","sourceRoot":"","sources":["../../../src/github/ruleset/read-rule-set-contents.mts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,SAAS,aAAa,EAAE,CAChD,CAAC;AAE3B,eAAO,MAAM,sBAAsB,QAAa,OAAO,CACrD,SAAS,aAAa,EAAE,CACyB,CAAC"}
1
+ {"version":3,"file":"read-rule-set-contents.d.mts","sourceRoot":"","sources":["../../../src/github/ruleset/read-rule-set-contents.mts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,SAAS,aAAa,EAAE,CAChD,CAAC"}
@@ -5,7 +5,6 @@ import { isDirectlyExecuted, Result } from 'ts-repo-utils';
5
5
  import { rulesetsDir } from '../constants.mjs';
6
6
  import { RulesetPicked } from './constants.mjs';
7
7
  export const readRulesetFiles = async () => readFilesIn(rulesetsDir);
8
- export const readRulesetBackupFiles = async () => readFilesIn(path.resolve(rulesetsDir, './bk'));
9
8
  const readFilesIn = async (dir) => {
10
9
 
11
10
  const files = await fs.readdir(dir, {
@@ -1 +1 @@
1
- {"version":3,"file":"read-rule-set-contents.mjs","sourceRoot":"","sources":["../../../src/github/ruleset/read-rule-set-contents.mts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAAuC,EAAE,CAC5E,WAAW,CAAC,WAAW,CAAC,CAAC;AAE3B,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,IAEzC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;AAEpD,MAAM,WAAW,GAAG,KAAK,EAAE,GAAW,EAAqC,EAAE;IAC3E,mEAAmE;IACnE,MAAM,KAAK,GAA8B,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;QAC7D,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAsB,MAAM,OAAO,CAAC,GAAG,CAC9D,KAAK;SACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;IACT,mEAAmE;IACnE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;QACrC,QAAQ,EAAE,MAAM;KACjB,CAAC,CACH,CACJ,CAAC;IAEF,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACzD,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CACzC,CAAC;IAEF,MAAM,UAAU,GAAoB,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,IAAI,kBAAkB,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,MAAM,gBAAgB,EAAE,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"read-rule-set-contents.mjs","sourceRoot":"","sources":["../../../src/github/ruleset/read-rule-set-contents.mts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAAuC,EAAE,CAC5E,WAAW,CAAC,WAAW,CAAC,CAAC;AAE3B,MAAM,WAAW,GAAG,KAAK,EAAE,GAAW,EAAqC,EAAE;IAC3E,mEAAmE;IACnE,MAAM,KAAK,GAA8B,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;QAC7D,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC;IAEH,MAAM,mBAAmB,GAAsB,MAAM,OAAO,CAAC,GAAG,CAC9D,KAAK;SACF,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;IACT,mEAAmE;IACnE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE;QACrC,QAAQ,EAAE,MAAM;KACjB,CAAC,CACH,CACJ,CAAC;IAEF,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACzD,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CACzC,CAAC;IAEF,MAAM,UAAU,GAAoB,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;QAClC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,IAAI,kBAAkB,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,MAAM,gBAAgB,EAAE,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * `dir` の直下の `<name>.json` を指すパスを返す。ファイル名にできない名前は
3
+ * 拒否する。
4
+ *
5
+ * environment 名と ruleset 名は GitHub API が返す素の文字列で、パス片として
6
+ * 使えることは何も保証していない。区切りを含む名前をそのまま結合すると、
7
+ * 書き込み先が `dir` の外 — GitHub の現在値と突き合わせる宣言ファイルが
8
+ * 置いてある場所 — へ出てしまう。
9
+ *
10
+ * 正規化ではなく拒否にしてあるのは、そういう名前が来たこと自体が異常の証拠だ
11
+ * からで、黙って書き換えると何が起きていたのかが分からなくなる。
12
+ */
13
+ export declare const settingsFilePath: (dir: string, name: string) => string;
14
+ //# sourceMappingURL=settings-file-path.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-file-path.d.mts","sourceRoot":"","sources":["../../src/github/settings-file-path.mts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,QAAS,MAAM,QAAQ,MAAM,KAAG,MAsB5D,CAAC"}
@@ -0,0 +1,41 @@
1
+ import * as path from 'node:path';
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+ export const settingsFilePath = (dir, name) => {
15
+ if (!isUsableAsFileName(name)) {
16
+ throw new Error([
17
+ `ファイル名にできない名前です: ${JSON.stringify(name)}。`,
18
+ `${dir} の外へ書き込もうとしている可能性があります。`,
19
+ ].join('\n'));
20
+ }
21
+ const resolvedDir = path.resolve(dir);
22
+ const resolved = path.resolve(resolvedDir, `${name}.json`);
23
+
24
+ if (!resolved.startsWith(resolvedDir + path.sep)) {
25
+ throw new Error(`書き込み先が ${resolvedDir} の外を指しています: ${resolved}`);
26
+ }
27
+ return resolved;
28
+ };
29
+
30
+
31
+
32
+
33
+
34
+
35
+ const isUsableAsFileName = (name) => name !== '' &&
36
+ name !== '.' &&
37
+ name !== '..' &&
38
+ !name.includes('/') &&
39
+ !name.includes('\\') &&
40
+ !name.includes('\u{0}');
41
+ //# sourceMappingURL=settings-file-path.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-file-path.mjs","sourceRoot":"","sources":["../../src/github/settings-file-path.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,IAAY,EAAU,EAAE;IACpE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb;YACE,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG;YAC1C,GAAG,GAAG,yBAAyB;SAChC,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAE3D,mCAAmC;IACnC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CACb,UAAU,WAAW,eAAe,QAAQ,EAAE,CAC/C,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAW,EAAE,CACnD,IAAI,KAAK,EAAE;IACX,IAAI,KAAK,GAAG;IACZ,IAAI,KAAK,IAAI;IACb,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;IACnB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IACpB,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-repo-variables.d.mts","sourceRoot":"","sources":["../../../../src/github/variables/api/list-repo-variables.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAIlD,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAChD,YAAY,CACV;IACE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,EAAE,CACJ,CAaF,CAAC"}
1
+ {"version":3,"file":"list-repo-variables.d.mts","sourceRoot":"","sources":["../../../../src/github/variables/api/list-repo-variables.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAIlD,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAChD,YAAY,CACV;IACE,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,EAAE,CACJ,CAeF,CAAC"}
@@ -7,6 +7,8 @@ export const listRepoVariables = async () => {
7
7
  repo: REPO,
8
8
  headers: octokitHeaders,
9
9
  });
10
- return result.data.variables;
10
+
11
+
12
+ return result.data.variables.toSorted((a, b) => a.name.localeCompare(b.name));
11
13
  };
12
14
  //# sourceMappingURL=list-repo-variables.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"list-repo-variables.mjs","sourceRoot":"","sources":["../../../../src/github/variables/api/list-repo-variables.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,IASpC,EAAE;IACF,oGAAoG;IACpG,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAClC,6CAAoE,EACpE;QACE,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,cAAc;KACxB,CACF,CAAC;IAEF,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AAC/B,CAAC,CAAC"}
1
+ {"version":3,"file":"list-repo-variables.mjs","sourceRoot":"","sources":["../../../../src/github/variables/api/list-repo-variables.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,IASpC,EAAE;IACF,oGAAoG;IACpG,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAClC,6CAAoE,EACpE;QACE,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,cAAc;KACxB,CACF,CAAC;IAEF,oDAAoD;IACpD,qCAAqC;IACrC,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAChF,CAAC,CAAC"}
@@ -1,4 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import 'dotenv/config';
3
+ /**
4
+ * `repo-settings/variables/settings.json` を Settings > Secrets and variables >
5
+ * Actions > Variables に反映する。
6
+ *
7
+ * ruleset や environment と同じく、**宣言に無い変数は消さない。** 消したい
8
+ * ときは宣言から外したうえで GitHub 側でも消す。 apply が片付けてしまうと、
9
+ * 誰かが GUI で足したものが「いつの間にか無くなる」ことになり、drift 検査が
10
+ * 報せるという見え方が働かなくなる。
11
+ */
3
12
  export declare const applyVariables: () => Promise<void>;
4
13
  //# sourceMappingURL=apply.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply.d.mts","sourceRoot":"","sources":["../../../src/github/variables/apply.mts"],"names":[],"mappings":";AAGA,OAAO,eAAe,CAAC;AAQvB,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,IAAI,CA6BnD,CAAC"}
1
+ {"version":3,"file":"apply.d.mts","sourceRoot":"","sources":["../../../src/github/variables/apply.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAgBvB;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,QAAa,OAAO,CAAC,IAAI,CAqBnD,CAAC"}
@@ -1,31 +1,45 @@
1
1
  #!/usr/bin/env node
2
-
3
2
  import 'dotenv/config';
4
- import { isDirectlyExecuted } from 'ts-repo-utils';
3
+ import * as fs from 'node:fs/promises';
4
+ import * as path from 'node:path';
5
+ import * as t from 'ts-fortress';
6
+ import { isDirectlyExecuted, Result } from 'ts-repo-utils';
7
+ import { settingsJsonName, variablesDir } from '../constants.mjs';
5
8
  import { createRepoVariable, listRepoVariables, updateRepoVariable, } from './api/index.mjs';
9
+ import { assertVariableNamesAreValid, RepositoryVariables, } from './constants.mjs';
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
6
19
  export const applyVariables = async () => {
7
- const variables = [
8
- {
20
+ const variables = await readSettings();
21
+
22
+ assertVariableNamesAreValid(variables);
23
+ const existing = await listRepoVariables().then((vs) => new Set(vs.map((v) => v.name)));
24
+ for (const [name, value] of Object.entries(variables)) {
25
+ await (existing.has(name)
26
+ ? updateRepoVariable({ name, value })
27
+ : createRepoVariable({ name, value }));
28
+ }
9
29
 
10
30
 
11
- name: 'REPO_SETTINGS_BOT_CLIENT_ID',
12
- value: 'Iv23ctr4Lq9H3wOYRQrD',
13
- },
14
- {
15
31
 
16
32
 
17
33
 
34
+ };
35
+ const readSettings = async () => {
18
36
 
19
- name: 'REPO_AUTOMATION_BOT_CLIENT_ID',
20
- value: 'Iv23lilpiDh0twq2PErv',
21
- },
22
- ];
23
- const variableListSaved = await listRepoVariables();
24
- const variablesSaved = new Set(variableListSaved.map((v) => v.name));
25
- for (const variable of variables) {
26
- const found = variablesSaved.has(variable.name);
27
- await (found ? updateRepoVariable(variable) : createRepoVariable(variable));
37
+ const settingsText = await fs.readFile(path.resolve(variablesDir, settingsJsonName), { encoding: 'utf8' });
38
+ const validationResult = RepositoryVariables.validate(JSON.parse(settingsText));
39
+ if (Result.isErr(validationResult)) {
40
+ throw new Error(t.validationErrorsToMessages(validationResult.value).join('\n'));
28
41
  }
42
+ return validationResult.value;
29
43
  };
30
44
  if (isDirectlyExecuted(import.meta.url)) {
31
45
  await applyVariables();
@@ -1 +1 @@
1
- {"version":3,"file":"apply.mjs","sourceRoot":"","sources":["../../../src/github/variables/apply.mts"],"names":[],"mappings":";AAEA,sBAAsB;AACtB,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,IAAmB,EAAE;IACtD,MAAM,SAAS,GAAG;QAChB;YACE,8CAA8C;YAC9C,mDAAmD;YACnD,IAAI,EAAE,6BAA6B;YACnC,KAAK,EAAE,sBAAsB;SAC9B;QACD;YACE,gDAAgD;YAChD,iEAAiE;YACjE,kDAAkD;YAClD,MAAM;YACN,IAAI,EAAE,+BAA+B;YACrC,KAAK,EAAE,sBAAsB;SAC9B;KACO,CAAC;IAEX,MAAM,iBAAiB,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAEpD,MAAM,cAAc,GAAwB,IAAI,GAAG,CACjD,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACrC,CAAC;IAEF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEhD,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,kBAAkB,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"apply.mjs","sourceRoot":"","sources":["../../../src/github/variables/apply.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,IAAmB,EAAE;IACtD,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAC;IAEvC,sBAAsB;IACtB,2BAA2B,CAAC,SAAS,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAwB,MAAM,iBAAiB,EAAE,CAAC,IAAI,CAClE,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CACvC,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACtD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YACvB,CAAC,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACrC,CAAC,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,iDAAiD;IACjD,gDAAgD;IAChD,sCAAsC;IACtC,4CAA4C;IAC5C,QAAQ;AACV,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,IAAkC,EAAE;IAC5D,mEAAmE;IACnE,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,QAAQ,CACpC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAC5C,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;IAEF,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,QAAQ,CACnD,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CACzB,CAAC;IAEF,IAAI,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,CAAC,CAAC,0BAA0B,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAChE,CAAC;IACJ,CAAC;IAED,OAAO,gBAAgB,CAAC,KAAK,CAAC;AAChC,CAAC,CAAC;AAEF,IAAI,kBAAkB,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+ import 'dotenv/config';
3
+ import { listRepoVariables } from './api/index.mjs';
4
+ import { type RepositoryVariables } from './constants.mjs';
5
+ /**
6
+ * repository variable の現在値を宣言ファイルへ撮り直す。
7
+ *
8
+ * 宣言していないものも含めて live にあるものを全部書く。 backup は「いま何が
9
+ * あるか」を写す操作なので、 GUI で足された変数もここで宣言に入る。要らない
10
+ * ものは撮り直したあとに宣言から外し、 GitHub 側でも消す。
11
+ */
12
+ export declare const backupVariables: (fmt?: boolean) => Promise<void>;
13
+ /**
14
+ * API の配列を `settings.json` と同じ record に畳む。
15
+ *
16
+ * `created_at` / `updated_at` はここで落ちる。値が変わっていなくても動くので、
17
+ * 残すと宣言ファイルが毎日変わり、ドリフト検査が本当の変更を報せなくなる。
18
+ */
19
+ export declare const toDeclaration: (variables: Awaited<ReturnType<typeof listRepoVariables>>) => RepositoryVariables;
20
+ //# sourceMappingURL=backup.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.d.mts","sourceRoot":"","sources":["../../../src/github/variables/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAMvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,SAAe,OAAO,KAAU,OAAO,CAAC,IAAI,CAcvE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,cACb,OAAO,CAAC,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,KACvD,mBACoE,CAAC"}
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ import 'dotenv/config';
3
+ import * as fs from 'node:fs/promises';
4
+ import * as path from 'node:path';
5
+ import { formatUncommittedFiles, isDirectlyExecuted } from 'ts-repo-utils';
6
+ import { clearJsonFilesIn } from '../clear-json-files.mjs';
7
+ import { settingsJsonName, variablesDir } from '../constants.mjs';
8
+ import { listRepoVariables } from './api/index.mjs';
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+ export const backupVariables = async (fmt = true) => {
17
+ const variables = await listRepoVariables();
18
+ await clearJsonFilesIn(variablesDir);
19
+
20
+ await fs.writeFile(path.resolve(variablesDir, settingsJsonName), JSON.stringify(toDeclaration(variables), undefined, 2));
21
+ if (fmt) {
22
+ await formatUncommittedFiles();
23
+ }
24
+ };
25
+
26
+
27
+
28
+
29
+
30
+
31
+ export const toDeclaration = (variables) => Object.fromEntries(variables.map(({ name, value }) => [name, value]));
32
+ if (isDirectlyExecuted(import.meta.url)) {
33
+ await backupVariables();
34
+ }
35
+ //# sourceMappingURL=backup.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.mjs","sourceRoot":"","sources":["../../../src/github/variables/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,GAAG,GAAY,IAAI,EAAiB,EAAE;IAC1E,MAAM,SAAS,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAE5C,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAErC,mEAAmE;IACnE,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAC5C,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CACvD,CAAC;IAEF,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,sBAAsB,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,SAAwD,EACnC,EAAE,CACvB,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAExE,IAAI,kBAAkB,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,MAAM,eAAe,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,65 @@
1
+ import * as t from 'ts-fortress';
2
+ /**
3
+ * `repo-settings/variables/settings.json` の型。
4
+ *
5
+ * Settings > Secrets and variables > Actions > Variables に対応する
6
+ * (`GET|POST /repos/{owner}/{repo}/actions/variables`,
7
+ * `PATCH /repos/{owner}/{repo}/actions/variables/{name}`)。
8
+ *
9
+ * 変数名をキー、値を値にした素の record にしてある。 API が返す配列
10
+ * (`{ name, value, created_at, updated_at }[]`) をそのまま写さないのは、
11
+ * `created_at` / `updated_at` が値の変化なしに動くためで、宣言に入れると
12
+ * 毎日ドリフトとして出てしまう。ここで持つのは宣言できるものだけ。
13
+ *
14
+ * **ここに秘密を書かないこと。** repository variable は API でも Actions の
15
+ * ログでも平文で読める。秘密は secret 側で、そちらはこのツールの管理外にある。
16
+ */
17
+ export declare const RepositoryVariables: Readonly<{
18
+ typeName: string;
19
+ defaultValue: {
20
+ readonly [x: string]: string;
21
+ };
22
+ is: (a: unknown) => a is {
23
+ readonly [x: string]: string;
24
+ };
25
+ assertIs: (a: unknown) => asserts a is {
26
+ readonly [x: string]: string;
27
+ };
28
+ cast: (a: unknown) => {
29
+ readonly [x: string]: string;
30
+ };
31
+ fill: (a: unknown) => {
32
+ readonly [x: string]: string;
33
+ };
34
+ prune: <B extends {
35
+ readonly [x: string]: string;
36
+ }>(a: B) => {
37
+ readonly [x: string]: string;
38
+ };
39
+ validate: (a: unknown) => t.Result<{
40
+ readonly [x: string]: string;
41
+ }, readonly Readonly<{
42
+ path: readonly string[];
43
+ actualValue: unknown;
44
+ expectedType: string;
45
+ typeName: string;
46
+ details?: t.ValidationErrorDetails | undefined;
47
+ }>[]>;
48
+ optional?: true;
49
+ }>;
50
+ export type RepositoryVariables = t.TypeOf<typeof RepositoryVariables>;
51
+ /**
52
+ * GitHub が受け付けない変数名を、送る前にすべて挙げて落とす。
53
+ *
54
+ * 名前は `PATCH .../actions/variables/{name}` のパスに入る。 octokit が URL
55
+ * エンコードするので注入にはならないが、弾かれる名前は 422 になり、それが
56
+ * 起きるのは**何本か書き込んだ後**である。 environments の `assertConsistent`
57
+ * と同じ理由でここに置いてある — 1 本目を送る前に全部の名前を見ておけば、
58
+ * この種の間違いで中途半端に適用された状態にはならない。
59
+ *
60
+ * 規則は GitHub の documentation のとおり: 英数字と `_` のみ、先頭に数字は
61
+ * 不可、`GITHUB_` 始まりは予約。名前の大文字小文字は区別されないので、
62
+ * 予約接頭辞の判定も区別しない。
63
+ */
64
+ export declare const assertVariableNamesAreValid: (variables: RepositoryVariables) => void;
65
+ //# sourceMappingURL=constants.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../../../src/github/variables/constants.mts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AAEjC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAE9B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEvE;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,2BAA2B,cAC3B,mBAAmB,KAC7B,IAeF,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { Arr } from 'ts-data-forge';
2
+ import * as t from 'ts-fortress';
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+ export const RepositoryVariables = t.keyValueRecord(t.string(), t.string(), {
19
+ typeName: 'RepositoryVariables',
20
+ });
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+ export const assertVariableNamesAreValid = (variables) => {
35
+ const offenders = Object.keys(variables).filter((name) => !isValidVariableName(name));
36
+ if (Arr.isNonEmpty(offenders)) {
37
+ throw new Error([
38
+ `repository variable の名前として使えないものがあります: ${offenders
39
+ .map((name) => JSON.stringify(name))
40
+ .join(', ')}。`,
41
+ '英数字と "_" のみが使え、先頭に数字は置けず、"GITHUB_" 始まりは予約されています。',
42
+ ].join('\n'));
43
+ }
44
+ };
45
+
46
+ const variableNamePattern = /^[A-Za-z_][A-Za-z0-9_]*$/u;
47
+ const isValidVariableName = (name) => variableNamePattern.test(name) && !name.toUpperCase().startsWith('GITHUB_');
48
+ //# sourceMappingURL=constants.mjs.map