github-settings-as-code 3.0.2 → 3.2.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 +54 -34
- package/dist/cmd/repo-settings.mjs +13 -0
- package/dist/cmd/repo-settings.mjs.map +1 -1
- package/dist/github/actions-settings/api/get-actions-settings.d.mts +1 -1
- package/dist/github/actions-settings/api/get-actions-settings.d.mts.map +1 -1
- package/dist/github/actions-settings/api/get-actions-settings.mjs +4 -0
- package/dist/github/actions-settings/api/get-actions-settings.mjs.map +1 -1
- package/dist/github/actions-settings/api/set-actions-settings.d.mts.map +1 -1
- package/dist/github/actions-settings/api/set-actions-settings.mjs +8 -0
- package/dist/github/actions-settings/api/set-actions-settings.mjs.map +1 -1
- package/dist/github/actions-settings/constants.d.mts +67 -0
- package/dist/github/actions-settings/constants.d.mts.map +1 -1
- package/dist/github/actions-settings/constants.mjs +22 -0
- package/dist/github/actions-settings/constants.mjs.map +1 -1
- package/dist/github/constants.d.mts +2 -0
- package/dist/github/constants.d.mts.map +1 -1
- package/dist/github/constants.mjs +2 -0
- package/dist/github/constants.mjs.map +1 -1
- package/dist/github/environments/api/get-environments.d.mts +16 -0
- package/dist/github/environments/api/get-environments.d.mts.map +1 -0
- package/dist/github/environments/api/get-environments.mjs +98 -0
- package/dist/github/environments/api/get-environments.mjs.map +1 -0
- package/dist/github/environments/api/index.d.mts +3 -0
- package/dist/github/environments/api/index.d.mts.map +1 -0
- package/dist/github/environments/api/index.mjs +3 -0
- package/dist/github/environments/api/index.mjs.map +1 -0
- package/dist/github/environments/api/set-environment.d.mts +10 -0
- package/dist/github/environments/api/set-environment.d.mts.map +1 -0
- package/dist/github/environments/api/set-environment.mjs +73 -0
- package/dist/github/environments/api/set-environment.mjs.map +1 -0
- package/dist/github/environments/apply.d.mts +11 -0
- package/dist/github/environments/apply.d.mts.map +1 -0
- package/dist/github/environments/apply.mjs +67 -0
- package/dist/github/environments/apply.mjs.map +1 -0
- package/dist/github/environments/backup.d.mts +5 -0
- package/dist/github/environments/backup.d.mts.map +1 -0
- package/dist/github/environments/backup.mjs +24 -0
- package/dist/github/environments/backup.mjs.map +1 -0
- package/dist/github/environments/constants.d.mts +354 -0
- package/dist/github/environments/constants.d.mts.map +1 -0
- package/dist/github/environments/constants.mjs +62 -0
- package/dist/github/environments/constants.mjs.map +1 -0
- package/dist/github/environments/index.d.mts +6 -0
- package/dist/github/environments/index.d.mts.map +1 -0
- package/dist/github/environments/index.mjs +6 -0
- package/dist/github/environments/index.mjs.map +1 -0
- package/dist/github/environments/read-environment-contents.d.mts +4 -0
- package/dist/github/environments/read-environment-contents.d.mts.map +1 -0
- package/dist/github/environments/read-environment-contents.mjs +32 -0
- package/dist/github/environments/read-environment-contents.mjs.map +1 -0
- 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/vulnerability-alerts/api/get-vulnerability-alerts.d.mts +10 -0
- package/dist/github/vulnerability-alerts/api/get-vulnerability-alerts.d.mts.map +1 -0
- package/dist/github/vulnerability-alerts/api/get-vulnerability-alerts.mjs +25 -0
- package/dist/github/vulnerability-alerts/api/get-vulnerability-alerts.mjs.map +1 -0
- package/dist/github/vulnerability-alerts/api/index.d.mts +3 -0
- package/dist/github/vulnerability-alerts/api/index.d.mts.map +1 -0
- package/dist/github/vulnerability-alerts/api/index.mjs +3 -0
- package/dist/github/vulnerability-alerts/api/index.mjs.map +1 -0
- package/dist/github/vulnerability-alerts/api/set-vulnerability-alerts.d.mts +10 -0
- package/dist/github/vulnerability-alerts/api/set-vulnerability-alerts.d.mts.map +1 -0
- package/dist/github/vulnerability-alerts/api/set-vulnerability-alerts.mjs +19 -0
- package/dist/github/vulnerability-alerts/api/set-vulnerability-alerts.mjs.map +1 -0
- package/dist/github/vulnerability-alerts/apply.d.mts +11 -0
- package/dist/github/vulnerability-alerts/apply.d.mts.map +1 -0
- package/dist/github/vulnerability-alerts/apply.mjs +47 -0
- package/dist/github/vulnerability-alerts/apply.mjs.map +1 -0
- package/dist/github/vulnerability-alerts/backup.d.mts +5 -0
- package/dist/github/vulnerability-alerts/backup.d.mts.map +1 -0
- package/dist/github/vulnerability-alerts/backup.mjs +22 -0
- package/dist/github/vulnerability-alerts/backup.mjs.map +1 -0
- package/dist/github/vulnerability-alerts/constants.d.mts +72 -0
- package/dist/github/vulnerability-alerts/constants.d.mts.map +1 -0
- package/dist/github/vulnerability-alerts/constants.mjs +21 -0
- package/dist/github/vulnerability-alerts/constants.mjs.map +1 -0
- package/dist/github/vulnerability-alerts/index.d.mts +5 -0
- package/dist/github/vulnerability-alerts/index.d.mts.map +1 -0
- package/dist/github/vulnerability-alerts/index.mjs +5 -0
- package/dist/github/vulnerability-alerts/index.mjs.map +1 -0
- package/package.json +15 -15
- package/src/cmd/repo-settings.mts +17 -0
- package/src/github/actions-settings/api/get-actions-settings.mts +11 -1
- package/src/github/actions-settings/api/set-actions-settings.mts +13 -0
- package/src/github/actions-settings/constants.mts +24 -0
- package/src/github/constants.mts +7 -0
- package/src/github/environments/api/get-environments.mts +155 -0
- package/src/github/environments/api/index.mts +2 -0
- package/src/github/environments/api/set-environment.mts +106 -0
- package/src/github/environments/apply.mts +87 -0
- package/src/github/environments/backup.mts +38 -0
- package/src/github/environments/constants.mts +78 -0
- package/src/github/environments/index.mts +5 -0
- package/src/github/environments/read-environment-contents.mts +53 -0
- package/src/github/index.mts +2 -0
- package/src/github/vulnerability-alerts/api/get-vulnerability-alerts.mts +31 -0
- package/src/github/vulnerability-alerts/api/index.mts +2 -0
- package/src/github/vulnerability-alerts/api/set-vulnerability-alerts.mts +31 -0
- package/src/github/vulnerability-alerts/apply.mts +77 -0
- package/src/github/vulnerability-alerts/backup.mts +36 -0
- package/src/github/vulnerability-alerts/constants.mts +25 -0
- package/src/github/vulnerability-alerts/index.mts +4 -0
|
@@ -0,0 +1,77 @@
|
|
|
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 * as t from 'ts-fortress';
|
|
6
|
+
import {
|
|
7
|
+
formatUncommittedFiles,
|
|
8
|
+
isDirectlyExecuted,
|
|
9
|
+
pathExists,
|
|
10
|
+
Result,
|
|
11
|
+
} from 'ts-repo-utils';
|
|
12
|
+
import { settingsJsonName, vulnerabilityAlertsDir } from '../constants.mjs';
|
|
13
|
+
import {
|
|
14
|
+
getVulnerabilityAlerts,
|
|
15
|
+
setVulnerabilityAlerts,
|
|
16
|
+
} from './api/index.mjs';
|
|
17
|
+
import { VulnerabilityAlertsSettings } from './constants.mjs';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* `repo-settings/vulnerability-alerts/settings.json` を Dependabot alerts に反映する。
|
|
21
|
+
*
|
|
22
|
+
* 設定ファイルを置いていない repository では何もしない。 pages と同じ理由 —
|
|
23
|
+
* この package は他の repository からも使われるので、ファイルの不在を
|
|
24
|
+
* 「無効にせよ」と読むと、宣言していない設定を勝手に落としてしまう。
|
|
25
|
+
*/
|
|
26
|
+
export const applyVulnerabilityAlerts = async (): Promise<void> => {
|
|
27
|
+
const settingsPath = path.resolve(vulnerabilityAlertsDir, settingsJsonName);
|
|
28
|
+
|
|
29
|
+
if (!(await pathExists(settingsPath))) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const settings = await readSettings(settingsPath);
|
|
34
|
+
|
|
35
|
+
await setVulnerabilityAlerts(settings);
|
|
36
|
+
|
|
37
|
+
// 反映後の実際の値でローカルのファイルを更新する
|
|
38
|
+
{
|
|
39
|
+
const applied = await getVulnerabilityAlerts();
|
|
40
|
+
|
|
41
|
+
const str = JSON.stringify(applied, undefined, 2);
|
|
42
|
+
|
|
43
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename
|
|
44
|
+
await fs.writeFile(settingsPath, str);
|
|
45
|
+
|
|
46
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename
|
|
47
|
+
await fs.writeFile(
|
|
48
|
+
path.resolve(vulnerabilityAlertsDir, 'bk', settingsJsonName),
|
|
49
|
+
str,
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
await formatUncommittedFiles();
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const readSettings = async (
|
|
57
|
+
settingsPath: string,
|
|
58
|
+
): Promise<VulnerabilityAlertsSettings> => {
|
|
59
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename
|
|
60
|
+
const settingsText = await fs.readFile(settingsPath, { encoding: 'utf8' });
|
|
61
|
+
|
|
62
|
+
const validationResult = VulnerabilityAlertsSettings.validate(
|
|
63
|
+
JSON.parse(settingsText),
|
|
64
|
+
);
|
|
65
|
+
|
|
66
|
+
if (Result.isErr(validationResult)) {
|
|
67
|
+
throw new Error(
|
|
68
|
+
t.validationErrorsToMessages(validationResult.value).join('\n'),
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return validationResult.value;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
if (isDirectlyExecuted(import.meta.url)) {
|
|
76
|
+
await applyVulnerabilityAlerts();
|
|
77
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
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 {
|
|
6
|
+
formatUncommittedFiles,
|
|
7
|
+
isDirectlyExecuted,
|
|
8
|
+
makeEmptyDir,
|
|
9
|
+
} from 'ts-repo-utils';
|
|
10
|
+
import { settingsJsonName, vulnerabilityAlertsDir } from '../constants.mjs';
|
|
11
|
+
import { getVulnerabilityAlerts } from './api/index.mjs';
|
|
12
|
+
|
|
13
|
+
const backupDir = path.resolve(vulnerabilityAlertsDir, './bk');
|
|
14
|
+
|
|
15
|
+
/** Dependabot alerts の現在値を `bk/` に保存する。 */
|
|
16
|
+
export const backupVulnerabilityAlerts = async (
|
|
17
|
+
fmt: boolean = true,
|
|
18
|
+
): Promise<void> => {
|
|
19
|
+
await makeEmptyDir(backupDir);
|
|
20
|
+
|
|
21
|
+
const settings = await getVulnerabilityAlerts();
|
|
22
|
+
|
|
23
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename
|
|
24
|
+
await fs.writeFile(
|
|
25
|
+
path.resolve(backupDir, settingsJsonName),
|
|
26
|
+
JSON.stringify(settings, undefined, 2),
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
if (fmt) {
|
|
30
|
+
await formatUncommittedFiles();
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
if (isDirectlyExecuted(import.meta.url)) {
|
|
35
|
+
await backupVulnerabilityAlerts();
|
|
36
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as t from 'ts-fortress';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* `repo-settings/vulnerability-alerts/settings.json` の型。
|
|
5
|
+
*
|
|
6
|
+
* Settings > Advanced Security > Dependabot alerts に対応する。
|
|
7
|
+
*
|
|
8
|
+
* `security_and_analysis` とは別の API
|
|
9
|
+
* (`GET|PUT|DELETE /repos/{owner}/{repo}/vulnerability-alerts`) で、
|
|
10
|
+
* 値も JSON body ではなく 204 / 404 で返ってくる。そのため
|
|
11
|
+
* `repository-settings/settings.json` には載せられず、 pages と同じく
|
|
12
|
+
* 独立した設定ファイルにしている。
|
|
13
|
+
*
|
|
14
|
+
* `repository-settings/settings.json` の `dependabot_security_updates` は
|
|
15
|
+
* これとは別物 — あちらは「脆弱な依存を直す PR を自動で作るか」で、
|
|
16
|
+
* この repository では `pnpm-update` が lockfile を持っているため無効のまま。
|
|
17
|
+
* ここで管理するのは「既知の脆弱性を知らせるか」だけ。
|
|
18
|
+
*/
|
|
19
|
+
export const VulnerabilityAlertsSettings = t.record({
|
|
20
|
+
enabled: t.boolean(false),
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
export type VulnerabilityAlertsSettings = t.TypeOf<
|
|
24
|
+
typeof VulnerabilityAlertsSettings
|
|
25
|
+
>;
|