github-settings-as-code 3.1.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -39
- package/dist/cmd/repo-settings.mjs +17 -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 +3 -0
- package/dist/github/constants.d.mts.map +1 -1
- package/dist/github/constants.mjs +3 -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 +63 -0
- package/dist/github/environments/apply.mjs.map +1 -0
- package/dist/github/environments/backup.d.mts +10 -0
- package/dist/github/environments/backup.d.mts.map +1 -0
- package/dist/github/environments/backup.mjs +30 -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 +3 -0
- package/dist/github/environments/read-environment-contents.d.mts.map +1 -0
- package/dist/github/environments/read-environment-contents.mjs +31 -0
- package/dist/github/environments/read-environment-contents.mjs.map +1 -0
- package/dist/github/index.d.mts +4 -0
- package/dist/github/index.d.mts.map +1 -1
- package/dist/github/index.mjs +4 -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/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 +45 -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 +29 -28
- package/src/cmd/repo-settings.mts +22 -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 +9 -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 +82 -0
- package/src/github/environments/backup.mts +39 -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 +49 -0
- package/src/github/index.mts +4 -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/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 +71 -0
- package/src/github/vulnerability-alerts/backup.mts +31 -0
- package/src/github/vulnerability-alerts/constants.mts +25 -0
- package/src/github/vulnerability-alerts/index.mts +4 -0
package/README.md
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
|
-
#
|
|
1
|
+
# GitHub Settings as Code
|
|
2
2
|
|
|
3
|
-
GitHub
|
|
3
|
+
A CLI for managing a GitHub repository's settings as JSON files.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
The settings files are read from `repo-settings/` at the repository root.
|
|
6
6
|
|
|
7
|
-
> **v3.0.0
|
|
8
|
-
>
|
|
9
|
-
>
|
|
7
|
+
> **Breaking change in v3.0.0**: the settings directory moved from `github/` to
|
|
8
|
+
> `repo-settings/`. Migrate with `git mv github repo-settings`. The old name
|
|
9
|
+
> looked like an alias of `.github/` and suggested that workflows lived there
|
|
10
|
+
> too.
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
```sh
|
|
15
|
+
npm install -D github-settings-as-code
|
|
16
|
+
```
|
|
10
17
|
|
|
11
18
|
## Usage
|
|
12
19
|
|
|
@@ -14,19 +21,19 @@ GitHub の repository 設定を JSON ファイルで管理するための CLI。
|
|
|
14
21
|
repo-settings <command> [target] [options]
|
|
15
22
|
```
|
|
16
23
|
|
|
17
|
-
| Command |
|
|
18
|
-
| -------- |
|
|
19
|
-
| `apply` |
|
|
20
|
-
| `backup` |
|
|
24
|
+
| Command | Description |
|
|
25
|
+
| -------- | ---------------------------------------------------------------------- |
|
|
26
|
+
| `apply` | Apply the local settings files to GitHub |
|
|
27
|
+
| `backup` | Re-snapshot the local settings files from the current values on GitHub |
|
|
21
28
|
|
|
22
|
-
| Target
|
|
23
|
-
|
|
|
24
|
-
| `all
|
|
25
|
-
| `repository`
|
|
26
|
-
| `rulesets`
|
|
27
|
-
| `variables`
|
|
28
|
-
| `actions`
|
|
29
|
-
| `pages`
|
|
29
|
+
| Target | Files | `apply` | `backup` |
|
|
30
|
+
| --------------- | ------------------------------------------------- | ------- | -------- |
|
|
31
|
+
| `all` (default) | All of the below | ✅ | ✅ |
|
|
32
|
+
| `repository` | `repo-settings/repository-settings/settings.json` | ✅ | ✅ |
|
|
33
|
+
| `rulesets` | `repo-settings/rulesets/*.json` | ✅ | ✅ |
|
|
34
|
+
| `variables` | `repo-settings/variables/settings.json` | ✅ | ✅ |
|
|
35
|
+
| `actions` | `repo-settings/actions-settings/settings.json` | ✅ | ✅ |
|
|
36
|
+
| `pages` | `repo-settings/pages/settings.json` | ✅ | ✅ |
|
|
30
37
|
|
|
31
38
|
```sh
|
|
32
39
|
repo-settings apply
|
|
@@ -35,34 +42,49 @@ repo-settings backup
|
|
|
35
42
|
repo-settings apply --owner noshiro-pf --repo ts-repo-utils
|
|
36
43
|
```
|
|
37
44
|
|
|
38
|
-
|
|
45
|
+
`backup` rewrites the settings files themselves from what GitHub currently
|
|
46
|
+
has — there is one copy of each resource, not a declaration and a mirror of it.
|
|
47
|
+
`apply` reads the values back from GitHub afterwards and rewrites the files
|
|
48
|
+
with what was actually applied, so a value GitHub canonicalized or refused
|
|
49
|
+
shows up as a diff.
|
|
50
|
+
|
|
51
|
+
## Resolving the target repository
|
|
39
52
|
|
|
40
|
-
|
|
53
|
+
The target is resolved in the following order. It is normally derived from
|
|
54
|
+
`git remote`, so neither option is usually needed.
|
|
41
55
|
|
|
42
|
-
1.
|
|
43
|
-
2.
|
|
56
|
+
1. The command-line options `--owner` / `--repo`
|
|
57
|
+
2. The environment variables `OWNER` / `REPO_NAME`
|
|
44
58
|
3. `git remote get-url origin`
|
|
45
|
-
4. `package.json`
|
|
59
|
+
4. The `name` field of `package.json` (repository name only)
|
|
60
|
+
|
|
61
|
+
## Authentication
|
|
46
62
|
|
|
47
|
-
|
|
63
|
+
The token is resolved in the following order. Locally, nothing needs to be
|
|
64
|
+
configured once you have run `gh auth login`.
|
|
48
65
|
|
|
49
|
-
|
|
66
|
+
1. The environment variables `GITHUB_APP_TOKEN` / `GH_TOKEN` /
|
|
67
|
+
`PERSONAL_ACCESS_TOKEN`
|
|
68
|
+
2. `gh auth token` (the gh CLI's login)
|
|
50
69
|
|
|
51
|
-
|
|
52
|
-
|
|
70
|
+
`GITHUB_TOKEN` is deliberately not read. In GitHub Actions it may hold the
|
|
71
|
+
default token, which lacks the Administration permission.
|
|
53
72
|
|
|
54
|
-
CI
|
|
55
|
-
|
|
56
|
-
|
|
73
|
+
In CI, pass a GitHub App installation token as `GH_TOKEN`. Changing repository
|
|
74
|
+
settings and rulesets requires the **Administration** permission, which the
|
|
75
|
+
default `GITHUB_TOKEN` cannot be granted (`administration` is not a valid key
|
|
76
|
+
under `permissions:`).
|
|
57
77
|
|
|
58
|
-
##
|
|
78
|
+
## Managed settings
|
|
59
79
|
|
|
60
|
-
|
|
|
61
|
-
| ------------------------------------------------- |
|
|
62
|
-
| `repo-settings/repository-settings/settings.json` | Settings > General
|
|
63
|
-
| `repo-settings/rulesets/*.json` | Settings > Rules > Rulesets
|
|
64
|
-
| `repo-settings/actions-settings/settings.json` | Settings > Actions > General
|
|
65
|
-
| `repo-settings/pages/settings.json` | Settings > Pages > Build and deployment
|
|
80
|
+
| File | Location on GitHub |
|
|
81
|
+
| ------------------------------------------------- | ------------------------------------------------------ |
|
|
82
|
+
| `repo-settings/repository-settings/settings.json` | Settings > General |
|
|
83
|
+
| `repo-settings/rulesets/*.json` | Settings > Rules > Rulesets |
|
|
84
|
+
| `repo-settings/actions-settings/settings.json` | Settings > Actions > General |
|
|
85
|
+
| `repo-settings/pages/settings.json` | Settings > Pages > Build and deployment |
|
|
86
|
+
| `repo-settings/variables/settings.json` | Settings > Secrets and variables > Actions > Variables |
|
|
66
87
|
|
|
67
|
-
`repo-settings/pages/settings.json
|
|
68
|
-
|
|
88
|
+
In a repository without `repo-settings/pages/settings.json`, Pages is left
|
|
89
|
+
untouched, so that a repository that does not use Pages never has it enabled by
|
|
90
|
+
mistake.
|
|
@@ -10,15 +10,18 @@ const HELP = dedent `
|
|
|
10
10
|
|
|
11
11
|
Commands:
|
|
12
12
|
apply [target] ローカルの設定ファイルを GitHub に反映する
|
|
13
|
-
backup [target] GitHub
|
|
13
|
+
backup [target] GitHub の現在値でローカルの設定ファイルを撮り直す
|
|
14
14
|
|
|
15
15
|
Targets:
|
|
16
16
|
all すべて(既定)
|
|
17
17
|
repository repo-settings/repository-settings/settings.json
|
|
18
18
|
rulesets repo-settings/rulesets/*.json
|
|
19
|
-
variables
|
|
19
|
+
variables repo-settings/variables/settings.json
|
|
20
20
|
actions repo-settings/actions-settings/settings.json
|
|
21
21
|
pages repo-settings/pages/settings.json
|
|
22
|
+
environments repo-settings/environments/*.json
|
|
23
|
+
vulnerability-alerts
|
|
24
|
+
repo-settings/vulnerability-alerts/settings.json
|
|
22
25
|
|
|
23
26
|
Options:
|
|
24
27
|
--owner <owner> 対象の owner
|
|
@@ -47,6 +50,8 @@ const TARGETS = [
|
|
|
47
50
|
'variables',
|
|
48
51
|
'actions',
|
|
49
52
|
'pages',
|
|
53
|
+
'environments',
|
|
54
|
+
'vulnerability-alerts',
|
|
50
55
|
];
|
|
51
56
|
const COMMAND_SET = new Set(COMMANDS);
|
|
52
57
|
const isCommand = (value) => COMMAND_SET.has(value);
|
|
@@ -93,12 +98,16 @@ const runners = {
|
|
|
93
98
|
await github.applyRepositorySettings();
|
|
94
99
|
await github.applyActionsSettings();
|
|
95
100
|
await github.applyPagesSettings();
|
|
101
|
+
await github.applyEnvironments();
|
|
102
|
+
await github.applyVulnerabilityAlerts();
|
|
96
103
|
},
|
|
97
104
|
repository: github.applyRepositorySettings,
|
|
98
105
|
rulesets: github.applyRulesets,
|
|
99
106
|
variables: github.applyVariables,
|
|
100
107
|
actions: github.applyActionsSettings,
|
|
101
108
|
pages: github.applyPagesSettings,
|
|
109
|
+
environments: github.applyEnvironments,
|
|
110
|
+
'vulnerability-alerts': github.applyVulnerabilityAlerts,
|
|
102
111
|
},
|
|
103
112
|
backup: {
|
|
104
113
|
all: async () => {
|
|
@@ -106,11 +115,17 @@ const runners = {
|
|
|
106
115
|
await github.backupRepositorySettings();
|
|
107
116
|
await github.backupActionsSettings();
|
|
108
117
|
await github.backupPagesSettings();
|
|
118
|
+
await github.backupEnvironments();
|
|
119
|
+
await github.backupVulnerabilityAlerts();
|
|
120
|
+
await github.backupVariables();
|
|
109
121
|
},
|
|
110
122
|
repository: github.backupRepositorySettings,
|
|
111
123
|
rulesets: github.backupRulesets,
|
|
124
|
+
variables: github.backupVariables,
|
|
112
125
|
actions: github.backupActionsSettings,
|
|
113
126
|
pages: github.backupPagesSettings,
|
|
127
|
+
environments: github.backupEnvironments,
|
|
128
|
+
'vulnerability-alerts': github.backupVulnerabilityAlerts,
|
|
114
129
|
},
|
|
115
130
|
};
|
|
116
131
|
const runner = runners[commandArg][targetArg];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-settings.mjs","sourceRoot":"","sources":["../../src/cmd/repo-settings.mts"],"names":[],"mappings":";AAEA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,eAAe,CAAC;AACvB,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGpC,MAAM,IAAI,GAAG,MAAM,CAAA
|
|
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":"apply.d.mts","sourceRoot":"","sources":["../../../src/github/actions-settings/apply.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"apply.d.mts","sourceRoot":"","sources":["../../../src/github/actions-settings/apply.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAavB,2FAA2F;AAC3F,eAAO,MAAM,oBAAoB,QAAa,OAAO,CAAC,IAAI,CAgBzD,CAAC"}
|
|
@@ -6,11 +6,9 @@ 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
|
-
import { backupActionsSettings } from './backup.mjs';
|
|
10
9
|
import { ActionsSettings } from './constants.mjs';
|
|
11
10
|
|
|
12
11
|
export const applyActionsSettings = async () => {
|
|
13
|
-
await backupActionsSettings(false);
|
|
14
12
|
const settings = await readSettings();
|
|
15
13
|
await setActionsSettings(settings);
|
|
16
14
|
|
|
@@ -19,8 +17,6 @@ export const applyActionsSettings = async () => {
|
|
|
19
17
|
const str = JSON.stringify(applied, undefined, 2);
|
|
20
18
|
|
|
21
19
|
await fs.writeFile(path.resolve(actionsSettingsDir, settingsJsonName), str);
|
|
22
|
-
|
|
23
|
-
await fs.writeFile(path.resolve(actionsSettingsDir, 'bk', settingsJsonName), str);
|
|
24
20
|
await formatUncommittedFiles();
|
|
25
21
|
}
|
|
26
22
|
};
|
|
@@ -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,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,
|
|
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,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,2FAA2F;AAC3F,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,IAAmB,EAAE;IAC5D,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,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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import 'dotenv/config';
|
|
3
|
-
/** Settings > Actions > General
|
|
3
|
+
/** Settings > Actions > General の現在値を宣言ファイルへ撮り直す。 */
|
|
4
4
|
export declare const backupActionsSettings: (fmt?: boolean) => Promise<void>;
|
|
5
5
|
//# sourceMappingURL=backup.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.d.mts","sourceRoot":"","sources":["../../../src/github/actions-settings/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"backup.d.mts","sourceRoot":"","sources":["../../../src/github/actions-settings/backup.mts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC;AAQvB,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,SAC3B,OAAO,KACX,OAAO,CAAC,IAAI,CAcd,CAAC"}
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
import 'dotenv/config';
|
|
3
3
|
import * as fs from 'node:fs/promises';
|
|
4
4
|
import * as path from 'node:path';
|
|
5
|
-
import { formatUncommittedFiles, isDirectlyExecuted
|
|
5
|
+
import { formatUncommittedFiles, isDirectlyExecuted } from 'ts-repo-utils';
|
|
6
|
+
import { clearJsonFilesIn } from '../clear-json-files.mjs';
|
|
6
7
|
import { actionsSettingsDir, settingsJsonName } from '../constants.mjs';
|
|
7
8
|
import { getActionsSettings } from './api/index.mjs';
|
|
8
|
-
const backupDir = path.resolve(actionsSettingsDir, './bk');
|
|
9
9
|
|
|
10
10
|
export const backupActionsSettings = async (fmt = true) => {
|
|
11
|
-
await makeEmptyDir(backupDir);
|
|
12
11
|
const settings = await getActionsSettings();
|
|
12
|
+
await clearJsonFilesIn(actionsSettingsDir);
|
|
13
13
|
|
|
14
|
-
await fs.writeFile(path.resolve(
|
|
14
|
+
await fs.writeFile(path.resolve(actionsSettingsDir, settingsJsonName), JSON.stringify(settings, undefined, 2));
|
|
15
15
|
if (fmt) {
|
|
16
16
|
await formatUncommittedFiles();
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.mjs","sourceRoot":"","sources":["../../../src/github/actions-settings/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/actions-settings/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,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,qDAAqD;AACrD,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,GAAG,GAAY,IAAI,EACJ,EAAE;IACjB,MAAM,QAAQ,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE5C,MAAM,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IAE3C,mEAAmE;IACnE,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAClD,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,qBAAqB,EAAE,CAAC;AAChC,CAAC"}
|
|
@@ -149,7 +149,7 @@ export declare const ActionsSettings: Readonly<{
|
|
|
149
149
|
* `read` にできるのは、 workflow 側が全て明示的に `permissions` を宣言して
|
|
150
150
|
* いる場合だけ。宣言の無い job はこの既定値をそのまま受け取るため、
|
|
151
151
|
* `write` のままだと「 branch の中身が何であれ書き込めるトークン」が
|
|
152
|
-
* 渡る。 .github/workflows/
|
|
152
|
+
* 渡る。 .github/workflows/code-check.yml 冒頭の注記を参照。
|
|
153
153
|
*/
|
|
154
154
|
readonly default_workflow_permissions: Readonly<{
|
|
155
155
|
typeName: string;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `dir` の直下の `*.json` を消す。ディレクトリが無ければ作る。
|
|
3
|
+
*
|
|
4
|
+
* backup が書き込む前にこれを呼ぶ。撮り直したあとにそこに在るものが、そのまま
|
|
5
|
+
* 「GitHub から取れたもの」になる — 取れなかった資源は `git status` に削除と
|
|
6
|
+
* して現れる。消さずに上書きするだけだと、取れなかった資源の古いファイルが
|
|
7
|
+
* 残り、取れたのと見分けがつかない。
|
|
8
|
+
*
|
|
9
|
+
* まだ apply していない宣言も同じように削除として現れるが、それも見えた方が
|
|
10
|
+
* よい情報で、コミットしなければ失われない。
|
|
11
|
+
*
|
|
12
|
+
* `rm -rf` ではなく直下の `*.json` に限る。宣言の隣に置いてある README
|
|
13
|
+
* (`repo-settings/variables/README.md`)のような、JSON でない同居ファイルを
|
|
14
|
+
* 巻き込まないため。
|
|
15
|
+
*/
|
|
16
|
+
export declare const clearJsonFilesIn: (dir: string) => Promise<void>;
|
|
17
|
+
//# sourceMappingURL=clear-json-files.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clear-json-files.d.mts","sourceRoot":"","sources":["../../src/github/clear-json-files.mts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,gBAAgB,QAAe,MAAM,KAAG,OAAO,CAAC,IAAI,CAYhE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as fs from 'node:fs/promises';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
export const clearJsonFilesIn = async (dir) => {
|
|
19
|
+
|
|
20
|
+
await fs.mkdir(dir, { recursive: true });
|
|
21
|
+
|
|
22
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
23
|
+
for (const entry of entries) {
|
|
24
|
+
if (entry.isFile() && entry.name.endsWith('.json')) {
|
|
25
|
+
await fs.rm(path.resolve(dir, entry.name));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=clear-json-files.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clear-json-files.mjs","sourceRoot":"","sources":["../../src/github/clear-json-files.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAW,EAAiB,EAAE;IACnE,mEAAmE;IACnE,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEzC,mEAAmE;IACnE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACnD,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -4,7 +4,10 @@ export declare const settingsJsonName = "settings.json";
|
|
|
4
4
|
export declare const repositorySettingsDir: string;
|
|
5
5
|
export declare const actionsSettingsDir: string;
|
|
6
6
|
export declare const pagesSettingsDir: string;
|
|
7
|
+
export declare const environmentsDir: string;
|
|
8
|
+
export declare const vulnerabilityAlertsDir: string;
|
|
7
9
|
export declare const rulesetsDir: string;
|
|
10
|
+
export declare const variablesDir: string;
|
|
8
11
|
export declare const octokitHeaders: {
|
|
9
12
|
readonly 'X-GitHub-Api-Version': '2022-11-28';
|
|
10
13
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../../src/github/constants.mts"],"names":[],"mappings":"AAKA,eAAO,MAAM,KAAK,EAAE,MAAyB,CAAC;AAE9C,eAAO,MAAM,IAAI,EAAE,MAAwB,CAAC;AAM5C,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAEhD,eAAO,MAAM,qBAAqB,QAGjC,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAG9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAuC,CAAC;AAErE,eAAO,MAAM,WAAW,QAA0C,CAAC;AAEnE,eAAO,MAAM,cAAc;aACzB,sBAAsB,EAAE,YAAY;CAC5B,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../../src/github/constants.mts"],"names":[],"mappings":"AAKA,eAAO,MAAM,KAAK,EAAE,MAAyB,CAAC;AAE9C,eAAO,MAAM,IAAI,EAAE,MAAwB,CAAC;AAM5C,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAEhD,eAAO,MAAM,qBAAqB,QAGjC,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAG9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAuC,CAAC;AAErE,eAAO,MAAM,eAAe,QAA8C,CAAC;AAE3E,eAAO,MAAM,sBAAsB,QAGlC,CAAC;AAEF,eAAO,MAAM,WAAW,QAA0C,CAAC;AAEnE,eAAO,MAAM,YAAY,QAA2C,CAAC;AAErE,eAAO,MAAM,cAAc;aACzB,sBAAsB,EAAE,YAAY;CAC5B,CAAC"}
|
|
@@ -10,7 +10,10 @@ export const settingsJsonName = 'settings.json';
|
|
|
10
10
|
export const repositorySettingsDir = path.resolve(settingsDir, './repository-settings');
|
|
11
11
|
export const actionsSettingsDir = path.resolve(settingsDir, './actions-settings');
|
|
12
12
|
export const pagesSettingsDir = path.resolve(settingsDir, './pages');
|
|
13
|
+
export const environmentsDir = path.resolve(settingsDir, './environments');
|
|
14
|
+
export const vulnerabilityAlertsDir = path.resolve(settingsDir, './vulnerability-alerts');
|
|
13
15
|
export const rulesetsDir = path.resolve(settingsDir, './rulesets');
|
|
16
|
+
export const variablesDir = path.resolve(settingsDir, './variables');
|
|
14
17
|
export const octokitHeaders = {
|
|
15
18
|
'X-GitHub-Api-Version': '2022-11-28',
|
|
16
19
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../../src/github/constants.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,UAAU,GAAG,MAAM,iBAAiB,EAAE,CAAC;AAE7C,MAAM,CAAC,MAAM,KAAK,GAAW,UAAU,CAAC,KAAK,CAAC;AAE9C,MAAM,CAAC,MAAM,IAAI,GAAW,UAAU,CAAC,IAAI,CAAC;AAE5C,yEAAyE;AACzE,iEAAiE;AACjE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAEhD,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAC/C,WAAW,EACX,uBAAuB,CACxB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAC5C,WAAW,EACX,oBAAoB,CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,sBAAsB,EAAE,YAAY;CAC5B,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../../src/github/constants.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,UAAU,GAAG,MAAM,iBAAiB,EAAE,CAAC;AAE7C,MAAM,CAAC,MAAM,KAAK,GAAW,UAAU,CAAC,KAAK,CAAC;AAE9C,MAAM,CAAC,MAAM,IAAI,GAAW,UAAU,CAAC,IAAI,CAAC;AAE5C,yEAAyE;AACzE,iEAAiE;AACjE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAEhD,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAC/C,WAAW,EACX,uBAAuB,CACxB,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAC5C,WAAW,EACX,oBAAoB,CACrB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;AAE3E,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,OAAO,CAChD,WAAW,EACX,wBAAwB,CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,sBAAsB,EAAE,YAAY;CAC5B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { EnvironmentSettings } from '../constants.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* Settings > Environments の現在値を、宣言ファイルと同じ形にして返す。
|
|
4
|
+
*
|
|
5
|
+
* 名前順に整える。 GitHub が返す順は作成順で、環境を 1 つ足しただけで
|
|
6
|
+
* 宣言ファイルの中身が並び替わると差分が読めなくなるため。
|
|
7
|
+
*/
|
|
8
|
+
export declare const getAllEnvironments: () => Promise<readonly EnvironmentSettings[]>;
|
|
9
|
+
/** 「 Selected branches and tags 」に登録されている pattern を列挙する。 */
|
|
10
|
+
export declare const getDeploymentBranchPolicies: (environmentName: string) => Promise<readonly DeploymentBranchPolicy[]>;
|
|
11
|
+
export type DeploymentBranchPolicy = Readonly<{
|
|
12
|
+
id: number;
|
|
13
|
+
name: string;
|
|
14
|
+
type: 'branch' | 'tag';
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=get-environments.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-environments.d.mts","sourceRoot":"","sources":["../../../../src/github/environments/api/get-environments.mts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,QAAa,OAAO,CACjD,SAAS,mBAAmB,EAAE,CAoC/B,CAAC;AAWF,4DAA4D;AAC5D,eAAO,MAAM,2BAA2B,oBACrB,MAAM,KACtB,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAkB3C,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,KAAK,CAAC;CACxB,CAAC,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Arr } from 'ts-data-forge';
|
|
2
|
+
import * as t from 'ts-fortress';
|
|
3
|
+
import { Result } from 'ts-repo-utils';
|
|
4
|
+
import { octokitHeaders, OWNER, REPO } from '../../constants.mjs';
|
|
5
|
+
import { octokit } from '../../octokit.mjs';
|
|
6
|
+
import { EnvironmentSettings } from '../constants.mjs';
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
export const getAllEnvironments = async () => {
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
const response = await octokit.request('GET /repos/{owner}/{repo}/environments', { owner: OWNER, repo: REPO, headers: octokitHeaders, per_page: 100 });
|
|
19
|
+
const environments = response.data.environments ?? [];
|
|
20
|
+
const settings = await Promise.all(environments.map(async (environment) => {
|
|
21
|
+
const policy = environment.deployment_branch_policy ?? undefined;
|
|
22
|
+
return EnvironmentSettings.fill({
|
|
23
|
+
name: environment.name,
|
|
24
|
+
...parseProtectionRules(environment.protection_rules),
|
|
25
|
+
deployment_branch_policy: policy === undefined
|
|
26
|
+
? null
|
|
27
|
+
: {
|
|
28
|
+
protected_branches: policy.protected_branches,
|
|
29
|
+
custom_branch_policies: policy.custom_branch_policies,
|
|
30
|
+
},
|
|
31
|
+
deployment_branch_policies: policy?.custom_branch_policies === true
|
|
32
|
+
? await getDeploymentBranchPolicyNames(environment.name)
|
|
33
|
+
: [],
|
|
34
|
+
});
|
|
35
|
+
}));
|
|
36
|
+
return settings.toSorted((a, b) => a.name.localeCompare(b.name));
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const getDeploymentBranchPolicyNames = async (environmentName) => {
|
|
40
|
+
const policies = await getDeploymentBranchPolicies(environmentName);
|
|
41
|
+
return policies.map(({ name, type }) => ({ name, type }));
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export const getDeploymentBranchPolicies = async (environmentName) => {
|
|
45
|
+
|
|
46
|
+
const response = await octokit.request('GET /repos/{owner}/{repo}/environments/{environment_name}/deployment-branch-policies', {
|
|
47
|
+
owner: OWNER,
|
|
48
|
+
repo: REPO,
|
|
49
|
+
environment_name: environmentName,
|
|
50
|
+
headers: octokitHeaders,
|
|
51
|
+
per_page: 100,
|
|
52
|
+
});
|
|
53
|
+
return response.data.branch_policies.map((policy) => ({
|
|
54
|
+
id: policy.id ?? 0,
|
|
55
|
+
name: policy.name ?? '',
|
|
56
|
+
type: policy.type === 'tag' ? 'tag' : 'branch',
|
|
57
|
+
}));
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
const parseProtectionRules = (protectionRules) => {
|
|
68
|
+
const validationResult = ProtectionRules.validate(protectionRules ?? []);
|
|
69
|
+
if (Result.isErr(validationResult)) {
|
|
70
|
+
throw new Error(Arr.toUnshifted('GitHub が返した environment の protection_rules を読めませんでした。')(t.validationErrorsToMessages(validationResult.value)).join('\n'));
|
|
71
|
+
}
|
|
72
|
+
const rules = validationResult.value;
|
|
73
|
+
const waitTimer = rules.find((rule) => rule.type === 'wait_timer');
|
|
74
|
+
const requiredReviewers = rules.find((rule) => rule.type === 'required_reviewers');
|
|
75
|
+
return {
|
|
76
|
+
wait_timer: waitTimer?.wait_timer ?? 0,
|
|
77
|
+
prevent_self_review: requiredReviewers?.prevent_self_review ?? false,
|
|
78
|
+
reviewers: (requiredReviewers?.reviewers ?? []).map((entry) => ({
|
|
79
|
+
type: entry.type,
|
|
80
|
+
id: entry.reviewer.id,
|
|
81
|
+
})),
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
const ProtectionRules = t.array(t.record({
|
|
85
|
+
type: t.string(''),
|
|
86
|
+
wait_timer: t.optional(t.number(0)),
|
|
87
|
+
prevent_self_review: t.optional(t.boolean(false)),
|
|
88
|
+
reviewers: t.optional(t.array(t.record({
|
|
89
|
+
type: t.enumType(['User', 'Team'], {
|
|
90
|
+
typeName: 'EnvironmentReviewerType',
|
|
91
|
+
defaultValue: 'User',
|
|
92
|
+
}),
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
reviewer: t.record({ id: t.number(0) }),
|
|
96
|
+
}))),
|
|
97
|
+
}), { typeName: 'EnvironmentProtectionRules' });
|
|
98
|
+
//# sourceMappingURL=get-environments.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-environments.mjs","sourceRoot":"","sources":["../../../../src/github/environments/api/get-environments.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../../src/github/environments/api/index.mts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../../src/github/environments/api/index.mts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
|
|
@@ -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"}
|