github-settings-as-code 3.0.0 → 3.0.2

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 (69) hide show
  1. package/dist/cmd/repo-settings.d.mts.map +1 -1
  2. package/dist/cmd/repo-settings.mjs +35 -34
  3. package/dist/cmd/repo-settings.mjs.map +1 -1
  4. package/dist/github/actions-settings/api/get-actions-settings.d.mts.map +1 -1
  5. package/dist/github/actions-settings/api/get-actions-settings.mjs +7 -8
  6. package/dist/github/actions-settings/api/get-actions-settings.mjs.map +1 -1
  7. package/dist/github/actions-settings/api/set-actions-settings.mjs +7 -7
  8. package/dist/github/actions-settings/apply.mjs +7 -7
  9. package/dist/github/actions-settings/apply.mjs.map +1 -1
  10. package/dist/github/actions-settings/backup.mjs +2 -2
  11. package/dist/github/actions-settings/constants.d.mts +86 -0
  12. package/dist/github/actions-settings/constants.d.mts.map +1 -1
  13. package/dist/github/actions-settings/constants.mjs +24 -24
  14. package/dist/github/constants.mjs +2 -2
  15. package/dist/github/octokit.mjs +12 -12
  16. package/dist/github/pages/api/get-pages-settings.d.mts.map +1 -1
  17. package/dist/github/pages/api/get-pages-settings.mjs +6 -7
  18. package/dist/github/pages/api/get-pages-settings.mjs.map +1 -1
  19. package/dist/github/pages/api/set-pages-settings.mjs +8 -8
  20. package/dist/github/pages/apply.mjs +12 -12
  21. package/dist/github/pages/apply.mjs.map +1 -1
  22. package/dist/github/pages/backup.mjs +2 -2
  23. package/dist/github/pages/constants.d.mts +20 -0
  24. package/dist/github/pages/constants.d.mts.map +1 -1
  25. package/dist/github/pages/constants.mjs +6 -6
  26. package/dist/github/repository/api/get-repository.mjs +3 -3
  27. package/dist/github/repository/api/get-repository.mjs.map +1 -1
  28. package/dist/github/repository/api/update-repository.d.mts +1 -1
  29. package/dist/github/repository/api/update-repository.d.mts.map +1 -1
  30. package/dist/github/repository/api/update-repository.mjs +6 -3
  31. package/dist/github/repository/api/update-repository.mjs.map +1 -1
  32. package/dist/github/repository/apply.mjs +16 -16
  33. package/dist/github/repository/apply.mjs.map +1 -1
  34. package/dist/github/repository/backup.mjs +1 -1
  35. package/dist/github/repository/constants.d.mts +176 -0
  36. package/dist/github/repository/constants.d.mts.map +1 -1
  37. package/dist/github/repository/constants.mjs +3 -3
  38. package/dist/github/resolve-target-repo.mjs +24 -24
  39. package/dist/github/ruleset/api/create-ruleset.mjs +7 -7
  40. package/dist/github/ruleset/api/get-all-rulesets.mjs +5 -5
  41. package/dist/github/ruleset/api/get-all-rulesets.mjs.map +1 -1
  42. package/dist/github/ruleset/api/get-ruleset.mjs +3 -3
  43. package/dist/github/ruleset/api/get-ruleset.mjs.map +1 -1
  44. package/dist/github/ruleset/api/update-ruleset.mjs +7 -7
  45. package/dist/github/ruleset/apply.mjs +3 -3
  46. package/dist/github/ruleset/backup.mjs +1 -1
  47. package/dist/github/ruleset/constants.d.mts +88 -8
  48. package/dist/github/ruleset/constants.d.mts.map +1 -1
  49. package/dist/github/ruleset/constants.mjs +3 -3
  50. package/dist/github/ruleset/read-rule-set-contents.mjs +2 -2
  51. package/dist/github/variables/api/create-repo-variable.mjs +1 -1
  52. package/dist/github/variables/api/list-repo-variables.mjs +1 -1
  53. package/dist/github/variables/api/update-repo-variable.mjs +1 -1
  54. package/dist/github/variables/apply.d.mts.map +1 -1
  55. package/dist/github/variables/apply.mjs +7 -6
  56. package/dist/github/variables/apply.mjs.map +1 -1
  57. package/package.json +22 -27
  58. package/src/cmd/repo-settings.mts +37 -36
  59. package/src/github/actions-settings/api/get-actions-settings.mts +0 -1
  60. package/src/github/actions-settings/apply.mts +2 -2
  61. package/src/github/pages/api/get-pages-settings.mts +0 -1
  62. package/src/github/pages/apply.mts +2 -2
  63. package/src/github/repository/api/get-repository.mts +2 -2
  64. package/src/github/repository/api/update-repository.mts +6 -1
  65. package/src/github/repository/apply.mts +2 -2
  66. package/src/github/ruleset/api/get-all-rulesets.mts +2 -2
  67. package/src/github/ruleset/api/get-ruleset.mts +2 -2
  68. package/src/github/ruleset/schema.test.mts +164 -0
  69. package/src/github/variables/apply.mts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"repo-settings.d.mts","sourceRoot":"","sources":["../../src/cmd/repo-settings.mts"],"names":[],"mappings":";AAEA,OAAO,eAAe,CAAC"}
