github-settings-as-code 3.1.0 → 4.0.0

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 (170) hide show
  1. package/README.md +61 -39
  2. package/dist/cmd/repo-settings.mjs +17 -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 +3 -0
  17. package/dist/github/constants.d.mts.map +1 -1
  18. package/dist/github/constants.mjs +3 -0
  19. package/dist/github/constants.mjs.map +1 -1
  20. package/dist/github/environments/api/get-environments.d.mts +16 -0
  21. package/dist/github/environments/api/get-environments.d.mts.map +1 -0
  22. package/dist/github/environments/api/get-environments.mjs +98 -0
  23. package/dist/github/environments/api/get-environments.mjs.map +1 -0
  24. package/dist/github/environments/api/index.d.mts +3 -0
  25. package/dist/github/environments/api/index.d.mts.map +1 -0
  26. package/dist/github/environments/api/index.mjs +3 -0
  27. package/dist/github/environments/api/index.mjs.map +1 -0
  28. package/dist/github/environments/api/set-environment.d.mts +10 -0
  29. package/dist/github/environments/api/set-environment.d.mts.map +1 -0
  30. package/dist/github/environments/api/set-environment.mjs +73 -0
  31. package/dist/github/environments/api/set-environment.mjs.map +1 -0
  32. package/dist/github/environments/apply.d.mts +11 -0
  33. package/dist/github/environments/apply.d.mts.map +1 -0
  34. package/dist/github/environments/apply.mjs +63 -0
  35. package/dist/github/environments/apply.mjs.map +1 -0
  36. package/dist/github/environments/backup.d.mts +10 -0
  37. package/dist/github/environments/backup.d.mts.map +1 -0
  38. package/dist/github/environments/backup.mjs +30 -0
  39. package/dist/github/environments/backup.mjs.map +1 -0
  40. package/dist/github/environments/constants.d.mts +354 -0
  41. package/dist/github/environments/constants.d.mts.map +1 -0
  42. package/dist/github/environments/constants.mjs +62 -0
  43. package/dist/github/environments/constants.mjs.map +1 -0
  44. package/dist/github/environments/index.d.mts +6 -0
  45. package/dist/github/environments/index.d.mts.map +1 -0
  46. package/dist/github/environments/index.mjs +6 -0
  47. package/dist/github/environments/index.mjs.map +1 -0
  48. package/dist/github/environments/read-environment-contents.d.mts +3 -0
  49. package/dist/github/environments/read-environment-contents.d.mts.map +1 -0
  50. package/dist/github/environments/read-environment-contents.mjs +31 -0
  51. package/dist/github/environments/read-environment-contents.mjs.map +1 -0
  52. package/dist/github/index.d.mts +4 -0
  53. package/dist/github/index.d.mts.map +1 -1
  54. package/dist/github/index.mjs +4 -0
  55. package/dist/github/index.mjs.map +1 -1
  56. package/dist/github/pages/apply.d.mts.map +1 -1
  57. package/dist/github/pages/apply.mjs +0 -2
  58. package/dist/github/pages/apply.mjs.map +1 -1
  59. package/dist/github/pages/backup.d.mts +11 -1
  60. package/dist/github/pages/backup.d.mts.map +1 -1
  61. package/dist/github/pages/backup.mjs +18 -5
  62. package/dist/github/pages/backup.mjs.map +1 -1
  63. package/dist/github/repository/apply.d.mts.map +1 -1
  64. package/dist/github/repository/apply.mjs +0 -4
  65. package/dist/github/repository/apply.mjs.map +1 -1
  66. package/dist/github/repository/backup.d.mts.map +1 -1
  67. package/dist/github/repository/backup.mjs +4 -4
  68. package/dist/github/repository/backup.mjs.map +1 -1
  69. package/dist/github/ruleset/apply.d.mts.map +1 -1
  70. package/dist/github/ruleset/apply.mjs +9 -9
  71. package/dist/github/ruleset/apply.mjs.map +1 -1
  72. package/dist/github/ruleset/backup.d.mts +7 -0
  73. package/dist/github/ruleset/backup.d.mts.map +1 -1
  74. package/dist/github/ruleset/backup.mjs +20 -7
  75. package/dist/github/ruleset/backup.mjs.map +1 -1
  76. package/dist/github/ruleset/read-rule-set-contents.d.mts +0 -1
  77. package/dist/github/ruleset/read-rule-set-contents.d.mts.map +1 -1
  78. package/dist/github/ruleset/read-rule-set-contents.mjs +0 -1
  79. package/dist/github/ruleset/read-rule-set-contents.mjs.map +1 -1
  80. package/dist/github/settings-file-path.d.mts +14 -0
  81. package/dist/github/settings-file-path.d.mts.map +1 -0
  82. package/dist/github/settings-file-path.mjs +41 -0
  83. package/dist/github/settings-file-path.mjs.map +1 -0
  84. package/dist/github/variables/api/list-repo-variables.d.mts.map +1 -1
  85. package/dist/github/variables/api/list-repo-variables.mjs +3 -1
  86. package/dist/github/variables/api/list-repo-variables.mjs.map +1 -1
  87. package/dist/github/variables/apply.d.mts +9 -0
  88. package/dist/github/variables/apply.d.mts.map +1 -1
  89. package/dist/github/variables/apply.mjs +31 -17
  90. package/dist/github/variables/apply.mjs.map +1 -1
  91. package/dist/github/variables/backup.d.mts +20 -0
  92. package/dist/github/variables/backup.d.mts.map +1 -0
  93. package/dist/github/variables/backup.mjs +35 -0
  94. package/dist/github/variables/backup.mjs.map +1 -0
  95. package/dist/github/variables/constants.d.mts +65 -0
  96. package/dist/github/variables/constants.d.mts.map +1 -0
  97. package/dist/github/variables/constants.mjs +48 -0
  98. package/dist/github/variables/constants.mjs.map +1 -0
  99. package/dist/github/variables/index.d.mts +2 -0
  100. package/dist/github/variables/index.d.mts.map +1 -1
  101. package/dist/github/variables/index.mjs +2 -0
  102. package/dist/github/variables/index.mjs.map +1 -1
  103. package/dist/github/vulnerability-alerts/api/get-vulnerability-alerts.d.mts +10 -0
  104. package/dist/github/vulnerability-alerts/api/get-vulnerability-alerts.d.mts.map +1 -0
  105. package/dist/github/vulnerability-alerts/api/get-vulnerability-alerts.mjs +25 -0
  106. package/dist/github/vulnerability-alerts/api/get-vulnerability-alerts.mjs.map +1 -0
  107. package/dist/github/vulnerability-alerts/api/index.d.mts +3 -0
  108. package/dist/github/vulnerability-alerts/api/index.d.mts.map +1 -0
  109. package/dist/github/vulnerability-alerts/api/index.mjs +3 -0
  110. package/dist/github/vulnerability-alerts/api/index.mjs.map +1 -0
  111. package/dist/github/vulnerability-alerts/api/set-vulnerability-alerts.d.mts +10 -0
  112. package/dist/github/vulnerability-alerts/api/set-vulnerability-alerts.d.mts.map +1 -0
  113. package/dist/github/vulnerability-alerts/api/set-vulnerability-alerts.mjs +19 -0
  114. package/dist/github/vulnerability-alerts/api/set-vulnerability-alerts.mjs.map +1 -0
  115. package/dist/github/vulnerability-alerts/apply.d.mts +11 -0
  116. package/dist/github/vulnerability-alerts/apply.d.mts.map +1 -0
  117. package/dist/github/vulnerability-alerts/apply.mjs +45 -0
  118. package/dist/github/vulnerability-alerts/apply.mjs.map +1 -0
  119. package/dist/github/vulnerability-alerts/backup.d.mts +5 -0
  120. package/dist/github/vulnerability-alerts/backup.d.mts.map +1 -0
  121. package/dist/github/vulnerability-alerts/backup.mjs +22 -0
  122. package/dist/github/vulnerability-alerts/backup.mjs.map +1 -0
  123. package/dist/github/vulnerability-alerts/constants.d.mts +72 -0
  124. package/dist/github/vulnerability-alerts/constants.d.mts.map +1 -0
  125. package/dist/github/vulnerability-alerts/constants.mjs +21 -0
  126. package/dist/github/vulnerability-alerts/constants.mjs.map +1 -0
  127. package/dist/github/vulnerability-alerts/index.d.mts +5 -0
  128. package/dist/github/vulnerability-alerts/index.d.mts.map +1 -0
  129. package/dist/github/vulnerability-alerts/index.mjs +5 -0
  130. package/dist/github/vulnerability-alerts/index.mjs.map +1 -0
  131. package/package.json +29 -28
  132. package/src/cmd/repo-settings.mts +22 -2
  133. package/src/github/actions-settings/apply.mts +0 -9
  134. package/src/github/actions-settings/backup.mts +6 -11
  135. package/src/github/actions-settings/constants.mts +1 -1
  136. package/src/github/clear-json-files.mts +31 -0
  137. package/src/github/clear-json-files.test.mts +78 -0
  138. package/src/github/constants.mts +9 -0
  139. package/src/github/environments/api/get-environments.mts +155 -0
  140. package/src/github/environments/api/index.mts +2 -0
  141. package/src/github/environments/api/set-environment.mts +106 -0
  142. package/src/github/environments/apply.mts +82 -0
  143. package/src/github/environments/backup.mts +39 -0
  144. package/src/github/environments/constants.mts +78 -0
  145. package/src/github/environments/index.mts +5 -0
  146. package/src/github/environments/read-environment-contents.mts +49 -0
  147. package/src/github/index.mts +4 -0
  148. package/src/github/pages/apply.mts +0 -6
  149. package/src/github/pages/backup.mts +21 -12
  150. package/src/github/repository/apply.mts +0 -9
  151. package/src/github/repository/backup.mts +5 -10
  152. package/src/github/ruleset/apply.mts +10 -18
  153. package/src/github/ruleset/backup.mts +23 -13
  154. package/src/github/ruleset/read-rule-set-contents.mts +0 -4
  155. package/src/github/ruleset/schema.test.mts +0 -13
  156. package/src/github/settings-file-path.mts +51 -0
  157. package/src/github/settings-file-path.test.mts +70 -0
  158. package/src/github/variables/api/list-repo-variables.mts +3 -1
  159. package/src/github/variables/apply.mts +54 -27
  160. package/src/github/variables/backup.mts +47 -0
  161. package/src/github/variables/constants.mts +61 -0
  162. package/src/github/variables/constants.test.mts +110 -0
  163. package/src/github/variables/index.mts +2 -0
  164. package/src/github/vulnerability-alerts/api/get-vulnerability-alerts.mts +31 -0
  165. package/src/github/vulnerability-alerts/api/index.mts +2 -0
  166. package/src/github/vulnerability-alerts/api/set-vulnerability-alerts.mts +31 -0
  167. package/src/github/vulnerability-alerts/apply.mts +71 -0
  168. package/src/github/vulnerability-alerts/backup.mts +31 -0
  169. package/src/github/vulnerability-alerts/constants.mts +25 -0
  170. package/src/github/vulnerability-alerts/index.mts +4 -0
