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