1
+ {"version":3,"file":"repo-settings.d.mts","sourceRoot":"","sources":["../../src/cmd/repo-settings.mts"],"names":[],"mappings":";AAGA,OAAO,eAAe,CAAC"}
@@ -1,43 +1,44 @@
1
1
  #!/usr/bin/env node
2
+ import dedent from 'dedent';
2
3
  import 'dotenv/config';
3
4
  import * as util from 'node:util';
4
5
  import { Arr } from 'ts-data-forge';
5
- const HELP = `
6
- Usage: repo-settings <command> [target] [options]
6
+ const HELP = dedent `
7
+ Usage: repo-settings <command> [target] [options]
7
8
 
8
- GitHub の repository 設定を JSON ファイルで管理する。
9
+ GitHub の repository 設定を JSON ファイルで管理する。
9
10
 
10
- Commands:
11
- apply [target] ローカルの設定ファイルを GitHub に反映する
12
- backup [target] GitHub の現在値をローカルの bk/ に保存する
11
+ Commands:
12
+ apply [target] ローカルの設定ファイルを GitHub に反映する
13
+ backup [target] GitHub の現在値をローカルの bk/ に保存する
13
14
 
14
- Targets:
15
- all すべて(既定)
16
- repository repo-settings/repository-settings/settings.json
17
- rulesets repo-settings/rulesets/*.json
18
- variables repository variables ( apply のみ )
19
- actions repo-settings/actions-settings/settings.json
20
- pages repo-settings/pages/settings.json
15
+ Targets:
16
+ all すべて(既定)
17
+ repository repo-settings/repository-settings/settings.json
18
+ rulesets repo-settings/rulesets/*.json
19
+ variables repository variables ( apply のみ )
20
+ actions repo-settings/actions-settings/settings.json
21
+ pages repo-settings/pages/settings.json
21
22
 
22
- Options:
23
- --owner <owner> 対象の owner
24
- --repo <repo> 対象の repository 名
25
- -h, --help このヘルプを表示する
23
+ Options:
24
+ --owner <owner> 対象の owner
25
+ --repo <repo> 対象の repository 名
26
+ -h, --help このヘルプを表示する
26
27
 
27
- owner / repo は「コマンドライン引数 → 環境変数 OWNER / REPO_NAME →
28
- git remote origin → package.json の name 」の順で解決される。
29
- 通常は git remote から決まるため、どちらの指定も不要。
28
+ owner / repo は「コマンドライン引数 → 環境変数 OWNER / REPO_NAME →
29
+ git remote origin → package.json の name 」の順で解決される。
30
+ 通常は git remote から決まるため、どちらの指定も不要。
30
31
 
31
- 認証は「環境変数 GITHUB_APP_TOKEN / GH_TOKEN / PERSONAL_ACCESS_TOKEN →
32
- gh CLI ( gh auth token )」の順で解決される。ローカルでは gh auth login
33
- だけで動く。
32
+ 認証は「環境変数 GITHUB_APP_TOKEN / GH_TOKEN / PERSONAL_ACCESS_TOKEN →
33
+ gh CLI ( gh auth token )」の順で解決される。ローカルでは gh auth login
34
+ だけで動く。
34
35
 
35
- Examples:
36
- repo-settings apply
37
- repo-settings apply rulesets
38
- repo-settings backup
39
- repo-settings apply --owner noshiro-pf --repo ts-repo-utils
40
- `.trim();
36
+ Examples:
37
+ repo-settings apply
38
+ repo-settings apply rulesets
39
+ repo-settings backup
40
+ repo-settings apply --owner noshiro-pf --repo ts-repo-utils
41
+ `;
41
42
  const COMMANDS = ['apply', 'backup'];
42
43
  const TARGETS = [
43
44
  'all',
@@ -51,8 +52,8 @@ const COMMAND_SET = new Set(COMMANDS);
51
52
  const isCommand = (value) => COMMAND_SET.has(value);
52
53
  const TARGET_SET = new Set(TARGETS);
53
54
  const isTarget = (value) => TARGET_SET.has(value);
54
- // NOTE: 明示的な型注釈を変数側に付けることで、呼び出し後に制御フローが到達
55
- // しないことを TypeScript に認識させる( narrowing のために必要 )。
55
+
56
+
56
57
  const fail = (message) => {
57
58
  console.error(`❌ ${message}`);
58
59
  console.error('');
@@ -71,7 +72,7 @@ const { values, positionals } = util.parseArgs({
71
72
  });
72
73
  if (values.help === true || Arr.isEmpty(positionals)) {
73
74
  console.info(HELP);
74
- // Asking for help is not an error, even though being given no command is.
75
+
75
76
  process.exit(values.help === true ? 0 : 1);
76
77
  }
77
78
  const [commandArg, targetArg = 'all'] = positionals;
@@ -81,8 +82,8 @@ if (commandArg === undefined || !isCommand(commandArg)) {
81
82
  if (!isTarget(targetArg)) {
82
83
  fail(`Unknown target: "${targetArg}"`);
83
84
  }
84
- // NOTE: ここで初めて設定モジュールを読み込む。 owner / repo の解決は import 時に
85
- // 走るため、 --help や引数エラーの時点では評価させたくない。
85
+
86
+
86
87
  const github = await import('../github/index.mjs');
87
88
  const runners = {
88
89
  apply: {
@@ -1 +1 @@
1
- {"version":3,"file":"repo-settings.mjs","sourceRoot":"","sources":["../../src/cmd/repo-settings.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repo-settings.mjs","sourceRoot":"","sources":["../../src/cmd/repo-settings.mts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-actions-settings.d.mts","sourceRoot":"","sources":["../../../../src/github/actions-settings/api/get-actions-settings.mts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAAa,OAAO,CAAC,eAAe,CAoBlE,CAAC"}
1
+ {"version":3,"file":"get-actions-settings.d.mts","sourceRoot":"","sources":["../../../../src/github/actions-settings/api/get-actions-settings.mts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAAa,OAAO,CAAC,eAAe,CAmBlE,CAAC"}
@@ -1,17 +1,16 @@
1
1
  import { octokitHeaders, OWNER, REPO } from '../../constants.mjs';
2
2
  import { octokit } from '../../octokit.mjs';
3
3
  import { ActionsSettings } from '../constants.mjs';
4
- /**
5
- * Settings > Actions > General の現在値を取得する。
6
- *
7
- * 2 つのエンドポイントの結果を 1 つのオブジェクトにまとめる。
8
- */
4
+
5
+
6
+
7
+
8
+
9
9
  export const getActionsSettings = async () => {
10
- // https://docs.github.com/rest/actions/permissions#get-github-actions-permissions-for-a-repository
10
+
11
11
  const permissions = await octokit.request('GET /repos/{owner}/{repo}/actions/permissions', { owner: OWNER, repo: REPO, headers: octokitHeaders });
12
- // https://docs.github.com/rest/actions/permissions#get-fork-pr-contributor-approval-permissions-for-a-repository
12
+
13
13
  const forkPrApproval = await octokit.request('GET /repos/{owner}/{repo}/actions/permissions/fork-pr-contributor-approval', { owner: OWNER, repo: REPO, headers: octokitHeaders });
14
- // eslint-disable-next-line unicorn/no-array-fill-with-reference-type
15
14
  return ActionsSettings.fill({
16
15
  enabled: permissions.data.enabled,
17
16
  allowed_actions: permissions.data.allowed_actions,
@@ -1 +1 @@
1
- {"version":3,"file":"get-actions-settings.mjs","sourceRoot":"","sources":["../../../../src/github/actions-settings/api/get-actions-settings.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,IAA8B,EAAE;IACrE,mGAAmG;IACnG,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,OAAO,CACvC,+CAAsE,EACtE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CACtD,CAAC;IAEF,iHAAiH;IACjH,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,OAAO,CAC1C,4EAAmG,EACnG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CACtD,CAAC;IAEF,qEAAqE;IACrE,OAAO,eAAe,CAAC,IAAI,CAAC;QAC1B,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO;QACjC,eAAe,EAAE,WAAW,CAAC,IAAI,CAAC,eAAe;QACjD,oBAAoB,EAAE,WAAW,CAAC,IAAI,CAAC,oBAAoB;QAC3D,mCAAmC,EAAE,cAAc,CAAC,IAAI,CAAC,eAAe;KACzE,CAAC,CAAC;AACL,CAAC,CAAC"}
1
+ {"version":3,"file":"get-actions-settings.mjs","sourceRoot":"","sources":["../../../../src/github/actions-settings/api/get-actions-settings.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,IAA8B,EAAE;IACrE,mGAAmG;IACnG,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,OAAO,CACvC,+CAAsE,EACtE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CACtD,CAAC;IAEF,iHAAiH;IACjH,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,OAAO,CAC1C,4EAAmG,EACnG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CACtD,CAAC;IAEF,OAAO,eAAe,CAAC,IAAI,CAAC;QAC1B,OAAO,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO;QACjC,eAAe,EAAE,WAAW,CAAC,IAAI,CAAC,eAAe;QACjD,oBAAoB,EAAE,WAAW,CAAC,IAAI,CAAC,oBAAoB;QAC3D,mCAAmC,EAAE,cAAc,CAAC,IAAI,CAAC,eAAe;KACzE,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -1,12 +1,12 @@
1
1
  import { octokitHeaders, OWNER, REPO } from '../../constants.mjs';
2
2
  import { octokit } from '../../octokit.mjs';
3
- /** Settings > Actions > General を JSON の内容に合わせる。 */
3
+
4
4
  export const setActionsSettings = async (settings) => {
5
- // https://docs.github.com/rest/actions/permissions#set-github-actions-permissions-for-a-repository
6
- //
7
- // NOTE: sha_pinning_required は @octokit/types v16 の型定義にまだ無い。 API は
8
- // 受け付けるので、いったん変数に束縛して渡している(オブジェクトリテラルを直接
9
- // 渡すと excess property check に引っかかるため)。型が追随したら不要になる。
5
+
6
+
7
+
8
+
9
+
10
10
  const permissionsParams = {
11
11
  owner: OWNER,
12
12
  repo: REPO,
@@ -16,7 +16,7 @@ export const setActionsSettings = async (settings) => {
16
16
  sha_pinning_required: settings.sha_pinning_required,
17
17
  };
18
18
  await octokit.request('PUT /repos/{owner}/{repo}/actions/permissions', permissionsParams);
19
- // https://docs.github.com/rest/actions/permissions#set-fork-pr-contributor-approval-permissions-for-a-repository
19
+
20
20
  await octokit.request('PUT /repos/{owner}/{repo}/actions/permissions/fork-pr-contributor-approval', {
21
21
  owner: OWNER,
22
22
  repo: REPO,
@@ -2,34 +2,34 @@
2
2
  import 'dotenv/config';
3
3
  import * as fs from 'node:fs/promises';
4
4
  import * as path from 'node:path';
5
- import { validationErrorsToMessages } from 'ts-fortress';
5
+ import * as t from 'ts-fortress';
6
6
  import { formatUncommittedFiles, isDirectlyExecuted, Result, } from 'ts-repo-utils';
7
7
  import { actionsSettingsDir, settingsJsonName } from '../constants.mjs';
8
8
  import { getActionsSettings, setActionsSettings } from './api/index.mjs';
9
9
  import { backupActionsSettings } from './backup.mjs';
10
10
  import { ActionsSettings } from './constants.mjs';
11
- /** `repo-settings/actions-settings/settings.json` を Settings > Actions > General に反映する。 */
11
+
12
12
  export const applyActionsSettings = async () => {
13
13
  await backupActionsSettings(false);
14
14
  const settings = await readSettings();
15
15
  await setActionsSettings(settings);
16
- // 反映後の実際の値でローカルのファイルを更新する
16
+
17
17
  {
18
18
  const applied = await getActionsSettings();
19
19
  const str = JSON.stringify(applied, undefined, 2);
20
- // eslint-disable-next-line security/detect-non-literal-fs-filename
20
+
21
21
  await fs.writeFile(path.resolve(actionsSettingsDir, settingsJsonName), str);
22
- // eslint-disable-next-line security/detect-non-literal-fs-filename
22
+
23
23
  await fs.writeFile(path.resolve(actionsSettingsDir, 'bk', settingsJsonName), str);
24
24
  await formatUncommittedFiles();
25
25
  }
26
26
  };
27
27
  const readSettings = async () => {
28
- // eslint-disable-next-line security/detect-non-literal-fs-filename
28
+
29
29
  const settingsText = await fs.readFile(path.resolve(actionsSettingsDir, settingsJsonName), { encoding: 'utf8' });
30
30
  const validationResult = ActionsSettings.validate(JSON.parse(settingsText));
31
31
  if (Result.isErr(validationResult)) {
32
- throw new Error(validationErrorsToMessages(validationResult.value).join('\n'));
32
+ throw new Error(t.validationErrorsToMessages(validationResult.value).join('\n'));
33
33
  }
34
34
  return validationResult.value;
35
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"apply.mjs","sourceRoot":"","sources":["../../../src/github/actions-settings/apply.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,2FAA2F;AAC3F,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,IAAmB,EAAE;IAC5D,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAEnC,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IAEtC,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAEnC,0BAA0B;IAC1B,CAAC;QACC,MAAM,OAAO,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAE3C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAElD,mEAAmE;QACnE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC,CAAC;QAE5E,mEAAmE;QACnE,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,EAAE,gBAAgB,CAAC,EACxD,GAAG,CACJ,CAAC;QAEF,MAAM,sBAAsB,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,IAA8B,EAAE;IACxD,mEAAmE;IACnE,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,QAAQ,CACpC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAClD,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;IAEF,MAAM,gBAAgB,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAE5E,IAAI,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,0BAA0B,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9D,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,oBAAoB,EAAE,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"apply.mjs","sourceRoot":"","sources":["../../../src/github/actions-settings/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,EACL,sBAAsB,EACtB,kBAAkB,EAClB,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,2FAA2F;AAC3F,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,IAAmB,EAAE;IAC5D,MAAM,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAEnC,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAC;IAEtC,MAAM,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAEnC,0BAA0B;IAC1B,CAAC;QACC,MAAM,OAAO,GAAG,MAAM,kBAAkB,EAAE,CAAC;QAE3C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAElD,mEAAmE;QACnE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC,CAAC;QAE5E,mEAAmE;QACnE,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAI,EAAE,gBAAgB,CAAC,EACxD,GAAG,CACJ,CAAC;QAEF,MAAM,sBAAsB,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,IAA8B,EAAE;IACxD,mEAAmE;IACnE,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,QAAQ,CACpC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAClD,EAAE,QAAQ,EAAE,MAAM,EAAE,CACrB,CAAC;IAEF,MAAM,gBAAgB,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAE5E,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,oBAAoB,EAAE,CAAC;AAC/B,CAAC"}
@@ -6,11 +6,11 @@ import { formatUncommittedFiles, isDirectlyExecuted, makeEmptyDir, } from 'ts-re
6
6
  import { actionsSettingsDir, settingsJsonName } from '../constants.mjs';
7
7
  import { getActionsSettings } from './api/index.mjs';
8
8
  const backupDir = path.resolve(actionsSettingsDir, './bk');
9
- /** Settings > Actions > General の現在値を `bk/` に保存する。 */
9
+
10
10
  export const backupActionsSettings = async (fmt = true) => {
11
11
  await makeEmptyDir(backupDir);
12
12
  const settings = await getActionsSettings();
13
- // eslint-disable-next-line security/detect-non-literal-fs-filename
13
+
14
14
  await fs.writeFile(path.resolve(backupDir, settingsJsonName), JSON.stringify(settings, undefined, 2));
15
15
  if (fmt) {
16
16
  await formatUncommittedFiles();
@@ -64,6 +64,92 @@ export declare const ActionsSettings: Readonly<{
64
64
  details?: t.ValidationErrorDetails | undefined;
65
65
  }>[]>;
66
66
  optional?: true;
67
+ }> & Readonly<{
68
+ shape: {
69
+ /** Actions permissions: この repository で Actions を有効にするか。 */
70
+ readonly enabled: Readonly<{
71
+ typeName: string;
72
+ defaultValue: boolean;
73
+ is: (a: unknown) => a is boolean;
74
+ assertIs: (a: unknown) => asserts a is boolean;
75
+ cast: (a: unknown) => boolean;
76
+ fill: (a: unknown) => boolean;
77
+ prune: <B extends boolean>(a: B) => boolean;
78
+ validate: (a: unknown) => t.Result<boolean, readonly Readonly<{
79
+ path: readonly string[];
80
+ actualValue: unknown;
81
+ expectedType: string;
82
+ typeName: string;
83
+ details?: t.ValidationErrorDetails | undefined;
84
+ }>[]>;
85
+ optional?: true;
86
+ }>;
87
+ /** Actions permissions: 実行を許可する action の範囲。 */
88
+ readonly allowed_actions: Readonly<{
89
+ typeName: string;
90
+ defaultValue: "all" | "local_only" | "selected";
91
+ is: (a: unknown) => a is "all" | "local_only" | "selected";
92
+ assertIs: (a: unknown) => asserts a is "all" | "local_only" | "selected";
93
+ cast: (a: unknown) => "all" | "local_only" | "selected";
94
+ fill: (a: unknown) => "all" | "local_only" | "selected";
95
+ prune: <B extends "all" | "local_only" | "selected">(a: B) => "all" | "local_only" | "selected";
96
+ validate: (a: unknown) => t.Result<"all" | "local_only" | "selected", readonly Readonly<{
97
+ path: readonly string[];
98
+ actualValue: unknown;
99
+ expectedType: string;
100
+ typeName: string;
101
+ details?: t.ValidationErrorDetails | undefined;
102
+ }>[]>;
103
+ optional?: true;
104
+ }>;
105
+ /**
106
+ * 「 Require actions to be pinned to a full-length commit SHA 」。
107
+ *
108
+ * NOTE: @octokit/types v16 時点でこのフィールドは型定義に入っていないため、
109
+ * リクエスト時にのみ手当てしている( set-actions-permissions.mts 参照)。
110
+ */
111
+ readonly sha_pinning_required: Readonly<{
112
+ typeName: string;
113
+ defaultValue: boolean;
114
+ is: (a: unknown) => a is boolean;
115
+ assertIs: (a: unknown) => asserts a is boolean;
116
+ cast: (a: unknown) => boolean;
117
+ fill: (a: unknown) => boolean;
118
+ prune: <B extends boolean>(a: B) => boolean;
119
+ validate: (a: unknown) => t.Result<boolean, readonly Readonly<{
120
+ path: readonly string[];
121
+ actualValue: unknown;
122
+ expectedType: string;
123
+ typeName: string;
124
+ details?: t.ValidationErrorDetails | undefined;
125
+ }>[]>;
126
+ optional?: true;
127
+ }>;
128
+ /**
129
+ * 「 Approval for running fork pull request workflows from contributors 」。
130
+ *
131
+ * - `first_time_contributors_new_to_github`: GitHub 自体に不慣れな初回貢献者のみ承認必須
132
+ * - `first_time_contributors`: この repository への初回貢献者のみ承認必須
133
+ * - `all_external_contributors`: 外部貢献者すべてに承認必須
134
+ */
135
+ readonly fork_pr_contributor_approval_policy: Readonly<{
136
+ typeName: string;
137
+ defaultValue: "all_external_contributors" | "first_time_contributors" | "first_time_contributors_new_to_github";
138
+ is: (a: unknown) => a is "all_external_contributors" | "first_time_contributors" | "first_time_contributors_new_to_github";
139
+ assertIs: (a: unknown) => asserts a is "all_external_contributors" | "first_time_contributors" | "first_time_contributors_new_to_github";
140
+ cast: (a: unknown) => "all_external_contributors" | "first_time_contributors" | "first_time_contributors_new_to_github";
141
+ fill: (a: unknown) => "all_external_contributors" | "first_time_contributors" | "first_time_contributors_new_to_github";
142
+ prune: <B extends "all_external_contributors" | "first_time_contributors" | "first_time_contributors_new_to_github">(a: B) => "all_external_contributors" | "first_time_contributors" | "first_time_contributors_new_to_github";
143
+ validate: (a: unknown) => t.Result<"all_external_contributors" | "first_time_contributors" | "first_time_contributors_new_to_github", readonly Readonly<{
144
+ path: readonly string[];
145
+ actualValue: unknown;
146
+ expectedType: string;
147
+ typeName: string;
148
+ details?: t.ValidationErrorDetails | undefined;
149
+ }>[]>;
150
+ optional?: true;
151
+ }>;
152
+ };
67
153
  }>;
68
154
  export type ActionsSettings = t.TypeOf<typeof ActionsSettings>;
69
155
  //# sourceMappingURL=constants.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../../../src/github/actions-settings/constants.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AAEjC;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoC1B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../../../src/github/actions-settings/constants.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AAEjC;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAC1B,4DAA4D;;;;;;;;;;;;;;;;;;QAG5D,+CAA+C;;;;;;;;;;;;;;;;;;QAM/C;;;;;WAKG;;;;;;;;;;;;;;;;;;QAGH;;;;;;WAMG;;;;;;;;;;;;;;;;;;;EAYH,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -1,35 +1,35 @@
1
1
  import * as t from 'ts-fortress';
2
- /**
3
- * `repo-settings/actions-settings/settings.json` の型。
4
- *
5
- * Settings > Actions > General に対応する。 2 つの API をまとめて 1 ファイルで
6
- * 管理する:
7
- *
8
- * - `GET|PUT /repos/{owner}/{repo}/actions/permissions`
9
- * - `GET|PUT /repos/{owner}/{repo}/actions/permissions/fork-pr-contributor-approval`
10
- */
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
11
  export const ActionsSettings = t.record({
12
- /** Actions permissions: この repository で Actions を有効にするか。 */
12
+
13
13
  enabled: t.boolean(true),
14
- /** Actions permissions: 実行を許可する action の範囲。 */
14
+
15
15
  allowed_actions: t.enumType(['all', 'local_only', 'selected'], {
16
16
  typeName: 'AllowedActions',
17
17
  defaultValue: 'all',
18
18
  }),
19
- /**
20
- * 「 Require actions to be pinned to a full-length commit SHA 」。
21
- *
22
- * NOTE: @octokit/types v16 時点でこのフィールドは型定義に入っていないため、
23
- * リクエスト時にのみ手当てしている( set-actions-permissions.mts 参照)。
24
- */
19
+
20
+
21
+
22
+
23
+
24
+
25
25
  sha_pinning_required: t.boolean(false),
26
- /**
27
- * 「 Approval for running fork pull request workflows from contributors 」。
28
- *
29
- * - `first_time_contributors_new_to_github`: GitHub 自体に不慣れな初回貢献者のみ承認必須
30
- * - `first_time_contributors`: この repository への初回貢献者のみ承認必須
31
- * - `all_external_contributors`: 外部貢献者すべてに承認必須
32
- */
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
33
  fork_pr_contributor_approval_policy: t.enumType([
34
34
  'first_time_contributors_new_to_github',
35
35
  'first_time_contributors',
@@ -3,8 +3,8 @@ import { resolveTargetRepo } from './resolve-target-repo.mjs';
3
3
  const targetRepo = await resolveTargetRepo();
4
4
  export const OWNER = targetRepo.owner;
5
5
  export const REPO = targetRepo.repo;
6
- // Named `repo-settings` rather than `github`, which read as a sibling of
7
- // `.github` and invited the guess that workflows lived here too.
6
+
7
+
8
8
  const settingsDir = path.resolve(process.cwd(), './repo-settings');
9
9
  export const settingsJsonName = 'settings.json';
10
10
  export const repositorySettingsDir = path.resolve(settingsDir, './repository-settings');
@@ -1,15 +1,15 @@
1
1
  import { Octokit } from '@octokit/core';
2
2
  import { execFileSync } from 'node:child_process';
3
- /**
4
- * GitHub API の認証トークンを解決する。
5
- *
6
- * 1. 明示的な環境変数 … CI では GitHub App の installation token を渡す。
7
- * 2. `gh auth token` … ローカルでは gh CLI のログイン情報をそのまま使うため、 PAT
8
- * を .env などに平文で置く必要がない。
9
- *
10
- * `GITHUB_TOKEN` は候補に含めない。 Actions では既定の( administration 権限を
11
- * 持たない)トークンが同名で入っていることがあり、黙って弱い方を掴むため。
12
- */
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
13
  const resolveAuthToken = () => {
14
14
  const fromEnv = process.env['GITHUB_APP_TOKEN'] ??
15
15
  process.env['GH_TOKEN'] ??
@@ -18,7 +18,7 @@ const resolveAuthToken = () => {
18
18
  return fromEnv;
19
19
  }
20
20
  try {
21
- // シェルを経由させない。 stderr も捨てて、失敗時にトークンが混ざらないようにする。
21
+
22
22
  const stdout = execFileSync('gh', ['auth', 'token'], {
23
23
  encoding: 'utf8',
24
24
  stdio: ['ignore', 'pipe', 'ignore'],
@@ -29,7 +29,7 @@ const resolveAuthToken = () => {
29
29
  }
30
30
  }
31
31
  catch {
32
- // gh が未インストール、または未ログイン。下のエラーにまとめる。
32
+
33
33
  }
34
34
  throw new Error([
35
35
  'GitHub のトークンが見つかりませんでした。',
@@ -1 +1 @@
1
- {"version":3,"file":"get-pages-settings.d.mts","sourceRoot":"","sources":["../../../../src/github/pages/api/get-pages-settings.mts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAC/C,aAAa,GAAG,SAAS,CAkB1B,CAAC"}
1
+ {"version":3,"file":"get-pages-settings.d.mts","sourceRoot":"","sources":["../../../../src/github/pages/api/get-pages-settings.mts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAC/C,aAAa,GAAG,SAAS,CAiB1B,CAAC"}
@@ -2,16 +2,15 @@ import { hasKey, isRecord } from 'ts-data-forge';
2
2
  import { octokitHeaders, OWNER, REPO } from '../../constants.mjs';
3
3
  import { octokit } from '../../octokit.mjs';
4
4
  import { PagesSettings } from '../constants.mjs';
5
- /**
6
- * GitHub Pages の現在の設定を取得する。
7
- *
8
- * Pages が未設定の repository では 404 が返るため、その場合は `undefined` を返す。
9
- */
5
+
6
+
7
+
8
+
9
+
10
10
  export const getPagesSettings = async () => {
11
11
  try {
12
- // https://docs.github.com/rest/pages/pages#get-a-apiname-pages-site
12
+
13
13
  const response = await octokit.request('GET /repos/{owner}/{repo}/pages', { owner: OWNER, repo: REPO, headers: octokitHeaders });
14
- // eslint-disable-next-line unicorn/no-array-fill-with-reference-type
15
14
  return PagesSettings.fill({ build_type: response.data.build_type });
16
15
  }
17
16
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"get-pages-settings.mjs","sourceRoot":"","sources":["../../../../src/github/pages/api/get-pages-settings.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAEnC,EAAE;IACF,IAAI,CAAC;QACH,oEAAoE;QACpE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CACpC,iCAAwD,EACxD,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CACtD,CAAC;QAEF,qEAAqE;QACrE,OAAO,aAAa,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvE,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"get-pages-settings.mjs","sourceRoot":"","sources":["../../../../src/github/pages/api/get-pages-settings.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAEnC,EAAE;IACF,IAAI,CAAC;QACH,oEAAoE;QACpE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CACpC,iCAAwD,EACxD,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,CACtD,CAAC;QAEF,OAAO,aAAa,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvE,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC"}
@@ -1,16 +1,16 @@
1
1
  import { octokitHeaders, OWNER, REPO } from '../../constants.mjs';
2
2
  import { octokit } from '../../octokit.mjs';
3
3
  import { getPagesSettings } from './get-pages-settings.mjs';
4
- /**
5
- * GitHub Pages の Source を JSON の内容に合わせる。
6
- *
7
- * Pages 未設定なら POST で作成し、設定済みなら PUT で更新する。 これにより
8
- * 「 Settings > Pages で Source を GitHub Actions に変更する 」という手作業が不要になる。
9
- */
4
+
5
+
6
+
7
+
8
+
9
+
10
10
  export const setPagesSettings = async (settings) => {
11
11
  const current = await getPagesSettings();
12
12
  if (current === undefined) {
13
- // https://docs.github.com/rest/pages/pages#create-a-apiname-pages-site
13
+
14
14
  await octokit.request('POST /repos/{owner}/{repo}/pages', {
15
15
  owner: OWNER,
16
16
  repo: REPO,
@@ -22,7 +22,7 @@ export const setPagesSettings = async (settings) => {
22
22
  if (current.build_type === settings.build_type) {
23
23
  return;
24
24
  }
25
- // https://docs.github.com/rest/pages/pages#update-information-about-a-apiname-pages-site
25
+
26
26
  await octokit.request('PUT /repos/{owner}/{repo}/pages', {
27
27
  owner: OWNER,
28
28
  repo: REPO,
@@ -2,17 +2,17 @@
2
2
  import 'dotenv/config';
3
3
  import * as fs from 'node:fs/promises';
4
4
  import * as path from 'node:path';
5
- import { validationErrorsToMessages } from 'ts-fortress';
5
+ import * as t from 'ts-fortress';
6
6
  import { formatUncommittedFiles, isDirectlyExecuted, pathExists, Result, } from 'ts-repo-utils';
7
7
  import { pagesSettingsDir, settingsJsonName } from '../constants.mjs';
8
8
  import { getPagesSettings, setPagesSettings } from './api/index.mjs';
9
9
  import { PagesSettings } from './constants.mjs';
10
- /**
11
- * `repo-settings/pages/settings.json` を Settings > Pages に反映する。
12
- *
13
- * 設定ファイルを置いていない repository では何もしない( Pages を使わない
14
- * repository で誤って Pages を有効化しないため)。
15
- */
10
+
11
+
12
+
13
+
14
+
15
+
16
16
  export const applyPagesSettings = async () => {
17
17
  const settingsPath = path.resolve(pagesSettingsDir, settingsJsonName);
18
18
  if (!(await pathExists(settingsPath))) {
@@ -20,26 +20,26 @@ export const applyPagesSettings = async () => {
20
20
  }
21
21
  const settings = await readSettings(settingsPath);
22
22
  await setPagesSettings(settings);
23
- // 反映後の実際の値でローカルのファイルを更新する
23
+
24
24
  {
25
25
  const applied = await getPagesSettings();
26
26
  if (applied === undefined) {
27
27
  return;
28
28
  }
29
29
  const str = JSON.stringify(applied, undefined, 2);
30
- // eslint-disable-next-line security/detect-non-literal-fs-filename
30
+
31
31
  await fs.writeFile(settingsPath, str);
32
- // eslint-disable-next-line security/detect-non-literal-fs-filename
32
+
33
33
  await fs.writeFile(path.resolve(pagesSettingsDir, 'bk', settingsJsonName), str);
34
34
  await formatUncommittedFiles();
35
35
  }
36
36
  };
37
37
  const readSettings = async (settingsPath) => {
38
- // eslint-disable-next-line security/detect-non-literal-fs-filename
38
+
39
39
  const settingsText = await fs.readFile(settingsPath, { encoding: 'utf8' });
40
40
  const validationResult = PagesSettings.validate(JSON.parse(settingsText));
41
41
  if (Result.isErr(validationResult)) {
42
- throw new Error(validationErrorsToMessages(validationResult.value).join('\n'));
42
+ throw new Error(t.validationErrorsToMessages(validationResult.value).join('\n'));
43
43
  }
44
44
  return validationResult.value;
45
45
  };
@@ -1 +1 @@
1
- {"version":3,"file":"apply.mjs","sourceRoot":"","sources":["../../../src/github/pages/apply.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,UAAU,EACV,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,IAAmB,EAAE;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;IAEtE,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACtC,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;IAElD,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAEjC,0BAA0B;IAC1B,CAAC;QACC,MAAM,OAAO,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAEzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAElD,mEAAmE;QACnE,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAEtC,mEAAmE;QACnE,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,CAAC,EACtD,GAAG,CACJ,CAAC;QAEF,MAAM,sBAAsB,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,EAAE,YAAoB,EAA0B,EAAE;IAC1E,mEAAmE;IACnE,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAE3E,MAAM,gBAAgB,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAE1E,IAAI,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,0BAA0B,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9D,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,kBAAkB,EAAE,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"apply.mjs","sourceRoot":"","sources":["../../../src/github/pages/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,EACL,sBAAsB,EACtB,kBAAkB,EAClB,UAAU,EACV,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,IAAmB,EAAE;IAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;IAEtE,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACtC,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;IAElD,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAEjC,0BAA0B;IAC1B,CAAC;QACC,MAAM,OAAO,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAEzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAElD,mEAAmE;QACnE,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAEtC,mEAAmE;QACnE,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,CAAC,EACtD,GAAG,CACJ,CAAC;QAEF,MAAM,sBAAsB,EAAE,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,EAAE,YAAoB,EAA0B,EAAE;IAC1E,mEAAmE;IACnE,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAE3E,MAAM,gBAAgB,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;IAE1E,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,kBAAkB,EAAE,CAAC;AAC7B,CAAC"}