github-settings-as-code 3.2.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.
- package/README.md +17 -15
- package/dist/cmd/repo-settings.mjs +4 -2
- package/dist/cmd/repo-settings.mjs.map +1 -1
- package/dist/github/actions-settings/apply.d.mts.map +1 -1
- package/dist/github/actions-settings/apply.mjs +0 -4
- package/dist/github/actions-settings/apply.mjs.map +1 -1
- package/dist/github/actions-settings/backup.d.mts +1 -1
- package/dist/github/actions-settings/backup.d.mts.map +1 -1
- package/dist/github/actions-settings/backup.mjs +4 -4
- package/dist/github/actions-settings/backup.mjs.map +1 -1
- package/dist/github/actions-settings/constants.d.mts +1 -1
- package/dist/github/clear-json-files.d.mts +17 -0
- package/dist/github/clear-json-files.d.mts.map +1 -0
- package/dist/github/clear-json-files.mjs +29 -0
- package/dist/github/clear-json-files.mjs.map +1 -0
- package/dist/github/constants.d.mts +1 -0
- package/dist/github/constants.d.mts.map +1 -1
- package/dist/github/constants.mjs +1 -0
- package/dist/github/constants.mjs.map +1 -1
- package/dist/github/environments/api/get-environments.d.mts +1 -1
- package/dist/github/environments/apply.d.mts +3 -3
- package/dist/github/environments/apply.d.mts.map +1 -1
- package/dist/github/environments/apply.mjs +5 -9
- package/dist/github/environments/apply.mjs.map +1 -1
- package/dist/github/environments/backup.d.mts +6 -1
- package/dist/github/environments/backup.d.mts.map +1 -1
- package/dist/github/environments/backup.mjs +11 -5
- package/dist/github/environments/backup.mjs.map +1 -1
- package/dist/github/environments/constants.d.mts +1 -1
- package/dist/github/environments/read-environment-contents.d.mts +0 -1
- package/dist/github/environments/read-environment-contents.d.mts.map +1 -1
- package/dist/github/environments/read-environment-contents.mjs +0 -1
- package/dist/github/environments/read-environment-contents.mjs.map +1 -1
- package/dist/github/index.d.mts +2 -0
- package/dist/github/index.d.mts.map +1 -1
- package/dist/github/index.mjs +2 -0
- package/dist/github/index.mjs.map +1 -1
- package/dist/github/pages/apply.d.mts.map +1 -1
- package/dist/github/pages/apply.mjs +0 -2
- package/dist/github/pages/apply.mjs.map +1 -1
- package/dist/github/pages/backup.d.mts +11 -1
- package/dist/github/pages/backup.d.mts.map +1 -1
- package/dist/github/pages/backup.mjs +18 -5
- package/dist/github/pages/backup.mjs.map +1 -1
- package/dist/github/repository/apply.d.mts.map +1 -1
- package/dist/github/repository/apply.mjs +0 -4
- package/dist/github/repository/apply.mjs.map +1 -1
- package/dist/github/repository/backup.d.mts.map +1 -1
- package/dist/github/repository/backup.mjs +4 -4
- package/dist/github/repository/backup.mjs.map +1 -1
- package/dist/github/ruleset/apply.d.mts.map +1 -1
- package/dist/github/ruleset/apply.mjs +9 -9
- package/dist/github/ruleset/apply.mjs.map +1 -1
- package/dist/github/ruleset/backup.d.mts +7 -0
- package/dist/github/ruleset/backup.d.mts.map +1 -1
- package/dist/github/ruleset/backup.mjs +20 -7
- package/dist/github/ruleset/backup.mjs.map +1 -1
- package/dist/github/ruleset/read-rule-set-contents.d.mts +0 -1
- package/dist/github/ruleset/read-rule-set-contents.d.mts.map +1 -1
- package/dist/github/ruleset/read-rule-set-contents.mjs +0 -1
- package/dist/github/ruleset/read-rule-set-contents.mjs.map +1 -1
- package/dist/github/settings-file-path.d.mts +14 -0
- package/dist/github/settings-file-path.d.mts.map +1 -0
- package/dist/github/settings-file-path.mjs +41 -0
- package/dist/github/settings-file-path.mjs.map +1 -0
- package/dist/github/variables/api/list-repo-variables.d.mts.map +1 -1
- package/dist/github/variables/api/list-repo-variables.mjs +3 -1
- package/dist/github/variables/api/list-repo-variables.mjs.map +1 -1
- package/dist/github/variables/apply.d.mts +9 -0
- package/dist/github/variables/apply.d.mts.map +1 -1
- package/dist/github/variables/apply.mjs +31 -17
- package/dist/github/variables/apply.mjs.map +1 -1
- package/dist/github/variables/backup.d.mts +20 -0
- package/dist/github/variables/backup.d.mts.map +1 -0
- package/dist/github/variables/backup.mjs +35 -0
- package/dist/github/variables/backup.mjs.map +1 -0
- package/dist/github/variables/constants.d.mts +65 -0
- package/dist/github/variables/constants.d.mts.map +1 -0
- package/dist/github/variables/constants.mjs +48 -0
- package/dist/github/variables/constants.mjs.map +1 -0
- package/dist/github/variables/index.d.mts +2 -0
- package/dist/github/variables/index.d.mts.map +1 -1
- package/dist/github/variables/index.mjs +2 -0
- package/dist/github/variables/index.mjs.map +1 -1
- package/dist/github/vulnerability-alerts/apply.d.mts.map +1 -1
- package/dist/github/vulnerability-alerts/apply.mjs +0 -2
- package/dist/github/vulnerability-alerts/apply.mjs.map +1 -1
- package/dist/github/vulnerability-alerts/backup.d.mts +1 -1
- package/dist/github/vulnerability-alerts/backup.d.mts.map +1 -1
- package/dist/github/vulnerability-alerts/backup.mjs +4 -4
- package/dist/github/vulnerability-alerts/backup.mjs.map +1 -1
- package/package.json +29 -28
- package/src/cmd/repo-settings.mts +5 -2
- package/src/github/actions-settings/apply.mts +0 -9
- package/src/github/actions-settings/backup.mts +6 -11
- package/src/github/actions-settings/constants.mts +1 -1
- package/src/github/clear-json-files.mts +31 -0
- package/src/github/clear-json-files.test.mts +78 -0
- package/src/github/constants.mts +2 -0
- package/src/github/environments/api/get-environments.mts +1 -1
- package/src/github/environments/apply.mts +8 -13
- package/src/github/environments/backup.mts +13 -12
- package/src/github/environments/constants.mts +1 -1
- package/src/github/environments/read-environment-contents.mts +0 -4
- package/src/github/index.mts +2 -0
- package/src/github/pages/apply.mts +0 -6
- package/src/github/pages/backup.mts +21 -12
- package/src/github/repository/apply.mts +0 -9
- package/src/github/repository/backup.mts +5 -10
- package/src/github/ruleset/apply.mts +10 -18
- package/src/github/ruleset/backup.mts +23 -13
- package/src/github/ruleset/read-rule-set-contents.mts +0 -4
- package/src/github/ruleset/schema.test.mts +0 -13
- package/src/github/settings-file-path.mts +51 -0
- package/src/github/settings-file-path.test.mts +70 -0
- package/src/github/variables/api/list-repo-variables.mts +3 -1
- package/src/github/variables/apply.mts +54 -27
- package/src/github/variables/backup.mts +47 -0
- package/src/github/variables/constants.mts +61 -0
- package/src/github/variables/constants.test.mts +110 -0
- package/src/github/variables/index.mts +2 -0
- package/src/github/vulnerability-alerts/apply.mts +0 -6
- 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,
|
|
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;
|
|
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":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,MAAM,GACP,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,
|
|
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;
|
|
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
|
|
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(
|
|
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,
|
|
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;
|
|
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 {
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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(
|
|
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":";AACA,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,
|
|
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;
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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;
|
|
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":";
|
|
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
|
|
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
|
-
|
|
20
|
-
|
|
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":";
|
|
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
|