@@ -0,0 +1,73 @@
1
+ import { octokitHeaders, OWNER, REPO } from '../../constants.mjs';
2
+ import { octokit } from '../../octokit.mjs';
3
+ import { getDeploymentBranchPolicies } from './get-environments.mjs';
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+ export const setEnvironment = async (settings) => {
12
+
13
+ await octokit.request('PUT /repos/{owner}/{repo}/environments/{environment_name}', {
14
+ owner: OWNER,
15
+ repo: REPO,
16
+ environment_name: settings.name,
17
+ headers: octokitHeaders,
18
+ wait_timer: settings.wait_timer,
19
+ prevent_self_review: settings.prevent_self_review,
20
+ reviewers: settings.reviewers.map((reviewer) => ({
21
+ type: reviewer.type,
22
+ id: reviewer.id,
23
+ })),
24
+ deployment_branch_policy: settings.deployment_branch_policy === null
25
+ ? null
26
+ : {
27
+ protected_branches: settings.deployment_branch_policy.protected_branches,
28
+ custom_branch_policies: settings.deployment_branch_policy.custom_branch_policies,
29
+ },
30
+ });
31
+ await setDeploymentBranchPolicies(settings);
32
+ };
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+ const keyOf = (policy) => `${policy.type}:${policy.name}`;
41
+ const setDeploymentBranchPolicies = async (settings) => {
42
+ if (settings.deployment_branch_policy?.custom_branch_policies !== true) {
43
+
44
+ return;
45
+ }
46
+ const current = await getDeploymentBranchPolicies(settings.name);
47
+ const desiredKeys = new Set(settings.deployment_branch_policies.map(keyOf));
48
+ const currentKeys = new Set(current.map(keyOf));
49
+ const toDelete = current.filter((p) => !desiredKeys.has(keyOf(p)));
50
+ const toCreate = settings.deployment_branch_policies.filter((p) => !currentKeys.has(keyOf(p)));
51
+ for (const policy of toDelete) {
52
+
53
+ await octokit.request('DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies/{branch_policy_id}', {
54
+ owner: OWNER,
55
+ repo: REPO,
56
+ environment_name: settings.name,
57
+ branch_policy_id: policy.id,
58
+ headers: octokitHeaders,
59
+ });
60
+ }
61
+ for (const policy of toCreate) {
62
+
63
+ await octokit.request('POST /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies', {
64
+ owner: OWNER,
65
+ repo: REPO,
66
+ environment_name: settings.name,
67
+ headers: octokitHeaders,
68
+ name: policy.name,
69
+ type: policy.type,
70
+ });
71
+ }
72
+ };
73
+ //# sourceMappingURL=set-environment.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-environment.mjs","sourceRoot":"","sources":["../../../../src/github/environments/api/set-environment.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env node
2
+ import 'dotenv/config';
3
+ /**
4
+ * `repo-settings/environments/*.json` を Settings > Environments に反映する。
5
+ *
6
+ * ruleset と同じく、宣言に無い環境は消さない。 GUI で作られたものは drift
7
+ * 検査が報せるのであって、 apply が黙って片付けてしまうと「いつ誰が何を
8
+ * 作ったか」を見る機会がなくなる。
9
+ */
10
+ export declare const applyEnvironments: () => Promise<void>;
11
+ //# sourceMappingURL=apply.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.d.mts","sourceRoot":"","sources":["../../../src/github/environments/apply.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAUvB;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,IAAI,CA4BtD,CAAC"}
@@ -0,0 +1,63 @@
1
+ #!/usr/bin/env node
2
+ import 'dotenv/config';
3
+ import * as fs from 'node:fs/promises';
4
+ import { Arr } from 'ts-data-forge';
5
+ import { formatUncommittedFiles, isDirectlyExecuted } from 'ts-repo-utils';
6
+ import { environmentsDir } from '../constants.mjs';
7
+ import { settingsFilePath } from '../settings-file-path.mjs';
8
+ import { getAllEnvironments, setEnvironment } from './api/index.mjs';
9
+ import { readEnvironmentFiles } from './read-environment-contents.mjs';
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+ export const applyEnvironments = async () => {
18
+ const environments = await readEnvironmentFiles();
19
+ for (const environment of environments) {
20
+ assertConsistent(environment);
21
+ }
22
+ for (const environment of environments) {
23
+ await setEnvironment(environment);
24
+ }
25
+
26
+ {
27
+ const applied = await getAllEnvironments();
28
+ for (const environment of applied) {
29
+ const str = JSON.stringify(environment, undefined, 2);
30
+
31
+
32
+ await fs.writeFile(settingsFilePath(environmentsDir, environment.name), str);
33
+ }
34
+ await formatUncommittedFiles();
35
+ }
36
+ };
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+ const assertConsistent = (environment) => {
45
+ const custom = environment.deployment_branch_policy?.custom_branch_policies === true;
46
+ if (!custom && Arr.isNonEmpty(environment.deployment_branch_policies)) {
47
+ throw new Error([
48
+ `環境 "${environment.name}": deployment_branch_policies が書かれていますが、`,
49
+ 'deployment_branch_policy.custom_branch_policies が true ではありません。',
50
+ 'pattern は "Selected branches and tags" を選んだときにしか効きません。',
51
+ ].join('\n'));
52
+ }
53
+
54
+
55
+
56
+ if (custom && environment.deployment_branch_policy.protected_branches) {
57
+ throw new Error(`環境 "${environment.name}": protected_branches と custom_branch_policies は同時に true にできません。`);
58
+ }
59
+ };
60
+ if (isDirectlyExecuted(import.meta.url)) {
61
+ await applyEnvironments();
62
+ }
63
+ //# sourceMappingURL=apply.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.mjs","sourceRoot":"","sources":["../../../src/github/environments/apply.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,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAErE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,IAAmB,EAAE;IACzD,MAAM,YAAY,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAElD,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAED,0BAA0B;IAC1B,CAAC;QACC,MAAM,OAAO,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAE3C,KAAK,MAAM,WAAW,IAAI,OAAO,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YAEtD,0DAA0D;YAC1D,mEAAmE;YACnE,MAAM,EAAE,CAAC,SAAS,CAChB,gBAAgB,CAAC,eAAe,EAAE,WAAW,CAAC,IAAI,CAAC,EACnD,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,MAAM,sBAAsB,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG,CAAC,WAAgC,EAAQ,EAAE;IAClE,MAAM,MAAM,GACV,WAAW,CAAC,wBAAwB,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAExE,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,0BAA0B,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CACb;YACE,OAAO,WAAW,CAAC,IAAI,0CAA0C;YACjE,iEAAiE;YACjE,wDAAwD;SACzD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,gDAAgD;IAChD,mBAAmB;IACnB,IAAI,MAAM,IAAI,WAAW,CAAC,wBAAwB,CAAC,kBAAkB,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CACb,OAAO,WAAW,CAAC,IAAI,kEAAkE,CAC1F,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,kBAAkB,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACxC,MAAM,iBAAiB,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import 'dotenv/config';
3
+ /**
4
+ * Settings > Environments の現在値を宣言ファイルへ撮り直す。
5
+ *
6
+ * ruleset と同じく、先に直下の `*.json` を消してから書く。理由は
7
+ * {@link clearJsonFilesIn} を参照。
8
+ */
9
+ export declare const backupEnvironments: (fmt?: boolean) => Promise<void>;
10
+ //# sourceMappingURL=backup.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.d.mts","sourceRoot":"","sources":["../../../src/github/environments/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAQvB;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,SACxB,OAAO,KACX,OAAO,CAAC,IAAI,CAiBd,CAAC"}
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import 'dotenv/config';
3
+ import * as fs from 'node:fs/promises';
4
+ import { formatUncommittedFiles, isDirectlyExecuted } from 'ts-repo-utils';
5
+ import { clearJsonFilesIn } from '../clear-json-files.mjs';
6
+ import { environmentsDir } from '../constants.mjs';
7
+ import { settingsFilePath } from '../settings-file-path.mjs';
8
+ import { getAllEnvironments } from './api/index.mjs';
9
+
10
+
11
+
12
+
13
+
14
+
15
+ export const backupEnvironments = async (fmt = true) => {
16
+ const environments = await getAllEnvironments();
17
+ await clearJsonFilesIn(environmentsDir);
18
+ for (const environment of environments) {
19
+
20
+
21
+ await fs.writeFile(settingsFilePath(environmentsDir, environment.name), JSON.stringify(environment, undefined, 2));
22
+ }
23
+ if (fmt) {
24
+ await formatUncommittedFiles();
25
+ }
26
+ };
27
+ if (isDirectlyExecuted(import.meta.url)) {
28
+ await backupEnvironments();
29
+ }
30
+ //# sourceMappingURL=backup.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.mjs","sourceRoot":"","sources":["../../../src/github/environments/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,GAAG,GAAY,IAAI,EACJ,EAAE;IACjB,MAAM,YAAY,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAEhD,MAAM,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAExC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,0DAA0D;QAC1D,mEAAmE;QACnE,MAAM,EAAE,CAAC,SAAS,CAChB,gBAAgB,CAAC,eAAe,EAAE,WAAW,CAAC,IAAI,CAAC,EACnD,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAC1C,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,kBAAkB,EAAE,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,354 @@
1
+ import * as t from 'ts-fortress';
2
+ /**
3
+ * `repo-settings/environments/*.json` の型。
4
+ *
5
+ * Settings > Environments の 1 件に対応する。ファイルは「その環境の望ましい
6
+ * 状態」を丸ごと表しており、 GitHub 側で 2 つに分かれている次の API をまとめて
7
+ * 1 ファイルで管理する:
8
+ *
9
+ * - `PUT /repos/{owner}/{repo}/environments/{environment_name}`
10
+ * - `GET|POST|DELETE /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies`
11
+ *
12
+ * GET が返す `protection_rules` は「有効な保護ルールだけが並ぶ配列」だが、この
13
+ * 型は書き込み側( PUT の body )に合わせた平らな形にしている。往復させる側の
14
+ * 形を正とするほうが、ファイルを読んで何が起きるか分かりやすいため。
15
+ */
16
+ export declare const EnvironmentSettings: Readonly<{
17
+ typeName: string;
18
+ defaultValue: Readonly<{
19
+ deployment_branch_policies: readonly Readonly<{
20
+ name: string;
21
+ type: "branch" | "tag";
22
+ }>[];
23
+ deployment_branch_policy: Readonly<{
24
+ custom_branch_policies: boolean;
25
+ protected_branches: boolean;
26
+ }> | null;
27
+ name: string;
28
+ prevent_self_review: boolean;
29
+ reviewers: readonly Readonly<{
30
+ id: number;
31
+ type: "Team" | "User";
32
+ }>[];
33
+ wait_timer: number;
34
+ }>;
35
+ is: (a: unknown) => a is Readonly<{
36
+ deployment_branch_policies: readonly Readonly<{
37
+ name: string;
38
+ type: "branch" | "tag";
39
+ }>[];
40
+ deployment_branch_policy: Readonly<{
41
+ custom_branch_policies: boolean;
42
+ protected_branches: boolean;
43
+ }> | null;
44
+ name: string;
45
+ prevent_self_review: boolean;
46
+ reviewers: readonly Readonly<{
47
+ id: number;
48
+ type: "Team" | "User";
49
+ }>[];
50
+ wait_timer: number;
51
+ }>;
52
+ assertIs: (a: unknown) => asserts a is Readonly<{
53
+ deployment_branch_policies: readonly Readonly<{
54
+ name: string;
55
+ type: "branch" | "tag";
56
+ }>[];
57
+ deployment_branch_policy: Readonly<{
58
+ custom_branch_policies: boolean;
59
+ protected_branches: boolean;
60
+ }> | null;
61
+ name: string;
62
+ prevent_self_review: boolean;
63
+ reviewers: readonly Readonly<{
64
+ id: number;
65
+ type: "Team" | "User";
66
+ }>[];
67
+ wait_timer: number;
68
+ }>;
69
+ cast: (a: unknown) => Readonly<{
70
+ deployment_branch_policies: readonly Readonly<{
71
+ name: string;
72
+ type: "branch" | "tag";
73
+ }>[];
74
+ deployment_branch_policy: Readonly<{
75
+ custom_branch_policies: boolean;
76
+ protected_branches: boolean;
77
+ }> | null;
78
+ name: string;
79
+ prevent_self_review: boolean;
80
+ reviewers: readonly Readonly<{
81
+ id: number;
82
+ type: "Team" | "User";
83
+ }>[];
84
+ wait_timer: number;
85
+ }>;
86
+ fill: (a: unknown) => Readonly<{
87
+ deployment_branch_policies: readonly Readonly<{
88
+ name: string;
89
+ type: "branch" | "tag";
90
+ }>[];
91
+ deployment_branch_policy: Readonly<{
92
+ custom_branch_policies: boolean;
93
+ protected_branches: boolean;
94
+ }> | null;
95
+ name: string;
96
+ prevent_self_review: boolean;
97
+ reviewers: readonly Readonly<{
98
+ id: number;
99
+ type: "Team" | "User";
100
+ }>[];
101
+ wait_timer: number;
102
+ }>;
103
+ prune: <B extends Readonly<{
104
+ deployment_branch_policies: readonly Readonly<{
105
+ name: string;
106
+ type: "branch" | "tag";
107
+ }>[];
108
+ deployment_branch_policy: Readonly<{
109
+ custom_branch_policies: boolean;
110
+ protected_branches: boolean;
111
+ }> | null;
112
+ name: string;
113
+ prevent_self_review: boolean;
114
+ reviewers: readonly Readonly<{
115
+ id: number;
116
+ type: "Team" | "User";
117
+ }>[];
118
+ wait_timer: number;
119
+ }>>(a: B) => Readonly<{
120
+ deployment_branch_policies: readonly Readonly<{
121
+ name: string;
122
+ type: "branch" | "tag";
123
+ }>[];
124
+ deployment_branch_policy: Readonly<{
125
+ custom_branch_policies: boolean;
126
+ protected_branches: boolean;
127
+ }> | null;
128
+ name: string;
129
+ prevent_self_review: boolean;
130
+ reviewers: readonly Readonly<{
131
+ id: number;
132
+ type: "Team" | "User";
133
+ }>[];
134
+ wait_timer: number;
135
+ }>;
136
+ validate: (a: unknown) => t.Result<Readonly<{
137
+ deployment_branch_policies: readonly Readonly<{
138
+ name: string;
139
+ type: "branch" | "tag";
140
+ }>[];
141
+ deployment_branch_policy: Readonly<{
142
+ custom_branch_policies: boolean;
143
+ protected_branches: boolean;
144
+ }> | null;
145
+ name: string;
146
+ prevent_self_review: boolean;
147
+ reviewers: readonly Readonly<{
148
+ id: number;
149
+ type: "Team" | "User";
150
+ }>[];
151
+ wait_timer: number;
152
+ }>, readonly Readonly<{
153
+ path: readonly string[];
154
+ actualValue: unknown;
155
+ expectedType: string;
156
+ typeName: string;
157
+ details?: t.ValidationErrorDetails | undefined;
158
+ }>[]>;
159
+ optional?: true;
160
+ }> & Readonly<{
161
+ shape: {
162
+ readonly name: t.ConstrainedType<string, Readonly<{
163
+ readonly nonempty: undefined;
164
+ readonly minLength: undefined;
165
+ readonly maxLength: undefined;
166
+ readonly startsWith: undefined;
167
+ readonly endsWith: undefined;
168
+ readonly includes: undefined;
169
+ readonly uppercase: undefined;
170
+ readonly lowercase: undefined;
171
+ readonly regex: undefined;
172
+ }>>;
173
+ /** 「 Wait timer 」。分。 0 なら待たない。 */
174
+ readonly wait_timer: t.ConstrainedType<number, Readonly<{
175
+ readonly finite: undefined;
176
+ readonly int: undefined;
177
+ readonly safeInteger: undefined;
178
+ readonly nonZero: undefined;
179
+ readonly negative: undefined;
180
+ readonly nonNegative: undefined;
181
+ readonly positive: undefined;
182
+ readonly nonPositive: undefined;
183
+ readonly gt: undefined;
184
+ readonly gte: undefined;
185
+ readonly min: undefined;
186
+ readonly lt: undefined;
187
+ readonly lte: undefined;
188
+ readonly max: undefined;
189
+ readonly multipleOf: undefined;
190
+ readonly step: undefined;
191
+ }>>;
192
+ /** 「 Prevent self-review 」。 */
193
+ readonly prevent_self_review: Readonly<{
194
+ typeName: string;
195
+ defaultValue: boolean;
196
+ is: (a: unknown) => a is boolean;
197
+ assertIs: (a: unknown) => asserts a is boolean;
198
+ cast: (a: unknown) => boolean;
199
+ fill: (a: unknown) => boolean;
200
+ prune: <B extends boolean>(a: B) => boolean;
201
+ validate: (a: unknown) => t.Result<boolean, readonly Readonly<{
202
+ path: readonly string[];
203
+ actualValue: unknown;
204
+ expectedType: string;
205
+ typeName: string;
206
+ details?: t.ValidationErrorDetails | undefined;
207
+ }>[]>;
208
+ optional?: true;
209
+ }>;
210
+ /** 「 Required reviewers 」。空配列なら承認は要らない。 */
211
+ readonly reviewers: Readonly<{
212
+ typeName: string;
213
+ defaultValue: readonly Readonly<{
214
+ id: number;
215
+ type: "Team" | "User";
216
+ }>[];
217
+ is: (a: unknown) => a is readonly Readonly<{
218
+ id: number;
219
+ type: "Team" | "User";
220
+ }>[];
221
+ assertIs: (a: unknown) => asserts a is readonly Readonly<{
222
+ id: number;
223
+ type: "Team" | "User";
224
+ }>[];
225
+ cast: (a: unknown) => readonly Readonly<{
226
+ id: number;
227
+ type: "Team" | "User";
228
+ }>[];
229
+ fill: (a: unknown) => readonly Readonly<{
230
+ id: number;
231
+ type: "Team" | "User";
232
+ }>[];
233
+ prune: <B extends readonly Readonly<{
234
+ id: number;
235
+ type: "Team" | "User";
236
+ }>[]>(a: B) => readonly Readonly<{
237
+ id: number;
238
+ type: "Team" | "User";
239
+ }>[];
240
+ validate: (a: unknown) => t.Result<readonly Readonly<{
241
+ id: number;
242
+ type: "Team" | "User";
243
+ }>[], readonly Readonly<{
244
+ path: readonly string[];
245
+ actualValue: unknown;
246
+ expectedType: string;
247
+ typeName: string;
248
+ details?: t.ValidationErrorDetails | undefined;
249
+ }>[]>;
250
+ optional?: true;
251
+ }>;
252
+ /**
253
+ * 「 Deployment branches and tags 」の選択。
254
+ *
255
+ * - `null` … 「 No restriction 」( どの ref からでも deploy できる )
256
+ * - `protected_branches: true` … 「 Protected branches only 」
257
+ * - `custom_branch_policies: true` … 「 Selected branches and tags 」。
258
+ * 具体的な pattern は下の `deployment_branch_policies` 。
259
+ *
260
+ * 2 つを同時に `true` にはできない。
261
+ */
262
+ readonly deployment_branch_policy: Readonly<{
263
+ typeName: string;
264
+ defaultValue: Readonly<{
265
+ custom_branch_policies: boolean;
266
+ protected_branches: boolean;
267
+ }> | null;
268
+ is: (a: unknown) => a is Readonly<{
269
+ custom_branch_policies: boolean;
270
+ protected_branches: boolean;
271
+ }> | null;
272
+ assertIs: (a: unknown) => asserts a is Readonly<{
273
+ custom_branch_policies: boolean;
274
+ protected_branches: boolean;
275
+ }> | null;
276
+ cast: (a: unknown) => Readonly<{
277
+ custom_branch_policies: boolean;
278
+ protected_branches: boolean;
279
+ }> | null;
280
+ fill: (a: unknown) => Readonly<{
281
+ custom_branch_policies: boolean;
282
+ protected_branches: boolean;
283
+ }> | null;
284
+ prune: <B extends Readonly<{
285
+ custom_branch_policies: boolean;
286
+ protected_branches: boolean;
287
+ }> | null>(a: B) => Readonly<{
288
+ custom_branch_policies: boolean;
289
+ protected_branches: boolean;
290
+ }> | null;
291
+ validate: (a: unknown) => t.Result<Readonly<{
292
+ custom_branch_policies: boolean;
293
+ protected_branches: boolean;
294
+ }> | null, readonly Readonly<{
295
+ path: readonly string[];
296
+ actualValue: unknown;
297
+ expectedType: string;
298
+ typeName: string;
299
+ details?: t.ValidationErrorDetails | undefined;
300
+ }>[]>;
301
+ optional?: true;
302
+ }>;
303
+ /**
304
+ * `custom_branch_policies` が `true` のときの pattern 一覧。
305
+ *
306
+ * それ以外のときは空配列でなければならない(`applyEnvironments` が拒否する)。
307
+ * GitHub 側は別エンドポイントだが、「どの ref から deploy できるか」を
308
+ * 決めているのは選択と pattern の組で、片方だけ見ても意味を成さない。
309
+ */
310
+ readonly deployment_branch_policies: Readonly<{
311
+ typeName: string;
312
+ defaultValue: readonly Readonly<{
313
+ name: string;
314
+ type: "branch" | "tag";
315
+ }>[];
316
+ is: (a: unknown) => a is readonly Readonly<{
317
+ name: string;
318
+ type: "branch" | "tag";
319
+ }>[];
320
+ assertIs: (a: unknown) => asserts a is readonly Readonly<{
321
+ name: string;
322
+ type: "branch" | "tag";
323
+ }>[];
324
+ cast: (a: unknown) => readonly Readonly<{
325
+ name: string;
326
+ type: "branch" | "tag";
327
+ }>[];
328
+ fill: (a: unknown) => readonly Readonly<{
329
+ name: string;
330
+ type: "branch" | "tag";
331
+ }>[];
332
+ prune: <B extends readonly Readonly<{
333
+ name: string;
334
+ type: "branch" | "tag";
335
+ }>[]>(a: B) => readonly Readonly<{
336
+ name: string;
337
+ type: "branch" | "tag";
338
+ }>[];
339
+ validate: (a: unknown) => t.Result<readonly Readonly<{
340
+ name: string;
341
+ type: "branch" | "tag";
342
+ }>[], readonly Readonly<{
343
+ path: readonly string[];
344
+ actualValue: unknown;
345
+ expectedType: string;
346
+ typeName: string;
347
+ details?: t.ValidationErrorDetails | undefined;
348
+ }>[]>;
349
+ optional?: true;
350
+ }>;
351
+ };
352
+ }>;
353
+ export type EnvironmentSettings = t.TypeOf<typeof EnvironmentSettings>;
354
+ //# sourceMappingURL=constants.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../../../src/github/environments/constants.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AAEjC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAG9B,kCAAkC;;;;;;;;;;;;;;;;;;;QAGlC,+BAA+B;;;;;;;;;;;;;;;;;;QAG/B,2CAA2C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAY3C;;;;;;;;;WASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAYH;;;;;;WAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWH,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,62 @@
1
+ import * as t from 'ts-fortress';
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+ export const EnvironmentSettings = t.record({
17
+ name: t.string(''),
18
+
19
+ wait_timer: t.number(0),
20
+
21
+ prevent_self_review: t.boolean(false),
22
+
23
+ reviewers: t.array(t.record({
24
+ type: t.enumType(['User', 'Team'], {
25
+ typeName: 'EnvironmentReviewerType',
26
+ defaultValue: 'User',
27
+ }),
28
+ id: t.number(0),
29
+ }), { typeName: 'EnvironmentReviewers' }),
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+ deployment_branch_policy: t.union([
41
+ t.record({
42
+ protected_branches: t.boolean(false),
43
+ custom_branch_policies: t.boolean(true),
44
+ }),
45
+ t.nullType,
46
+ ], { typeName: 'DeploymentBranchPolicySelection' }),
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+ deployment_branch_policies: t.array(t.record({
55
+ name: t.string(''),
56
+ type: t.enumType(['branch', 'tag'], {
57
+ typeName: 'DeploymentBranchPolicyType',
58
+ defaultValue: 'branch',
59
+ }),
60
+ }), { typeName: 'DeploymentBranchPolicies' }),
61
+ });
62
+ //# sourceMappingURL=constants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../../../src/github/environments/constants.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AAEjC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IAElB,kCAAkC;IAClC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvB,+BAA+B;IAC/B,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAErC,2CAA2C;IAC3C,SAAS,EAAE,CAAC,CAAC,KAAK,CAChB,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YACjC,QAAQ,EAAE,yBAAyB;YACnC,YAAY,EAAE,MAAM;SACrB,CAAC;QACF,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;KAChB,CAAC,EACF,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CACrC;IAED;;;;;;;;;OASG;IACH,wBAAwB,EAAE,CAAC,CAAC,KAAK,CAC/B;QACE,CAAC,CAAC,MAAM,CAAC;YACP,kBAAkB,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;YACpC,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;SACxC,CAAC;QACF,CAAC,CAAC,QAAQ;KACX,EACD,EAAE,QAAQ,EAAE,iCAAiC,EAAE,CAChD;IAED;;;;;;OAMG;IACH,0BAA0B,EAAE,CAAC,CAAC,KAAK,CACjC,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QAClB,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE;YAClC,QAAQ,EAAE,4BAA4B;YACtC,YAAY,EAAE,QAAQ;SACvB,CAAC;KACH,CAAC,EACF,EAAE,QAAQ,EAAE,0BAA0B,EAAE,CACzC;CACF,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './api/index.mjs';
2
+ export * from './apply.mjs';
3
+ export * from './backup.mjs';
4
+ export * from './constants.mjs';
5
+ export * from './read-environment-contents.mjs';
6
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/github/environments/index.mts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iCAAiC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './api/index.mjs';
2
+ export * from './apply.mjs';
3
+ export * from './backup.mjs';
4
+ export * from './constants.mjs';
5
+ export * from './read-environment-contents.mjs';
6
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/github/environments/index.mts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iCAAiC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { EnvironmentSettings } from './constants.mjs';
2
+ export declare const readEnvironmentFiles: () => Promise<readonly EnvironmentSettings[]>;
3
+ //# sourceMappingURL=read-environment-contents.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-environment-contents.d.mts","sourceRoot":"","sources":["../../../src/github/environments/read-environment-contents.mts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,eAAO,MAAM,oBAAoB,QAAa,OAAO,CACnD,SAAS,mBAAmB,EAAE,CACC,CAAC"}