reposets 0.4.2 → 0.4.3

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.
@@ -6,7 +6,7 @@ import { parse } from "smol-toml";
6
6
 
7
7
  //#region src/cli/commands/doctor.ts
8
8
  const configOption = Options.file("config").pipe(Options.withDescription("Path to config directory or reposets.config.toml file"), Options.optional);
9
- const KNOWN_CONFIG_KEYS = new Set([
9
+ const KNOWN_CONFIG_KEYS = /* @__PURE__ */ new Set([
10
10
  "owner",
11
11
  "log_level",
12
12
  "settings",
@@ -18,7 +18,7 @@ const KNOWN_CONFIG_KEYS = new Set([
18
18
  "code_scanning",
19
19
  "groups"
20
20
  ]);
21
- const KNOWN_GROUP_KEYS = new Set([
21
+ const KNOWN_GROUP_KEYS = /* @__PURE__ */ new Set([
22
22
  "owner",
23
23
  "repos",
24
24
  "credentials",
@@ -31,19 +31,19 @@ const KNOWN_GROUP_KEYS = new Set([
31
31
  "code_scanning",
32
32
  "cleanup"
33
33
  ]);
34
- const KNOWN_CLEANUP_KEYS = new Set([
34
+ const KNOWN_CLEANUP_KEYS = /* @__PURE__ */ new Set([
35
35
  "secrets",
36
36
  "variables",
37
37
  "rulesets",
38
38
  "environments"
39
39
  ]);
40
- const KNOWN_CLEANUP_SECRETS_KEYS = new Set([
40
+ const KNOWN_CLEANUP_SECRETS_KEYS = /* @__PURE__ */ new Set([
41
41
  "actions",
42
42
  "dependabot",
43
43
  "codespaces",
44
44
  "environments"
45
45
  ]);
46
- const KNOWN_CLEANUP_VARIABLES_KEYS = new Set(["actions", "environments"]);
46
+ const KNOWN_CLEANUP_VARIABLES_KEYS = /* @__PURE__ */ new Set(["actions", "environments"]);
47
47
  function findClosestMatch(key, known) {
48
48
  let best;
49
49
  let bestDist = Number.POSITIVE_INFINITY;
package/index.d.ts CHANGED
@@ -877,18 +877,58 @@ declare function buildRulesetPayload(ruleset: Ruleset): RulesetPayload;
877
877
  declare const CONFIG_FILENAME = "reposets.config.toml";
878
878
  declare const CREDENTIALS_FILENAME = "reposets.credentials.toml";
879
879
  declare const ReposetsConfigFile: import("effect/Context").Tag<import("xdg-effect").ConfigFileService<{
880
- readonly environments: {
880
+ readonly code_scanning: {
881
881
  readonly [x: string]: {
882
- readonly reviewers?: readonly {
883
- readonly type: "Team" | "User";
884
- readonly id: number;
885
- }[] | undefined;
886
- readonly wait_timer?: number | undefined;
887
- readonly prevent_self_review?: boolean | undefined;
888
- readonly deployment_branches?: "all" | "protected" | readonly {
889
- readonly name: string;
890
- readonly type: "branch" | "tag";
891
- }[] | undefined;
882
+ readonly state?: "configured" | "not-configured" | undefined;
883
+ readonly languages?: readonly ("actions" | "c-cpp" | "csharp" | "go" | "java-kotlin" | "javascript-typescript" | "python" | "ruby" | "swift")[] | undefined;
884
+ readonly query_suite?: "default" | "extended" | undefined;
885
+ readonly threat_model?: "remote" | "remote_and_local" | undefined;
886
+ readonly runner_type?: "standard" | "labeled" | undefined;
887
+ readonly runner_label?: string | undefined;
888
+ };
889
+ };
890
+ readonly owner?: string | undefined;
891
+ readonly log_level: "silent" | "info" | "verbose" | "debug";
892
+ readonly settings: {
893
+ readonly [x: string]: {
894
+ readonly [x: string]: unknown;
895
+ readonly allow_forking?: boolean | undefined;
896
+ readonly is_template?: boolean | undefined;
897
+ readonly has_wiki?: boolean | undefined;
898
+ readonly has_issues?: boolean | undefined;
899
+ readonly has_projects?: boolean | undefined;
900
+ readonly has_discussions?: boolean | undefined;
901
+ readonly has_sponsorships?: boolean | undefined;
902
+ readonly has_pull_requests?: boolean | undefined;
903
+ readonly allow_merge_commit?: boolean | undefined;
904
+ readonly allow_squash_merge?: boolean | undefined;
905
+ readonly allow_rebase_merge?: boolean | undefined;
906
+ readonly allow_auto_merge?: boolean | undefined;
907
+ readonly allow_update_branch?: boolean | undefined;
908
+ readonly squash_merge_commit_title?: "PR_TITLE" | "COMMIT_OR_PR_TITLE" | undefined;
909
+ readonly squash_merge_commit_message?: "PR_BODY" | "COMMIT_MESSAGES" | "BLANK" | undefined;
910
+ readonly merge_commit_title?: "PR_TITLE" | "MERGE_MESSAGE" | undefined;
911
+ readonly merge_commit_message?: "PR_TITLE" | "PR_BODY" | "BLANK" | undefined;
912
+ readonly delete_branch_on_merge?: boolean | undefined;
913
+ readonly web_commit_signoff_required?: boolean | undefined;
914
+ readonly security_and_analysis?: {
915
+ readonly advanced_security?: "disabled" | "enabled" | undefined;
916
+ readonly code_security?: "disabled" | "enabled" | undefined;
917
+ readonly secret_scanning?: "disabled" | "enabled" | undefined;
918
+ readonly secret_scanning_push_protection?: "disabled" | "enabled" | undefined;
919
+ readonly secret_scanning_ai_detection?: "disabled" | "enabled" | undefined;
920
+ readonly secret_scanning_non_provider_patterns?: "disabled" | "enabled" | undefined;
921
+ readonly secret_scanning_delegated_alert_dismissal?: "disabled" | "enabled" | undefined;
922
+ readonly secret_scanning_delegated_bypass?: "disabled" | "enabled" | undefined;
923
+ readonly delegated_bypass_reviewers?: readonly ({
924
+ readonly team: string;
925
+ readonly mode?: "ALWAYS" | "EXEMPT" | undefined;
926
+ } | {
927
+ readonly mode?: "ALWAYS" | "EXEMPT" | undefined;
928
+ readonly role: string;
929
+ })[] | undefined;
930
+ readonly dependabot_security_updates?: "disabled" | "enabled" | undefined;
931
+ } | undefined;
892
932
  };
893
933
  };
894
934
  readonly secrets: {
@@ -928,11 +968,6 @@ declare const ReposetsConfigFile: import("effect/Context").Tag<import("xdg-effec
928
968
  readonly rulesets: {
929
969
  readonly [x: string]: {
930
970
  readonly name: string;
931
- readonly code_scanning?: readonly {
932
- readonly tool: string;
933
- readonly alerts: "all" | "none" | "errors" | "errors_and_warnings";
934
- readonly security_alerts: "all" | "none" | "critical" | "high_or_higher" | "medium_or_higher";
935
- }[] | undefined;
936
971
  readonly type: "branch";
937
972
  readonly pull_requests?: {
938
973
  readonly approvals: number;
@@ -963,6 +998,11 @@ declare const ReposetsConfigFile: import("effect/Context").Tag<import("xdg-effec
963
998
  readonly draft_prs?: boolean | undefined;
964
999
  readonly on_push?: boolean | undefined;
965
1000
  } | undefined;
1001
+ readonly code_scanning?: readonly {
1002
+ readonly tool: string;
1003
+ readonly alerts: "all" | "none" | "errors" | "errors_and_warnings";
1004
+ readonly security_alerts: "all" | "none" | "critical" | "high_or_higher" | "medium_or_higher";
1005
+ }[] | undefined;
966
1006
  readonly workflows?: {
967
1007
  readonly on_creation?: boolean | undefined;
968
1008
  readonly required: readonly {
@@ -975,9 +1015,9 @@ declare const ReposetsConfigFile: import("effect/Context").Tag<import("xdg-effec
975
1015
  }[];
976
1016
  } | undefined;
977
1017
  readonly branch_name?: readonly {
978
- readonly name?: string | undefined;
979
1018
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
980
1019
  readonly pattern: string;
1020
+ readonly name?: string | undefined;
981
1021
  readonly negate?: boolean | undefined;
982
1022
  }[] | undefined;
983
1023
  readonly enforcement: "disabled" | "active" | "evaluate";
@@ -1020,21 +1060,21 @@ declare const ReposetsConfigFile: import("effect/Context").Tag<import("xdg-effec
1020
1060
  }[];
1021
1061
  } | undefined;
1022
1062
  readonly commit_message?: readonly {
1023
- readonly name?: string | undefined;
1024
1063
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
1025
1064
  readonly pattern: string;
1065
+ readonly name?: string | undefined;
1026
1066
  readonly negate?: boolean | undefined;
1027
1067
  }[] | undefined;
1028
1068
  readonly commit_author_email?: readonly {
1029
- readonly name?: string | undefined;
1030
1069
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
1031
1070
  readonly pattern: string;
1071
+ readonly name?: string | undefined;
1032
1072
  readonly negate?: boolean | undefined;
1033
1073
  }[] | undefined;
1034
1074
  readonly committer_email?: readonly {
1035
- readonly name?: string | undefined;
1036
1075
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
1037
1076
  readonly pattern: string;
1077
+ readonly name?: string | undefined;
1038
1078
  readonly negate?: boolean | undefined;
1039
1079
  }[] | undefined;
1040
1080
  } | {
@@ -1080,72 +1120,43 @@ declare const ReposetsConfigFile: import("effect/Context").Tag<import("xdg-effec
1080
1120
  }[];
1081
1121
  } | undefined;
1082
1122
  readonly commit_message?: readonly {
1083
- readonly name?: string | undefined;
1084
1123
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
1085
1124
  readonly pattern: string;
1125
+ readonly name?: string | undefined;
1086
1126
  readonly negate?: boolean | undefined;
1087
1127
  }[] | undefined;
1088
1128
  readonly commit_author_email?: readonly {
1089
- readonly name?: string | undefined;
1090
1129
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
1091
1130
  readonly pattern: string;
1131
+ readonly name?: string | undefined;
1092
1132
  readonly negate?: boolean | undefined;
1093
1133
  }[] | undefined;
1094
1134
  readonly committer_email?: readonly {
1095
- readonly name?: string | undefined;
1096
1135
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
1097
1136
  readonly pattern: string;
1137
+ readonly name?: string | undefined;
1098
1138
  readonly negate?: boolean | undefined;
1099
1139
  }[] | undefined;
1100
1140
  readonly tag_name?: readonly {
1101
- readonly name?: string | undefined;
1102
1141
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
1103
1142
  readonly pattern: string;
1143
+ readonly name?: string | undefined;
1104
1144
  readonly negate?: boolean | undefined;
1105
1145
  }[] | undefined;
1106
1146
  };
1107
1147
  };
1108
- readonly owner?: string | undefined;
1109
- readonly settings: {
1148
+ readonly environments: {
1110
1149
  readonly [x: string]: {
1111
- readonly [x: string]: unknown;
1112
- readonly is_template?: boolean | undefined;
1113
- readonly has_wiki?: boolean | undefined;
1114
- readonly has_issues?: boolean | undefined;
1115
- readonly has_projects?: boolean | undefined;
1116
- readonly has_discussions?: boolean | undefined;
1117
- readonly has_sponsorships?: boolean | undefined;
1118
- readonly has_pull_requests?: boolean | undefined;
1119
- readonly allow_forking?: boolean | undefined;
1120
- readonly allow_merge_commit?: boolean | undefined;
1121
- readonly allow_squash_merge?: boolean | undefined;
1122
- readonly allow_rebase_merge?: boolean | undefined;
1123
- readonly allow_auto_merge?: boolean | undefined;
1124
- readonly allow_update_branch?: boolean | undefined;
1125
- readonly squash_merge_commit_title?: "PR_TITLE" | "COMMIT_OR_PR_TITLE" | undefined;
1126
- readonly squash_merge_commit_message?: "PR_BODY" | "COMMIT_MESSAGES" | "BLANK" | undefined;
1127
- readonly merge_commit_title?: "PR_TITLE" | "MERGE_MESSAGE" | undefined;
1128
- readonly merge_commit_message?: "PR_TITLE" | "PR_BODY" | "BLANK" | undefined;
1129
- readonly delete_branch_on_merge?: boolean | undefined;
1130
- readonly web_commit_signoff_required?: boolean | undefined;
1131
- readonly security_and_analysis?: {
1132
- readonly advanced_security?: "enabled" | "disabled" | undefined;
1133
- readonly code_security?: "enabled" | "disabled" | undefined;
1134
- readonly secret_scanning?: "enabled" | "disabled" | undefined;
1135
- readonly secret_scanning_push_protection?: "enabled" | "disabled" | undefined;
1136
- readonly secret_scanning_ai_detection?: "enabled" | "disabled" | undefined;
1137
- readonly secret_scanning_non_provider_patterns?: "enabled" | "disabled" | undefined;
1138
- readonly secret_scanning_delegated_alert_dismissal?: "enabled" | "disabled" | undefined;
1139
- readonly secret_scanning_delegated_bypass?: "enabled" | "disabled" | undefined;
1140
- readonly delegated_bypass_reviewers?: readonly ({
1141
- readonly team: string;
1142
- readonly mode?: "ALWAYS" | "EXEMPT" | undefined;
1143
- } | {
1144
- readonly mode?: "ALWAYS" | "EXEMPT" | undefined;
1145
- readonly role: string;
1146
- })[] | undefined;
1147
- readonly dependabot_security_updates?: "enabled" | "disabled" | undefined;
1148
- } | undefined;
1150
+ readonly reviewers?: readonly {
1151
+ readonly type: "Team" | "User";
1152
+ readonly id: number;
1153
+ }[] | undefined;
1154
+ readonly wait_timer?: number | undefined;
1155
+ readonly prevent_self_review?: boolean | undefined;
1156
+ readonly deployment_branches?: "all" | "protected" | readonly {
1157
+ readonly name: string;
1158
+ readonly type: "branch" | "tag";
1159
+ }[] | undefined;
1149
1160
  };
1150
1161
  };
1151
1162
  readonly security: {
@@ -1155,46 +1166,35 @@ declare const ReposetsConfigFile: import("effect/Context").Tag<import("xdg-effec
1155
1166
  readonly private_vulnerability_reporting?: boolean | undefined;
1156
1167
  };
1157
1168
  };
1158
- readonly code_scanning: {
1159
- readonly [x: string]: {
1160
- readonly state?: "configured" | "not-configured" | undefined;
1161
- readonly languages?: readonly ("actions" | "c-cpp" | "csharp" | "go" | "java-kotlin" | "javascript-typescript" | "python" | "ruby" | "swift")[] | undefined;
1162
- readonly query_suite?: "default" | "extended" | undefined;
1163
- readonly threat_model?: "remote" | "remote_and_local" | undefined;
1164
- readonly runner_type?: "standard" | "labeled" | undefined;
1165
- readonly runner_label?: string | undefined;
1166
- };
1167
- };
1168
- readonly log_level: "silent" | "info" | "verbose" | "debug";
1169
1169
  readonly groups: {
1170
1170
  readonly [x: string]: {
1171
- readonly environments?: readonly string[] | undefined;
1171
+ readonly code_scanning?: readonly string[] | undefined;
1172
+ readonly owner?: string | undefined;
1173
+ readonly settings?: readonly string[] | undefined;
1172
1174
  readonly secrets?: {
1173
- readonly actions?: readonly string[] | undefined;
1174
- readonly dependabot?: readonly string[] | undefined;
1175
- readonly codespaces?: readonly string[] | undefined;
1176
1175
  readonly environments?: {
1177
1176
  readonly [x: string]: readonly string[];
1178
1177
  } | undefined;
1178
+ readonly actions?: readonly string[] | undefined;
1179
+ readonly dependabot?: readonly string[] | undefined;
1180
+ readonly codespaces?: readonly string[] | undefined;
1179
1181
  } | undefined;
1180
1182
  readonly variables?: {
1181
- readonly actions?: readonly string[] | undefined;
1182
1183
  readonly environments?: {
1183
1184
  readonly [x: string]: readonly string[];
1184
1185
  } | undefined;
1186
+ readonly actions?: readonly string[] | undefined;
1185
1187
  } | undefined;
1186
1188
  readonly rulesets?: readonly string[] | undefined;
1187
- readonly owner?: string | undefined;
1189
+ readonly environments?: readonly string[] | undefined;
1190
+ readonly security?: readonly string[] | undefined;
1188
1191
  readonly repos: readonly string[];
1189
1192
  readonly credentials?: string | undefined;
1190
- readonly settings?: readonly string[] | undefined;
1191
- readonly security?: readonly string[] | undefined;
1192
- readonly code_scanning?: readonly string[] | undefined;
1193
1193
  readonly cleanup?: {
1194
- readonly environments: boolean | {
1195
- readonly preserve: readonly string[];
1196
- };
1197
1194
  readonly secrets: {
1195
+ readonly environments: boolean | {
1196
+ readonly preserve: readonly string[];
1197
+ };
1198
1198
  readonly actions: boolean | {
1199
1199
  readonly preserve: readonly string[];
1200
1200
  };
@@ -1204,37 +1204,77 @@ declare const ReposetsConfigFile: import("effect/Context").Tag<import("xdg-effec
1204
1204
  readonly codespaces: boolean | {
1205
1205
  readonly preserve: readonly string[];
1206
1206
  };
1207
- readonly environments: boolean | {
1208
- readonly preserve: readonly string[];
1209
- };
1210
1207
  };
1211
1208
  readonly variables: {
1212
- readonly actions: boolean | {
1209
+ readonly environments: boolean | {
1213
1210
  readonly preserve: readonly string[];
1214
1211
  };
1215
- readonly environments: boolean | {
1212
+ readonly actions: boolean | {
1216
1213
  readonly preserve: readonly string[];
1217
1214
  };
1218
1215
  };
1219
1216
  readonly rulesets: boolean | {
1220
1217
  readonly preserve: readonly string[];
1221
1218
  };
1219
+ readonly environments: boolean | {
1220
+ readonly preserve: readonly string[];
1221
+ };
1222
1222
  } | undefined;
1223
1223
  };
1224
1224
  };
1225
1225
  }>, import("xdg-effect").ConfigFileService<{
1226
- readonly environments: {
1226
+ readonly code_scanning: {
1227
1227
  readonly [x: string]: {
1228
- readonly reviewers?: readonly {
1229
- readonly type: "Team" | "User";
1230
- readonly id: number;
1231
- }[] | undefined;
1232
- readonly wait_timer?: number | undefined;
1233
- readonly prevent_self_review?: boolean | undefined;
1234
- readonly deployment_branches?: "all" | "protected" | readonly {
1235
- readonly name: string;
1236
- readonly type: "branch" | "tag";
1237
- }[] | undefined;
1228
+ readonly state?: "configured" | "not-configured" | undefined;
1229
+ readonly languages?: readonly ("actions" | "c-cpp" | "csharp" | "go" | "java-kotlin" | "javascript-typescript" | "python" | "ruby" | "swift")[] | undefined;
1230
+ readonly query_suite?: "default" | "extended" | undefined;
1231
+ readonly threat_model?: "remote" | "remote_and_local" | undefined;
1232
+ readonly runner_type?: "standard" | "labeled" | undefined;
1233
+ readonly runner_label?: string | undefined;
1234
+ };
1235
+ };
1236
+ readonly owner?: string | undefined;
1237
+ readonly log_level: "silent" | "info" | "verbose" | "debug";
1238
+ readonly settings: {
1239
+ readonly [x: string]: {
1240
+ readonly [x: string]: unknown;
1241
+ readonly allow_forking?: boolean | undefined;
1242
+ readonly is_template?: boolean | undefined;
1243
+ readonly has_wiki?: boolean | undefined;
1244
+ readonly has_issues?: boolean | undefined;
1245
+ readonly has_projects?: boolean | undefined;
1246
+ readonly has_discussions?: boolean | undefined;
1247
+ readonly has_sponsorships?: boolean | undefined;
1248
+ readonly has_pull_requests?: boolean | undefined;
1249
+ readonly allow_merge_commit?: boolean | undefined;
1250
+ readonly allow_squash_merge?: boolean | undefined;
1251
+ readonly allow_rebase_merge?: boolean | undefined;
1252
+ readonly allow_auto_merge?: boolean | undefined;
1253
+ readonly allow_update_branch?: boolean | undefined;
1254
+ readonly squash_merge_commit_title?: "PR_TITLE" | "COMMIT_OR_PR_TITLE" | undefined;
1255
+ readonly squash_merge_commit_message?: "PR_BODY" | "COMMIT_MESSAGES" | "BLANK" | undefined;
1256
+ readonly merge_commit_title?: "PR_TITLE" | "MERGE_MESSAGE" | undefined;
1257
+ readonly merge_commit_message?: "PR_TITLE" | "PR_BODY" | "BLANK" | undefined;
1258
+ readonly delete_branch_on_merge?: boolean | undefined;
1259
+ readonly web_commit_signoff_required?: boolean | undefined;
1260
+ readonly security_and_analysis?: {
1261
+ readonly advanced_security?: "disabled" | "enabled" | undefined;
1262
+ readonly code_security?: "disabled" | "enabled" | undefined;
1263
+ readonly secret_scanning?: "disabled" | "enabled" | undefined;
1264
+ readonly secret_scanning_push_protection?: "disabled" | "enabled" | undefined;
1265
+ readonly secret_scanning_ai_detection?: "disabled" | "enabled" | undefined;
1266
+ readonly secret_scanning_non_provider_patterns?: "disabled" | "enabled" | undefined;
1267
+ readonly secret_scanning_delegated_alert_dismissal?: "disabled" | "enabled" | undefined;
1268
+ readonly secret_scanning_delegated_bypass?: "disabled" | "enabled" | undefined;
1269
+ readonly delegated_bypass_reviewers?: readonly ({
1270
+ readonly team: string;
1271
+ readonly mode?: "ALWAYS" | "EXEMPT" | undefined;
1272
+ } | {
1273
+ readonly mode?: "ALWAYS" | "EXEMPT" | undefined;
1274
+ readonly role: string;
1275
+ })[] | undefined;
1276
+ readonly dependabot_security_updates?: "disabled" | "enabled" | undefined;
1277
+ } | undefined;
1238
1278
  };
1239
1279
  };
1240
1280
  readonly secrets: {
@@ -1274,11 +1314,6 @@ declare const ReposetsConfigFile: import("effect/Context").Tag<import("xdg-effec
1274
1314
  readonly rulesets: {
1275
1315
  readonly [x: string]: {
1276
1316
  readonly name: string;
1277
- readonly code_scanning?: readonly {
1278
- readonly tool: string;
1279
- readonly alerts: "all" | "none" | "errors" | "errors_and_warnings";
1280
- readonly security_alerts: "all" | "none" | "critical" | "high_or_higher" | "medium_or_higher";
1281
- }[] | undefined;
1282
1317
  readonly type: "branch";
1283
1318
  readonly pull_requests?: {
1284
1319
  readonly approvals: number;
@@ -1309,6 +1344,11 @@ declare const ReposetsConfigFile: import("effect/Context").Tag<import("xdg-effec
1309
1344
  readonly draft_prs?: boolean | undefined;
1310
1345
  readonly on_push?: boolean | undefined;
1311
1346
  } | undefined;
1347
+ readonly code_scanning?: readonly {
1348
+ readonly tool: string;
1349
+ readonly alerts: "all" | "none" | "errors" | "errors_and_warnings";
1350
+ readonly security_alerts: "all" | "none" | "critical" | "high_or_higher" | "medium_or_higher";
1351
+ }[] | undefined;
1312
1352
  readonly workflows?: {
1313
1353
  readonly on_creation?: boolean | undefined;
1314
1354
  readonly required: readonly {
@@ -1321,9 +1361,9 @@ declare const ReposetsConfigFile: import("effect/Context").Tag<import("xdg-effec
1321
1361
  }[];
1322
1362
  } | undefined;
1323
1363
  readonly branch_name?: readonly {
1324
- readonly name?: string | undefined;
1325
1364
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
1326
1365
  readonly pattern: string;
1366
+ readonly name?: string | undefined;
1327
1367
  readonly negate?: boolean | undefined;
1328
1368
  }[] | undefined;
1329
1369
  readonly enforcement: "disabled" | "active" | "evaluate";
@@ -1366,21 +1406,21 @@ declare const ReposetsConfigFile: import("effect/Context").Tag<import("xdg-effec
1366
1406
  }[];
1367
1407
  } | undefined;
1368
1408
  readonly commit_message?: readonly {
1369
- readonly name?: string | undefined;
1370
1409
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
1371
1410
  readonly pattern: string;
1411
+ readonly name?: string | undefined;
1372
1412
  readonly negate?: boolean | undefined;
1373
1413
  }[] | undefined;
1374
1414
  readonly commit_author_email?: readonly {
1375
- readonly name?: string | undefined;
1376
1415
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
1377
1416
  readonly pattern: string;
1417
+ readonly name?: string | undefined;
1378
1418
  readonly negate?: boolean | undefined;
1379
1419
  }[] | undefined;
1380
1420
  readonly committer_email?: readonly {
1381
- readonly name?: string | undefined;
1382
1421
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
1383
1422
  readonly pattern: string;
1423
+ readonly name?: string | undefined;
1384
1424
  readonly negate?: boolean | undefined;
1385
1425
  }[] | undefined;
1386
1426
  } | {
@@ -1426,72 +1466,43 @@ declare const ReposetsConfigFile: import("effect/Context").Tag<import("xdg-effec
1426
1466
  }[];
1427
1467
  } | undefined;
1428
1468
  readonly commit_message?: readonly {
1429
- readonly name?: string | undefined;
1430
1469
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
1431
1470
  readonly pattern: string;
1471
+ readonly name?: string | undefined;
1432
1472
  readonly negate?: boolean | undefined;
1433
1473
  }[] | undefined;
1434
1474
  readonly commit_author_email?: readonly {
1435
- readonly name?: string | undefined;
1436
1475
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
1437
1476
  readonly pattern: string;
1477
+ readonly name?: string | undefined;
1438
1478
  readonly negate?: boolean | undefined;
1439
1479
  }[] | undefined;
1440
1480
  readonly committer_email?: readonly {
1441
- readonly name?: string | undefined;
1442
1481
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
1443
1482
  readonly pattern: string;
1483
+ readonly name?: string | undefined;
1444
1484
  readonly negate?: boolean | undefined;
1445
1485
  }[] | undefined;
1446
1486
  readonly tag_name?: readonly {
1447
- readonly name?: string | undefined;
1448
1487
  readonly operator: "starts_with" | "ends_with" | "contains" | "regex";
1449
1488
  readonly pattern: string;
1489
+ readonly name?: string | undefined;
1450
1490
  readonly negate?: boolean | undefined;
1451
1491
  }[] | undefined;
1452
1492
  };
1453
1493
  };
1454
- readonly owner?: string | undefined;
1455
- readonly settings: {
1494
+ readonly environments: {
1456
1495
  readonly [x: string]: {
1457
- readonly [x: string]: unknown;
1458
- readonly is_template?: boolean | undefined;
1459
- readonly has_wiki?: boolean | undefined;
1460
- readonly has_issues?: boolean | undefined;
1461
- readonly has_projects?: boolean | undefined;
1462
- readonly has_discussions?: boolean | undefined;
1463
- readonly has_sponsorships?: boolean | undefined;
1464
- readonly has_pull_requests?: boolean | undefined;
1465
- readonly allow_forking?: boolean | undefined;
1466
- readonly allow_merge_commit?: boolean | undefined;
1467
- readonly allow_squash_merge?: boolean | undefined;
1468
- readonly allow_rebase_merge?: boolean | undefined;
1469
- readonly allow_auto_merge?: boolean | undefined;
1470
- readonly allow_update_branch?: boolean | undefined;
1471
- readonly squash_merge_commit_title?: "PR_TITLE" | "COMMIT_OR_PR_TITLE" | undefined;
1472
- readonly squash_merge_commit_message?: "PR_BODY" | "COMMIT_MESSAGES" | "BLANK" | undefined;
1473
- readonly merge_commit_title?: "PR_TITLE" | "MERGE_MESSAGE" | undefined;
1474
- readonly merge_commit_message?: "PR_TITLE" | "PR_BODY" | "BLANK" | undefined;
1475
- readonly delete_branch_on_merge?: boolean | undefined;
1476
- readonly web_commit_signoff_required?: boolean | undefined;
1477
- readonly security_and_analysis?: {
1478
- readonly advanced_security?: "enabled" | "disabled" | undefined;
1479
- readonly code_security?: "enabled" | "disabled" | undefined;
1480
- readonly secret_scanning?: "enabled" | "disabled" | undefined;
1481
- readonly secret_scanning_push_protection?: "enabled" | "disabled" | undefined;
1482
- readonly secret_scanning_ai_detection?: "enabled" | "disabled" | undefined;
1483
- readonly secret_scanning_non_provider_patterns?: "enabled" | "disabled" | undefined;
1484
- readonly secret_scanning_delegated_alert_dismissal?: "enabled" | "disabled" | undefined;
1485
- readonly secret_scanning_delegated_bypass?: "enabled" | "disabled" | undefined;
1486
- readonly delegated_bypass_reviewers?: readonly ({
1487
- readonly team: string;
1488
- readonly mode?: "ALWAYS" | "EXEMPT" | undefined;
1489
- } | {
1490
- readonly mode?: "ALWAYS" | "EXEMPT" | undefined;
1491
- readonly role: string;
1492
- })[] | undefined;
1493
- readonly dependabot_security_updates?: "enabled" | "disabled" | undefined;
1494
- } | undefined;
1496
+ readonly reviewers?: readonly {
1497
+ readonly type: "Team" | "User";
1498
+ readonly id: number;
1499
+ }[] | undefined;
1500
+ readonly wait_timer?: number | undefined;
1501
+ readonly prevent_self_review?: boolean | undefined;
1502
+ readonly deployment_branches?: "all" | "protected" | readonly {
1503
+ readonly name: string;
1504
+ readonly type: "branch" | "tag";
1505
+ }[] | undefined;
1495
1506
  };
1496
1507
  };
1497
1508
  readonly security: {
@@ -1501,46 +1512,35 @@ declare const ReposetsConfigFile: import("effect/Context").Tag<import("xdg-effec
1501
1512
  readonly private_vulnerability_reporting?: boolean | undefined;
1502
1513
  };
1503
1514
  };
1504
- readonly code_scanning: {
1505
- readonly [x: string]: {
1506
- readonly state?: "configured" | "not-configured" | undefined;
1507
- readonly languages?: readonly ("actions" | "c-cpp" | "csharp" | "go" | "java-kotlin" | "javascript-typescript" | "python" | "ruby" | "swift")[] | undefined;
1508
- readonly query_suite?: "default" | "extended" | undefined;
1509
- readonly threat_model?: "remote" | "remote_and_local" | undefined;
1510
- readonly runner_type?: "standard" | "labeled" | undefined;
1511
- readonly runner_label?: string | undefined;
1512
- };
1513
- };
1514
- readonly log_level: "silent" | "info" | "verbose" | "debug";
1515
1515
  readonly groups: {
1516
1516
  readonly [x: string]: {
1517
- readonly environments?: readonly string[] | undefined;
1517
+ readonly code_scanning?: readonly string[] | undefined;
1518
+ readonly owner?: string | undefined;
1519
+ readonly settings?: readonly string[] | undefined;
1518
1520
  readonly secrets?: {
1519
- readonly actions?: readonly string[] | undefined;
1520
- readonly dependabot?: readonly string[] | undefined;
1521
- readonly codespaces?: readonly string[] | undefined;
1522
1521
  readonly environments?: {
1523
1522
  readonly [x: string]: readonly string[];
1524
1523
  } | undefined;
1524
+ readonly actions?: readonly string[] | undefined;
1525
+ readonly dependabot?: readonly string[] | undefined;
1526
+ readonly codespaces?: readonly string[] | undefined;
1525
1527
  } | undefined;
1526
1528
  readonly variables?: {
1527
- readonly actions?: readonly string[] | undefined;
1528
1529
  readonly environments?: {
1529
1530
  readonly [x: string]: readonly string[];
1530
1531
  } | undefined;
1532
+ readonly actions?: readonly string[] | undefined;
1531
1533
  } | undefined;
1532
1534
  readonly rulesets?: readonly string[] | undefined;
1533
- readonly owner?: string | undefined;
1535
+ readonly environments?: readonly string[] | undefined;
1536
+ readonly security?: readonly string[] | undefined;
1534
1537
  readonly repos: readonly string[];
1535
1538
  readonly credentials?: string | undefined;
1536
- readonly settings?: readonly string[] | undefined;
1537
- readonly security?: readonly string[] | undefined;
1538
- readonly code_scanning?: readonly string[] | undefined;
1539
1539
  readonly cleanup?: {
1540
- readonly environments: boolean | {
1541
- readonly preserve: readonly string[];
1542
- };
1543
1540
  readonly secrets: {
1541
+ readonly environments: boolean | {
1542
+ readonly preserve: readonly string[];
1543
+ };
1544
1544
  readonly actions: boolean | {
1545
1545
  readonly preserve: readonly string[];
1546
1546
  };
@@ -1550,21 +1550,21 @@ declare const ReposetsConfigFile: import("effect/Context").Tag<import("xdg-effec
1550
1550
  readonly codespaces: boolean | {
1551
1551
  readonly preserve: readonly string[];
1552
1552
  };
1553
- readonly environments: boolean | {
1554
- readonly preserve: readonly string[];
1555
- };
1556
1553
  };
1557
1554
  readonly variables: {
1558
- readonly actions: boolean | {
1555
+ readonly environments: boolean | {
1559
1556
  readonly preserve: readonly string[];
1560
1557
  };
1561
- readonly environments: boolean | {
1558
+ readonly actions: boolean | {
1562
1559
  readonly preserve: readonly string[];
1563
1560
  };
1564
1561
  };
1565
1562
  readonly rulesets: boolean | {
1566
1563
  readonly preserve: readonly string[];
1567
1564
  };
1565
+ readonly environments: boolean | {
1566
+ readonly preserve: readonly string[];
1567
+ };
1568
1568
  } | undefined;
1569
1569
  };
1570
1570
  };
@@ -1575,14 +1575,14 @@ declare const ReposetsCredentialsFile: import("effect/Context").Tag<import("xdg-
1575
1575
  readonly github_token: string;
1576
1576
  readonly op_service_account_token?: string | undefined;
1577
1577
  readonly resolve?: {
1578
- readonly file?: {
1579
- readonly [x: string]: string;
1580
- } | undefined;
1581
1578
  readonly value?: {
1582
1579
  readonly [x: string]: string | {
1583
1580
  readonly [x: string]: unknown;
1584
1581
  };
1585
1582
  } | undefined;
1583
+ readonly file?: {
1584
+ readonly [x: string]: string;
1585
+ } | undefined;
1586
1586
  readonly op?: {
1587
1587
  readonly [x: string]: string;
1588
1588
  } | undefined;
@@ -1595,14 +1595,14 @@ declare const ReposetsCredentialsFile: import("effect/Context").Tag<import("xdg-
1595
1595
  readonly github_token: string;
1596
1596
  readonly op_service_account_token?: string | undefined;
1597
1597
  readonly resolve?: {
1598
- readonly file?: {
1599
- readonly [x: string]: string;
1600
- } | undefined;
1601
1598
  readonly value?: {
1602
1599
  readonly [x: string]: string | {
1603
1600
  readonly [x: string]: unknown;
1604
1601
  };
1605
1602
  } | undefined;
1603
+ readonly file?: {
1604
+ readonly [x: string]: string;
1605
+ } | undefined;
1606
1606
  readonly op?: {
1607
1607
  readonly [x: string]: string;
1608
1608
  } | undefined;
@@ -1744,7 +1744,7 @@ interface SyncEngineService {
1744
1744
  }
1745
1745
  declare const SyncEngine_base: Context.TagClass<SyncEngine, "SyncEngine", SyncEngineService>;
1746
1746
  declare class SyncEngine extends SyncEngine_base {}
1747
- declare const SyncEngineLive: Layer.Layer<SyncEngine, never, CredentialResolver | GitHubClient | SyncLogger>;
1747
+ declare const SyncEngineLive: Layer.Layer<SyncEngine, never, GitHubClient | SyncLogger | CredentialResolver>;
1748
1748
  //#endregion
1749
1749
  export { AppDirs, type BypassActor, BypassActorSchema, CONFIG_FILENAME, CREDENTIALS_FILENAME, type Cleanup, CleanupSchema, type CleanupScope, CleanupScopeSchema, type Config, ConfigFile, ConfigFilesLive, ConfigSchema, type CredentialProfile, CredentialProfileSchema, CredentialResolver, CredentialResolverLive, type Credentials, CredentialsSchema, GitHubApiError, GitHubClient, GitHubClientLive, GitHubClientTest, type Group, GroupSchema, type LogLevel, LogLevelSchema, OnePasswordClient, OnePasswordClientLive, OnePasswordClientTest, OnePasswordError, type RecordedCall, ReposetsConfigFile, ReposetsCredentialsFile, ResolveError, type ResolveSection, ResolveSectionSchema, type ResolvedRef, ResolvedRefSchema, type Ruleset, type RulesetPayload, RulesetSchema, type SecretGroup, SecretGroupSchema, SyncEngine, SyncEngineLive, SyncError, SyncLogger, type SyncLoggerConfig, SyncLoggerLive, type VariableGroup, VariableGroupSchema, XdgConfigError, buildRulesetPayload, encryptSecret, makeConfigFilesLive, validateConfigRefs };
1750
1750
  //# sourceMappingURL=index.d.ts.map
package/lib/crypto.js CHANGED
@@ -12,7 +12,7 @@ function encryptSecret(publicKey, secretValue) {
12
12
  const messageBytes = Buffer.from(secretValue);
13
13
  const publicKeyBytes = Buffer.from(publicKey, "base64");
14
14
  const ephemeralKeyPair = nacl.box.keyPair();
15
- const nonceInput = new Uint8Array(64);
15
+ const nonceInput = /* @__PURE__ */ new Uint8Array(64);
16
16
  nonceInput.set(ephemeralKeyPair.publicKey);
17
17
  nonceInput.set(publicKeyBytes, 32);
18
18
  const nonce = blake2b(nonceInput, void 0, 24);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "reposets",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "private": false,
5
5
  "description": "CLI tool to sync GitHub repo settings, secrets and rulesets across personal repositories",
6
6
  "keywords": [
@@ -48,12 +48,12 @@
48
48
  "dependencies": {
49
49
  "@1password/sdk": "^0.4.0",
50
50
  "@effect/cli": "^0.75.2",
51
- "@effect/platform": "^0.96.1",
51
+ "@effect/platform": "^0.96.2",
52
52
  "@effect/platform-node": "^0.107.0",
53
53
  "@octokit/rest": "^22.0.1",
54
54
  "blakejs": "^1.2.1",
55
- "effect": "^3.21.3",
56
- "smol-toml": ">=1.6.1",
55
+ "effect": "^3.21.4",
56
+ "smol-toml": ">=1.7.0",
57
57
  "tweetnacl": "^1.0.3",
58
58
  "xdg-effect": "^1.0.3"
59
59
  },
@@ -6,13 +6,13 @@ import { Octokit } from "@octokit/rest";
6
6
  //#region src/services/GitHubClient.ts
7
7
  var GitHubClient = class extends Context.Tag("GitHubClient")() {};
8
8
  /** Settings fields that are only valid for organization-owned repositories. */
9
- const ORG_ONLY_SETTINGS = new Set(["allow_forking"]);
9
+ const ORG_ONLY_SETTINGS = /* @__PURE__ */ new Set(["allow_forking"]);
10
10
  /**
11
11
  * Fields in the user-facing security_and_analysis block that GitHub's API
12
12
  * accepts as `{ status: "enabled" | "disabled" }`. The value as stored in
13
13
  * config is the literal string; we wrap it before sending.
14
14
  */
15
- const SAA_STATUS_FIELDS = new Set([
15
+ const SAA_STATUS_FIELDS = /* @__PURE__ */ new Set([
16
16
  "advanced_security",
17
17
  "code_security",
18
18
  "secret_scanning",
@@ -9,7 +9,7 @@ import { isAbsolute, resolve } from "node:path";
9
9
 
10
10
  //#region src/services/SyncEngine.ts
11
11
  /** Fields that GitHub only accepts on org-owned repositories. */
12
- const ORG_ONLY_SAA_FIELDS = new Set([
12
+ const ORG_ONLY_SAA_FIELDS = /* @__PURE__ */ new Set([
13
13
  "secret_scanning_delegated_alert_dismissal",
14
14
  "secret_scanning_delegated_bypass",
15
15
  "delegated_bypass_reviewers"
@@ -477,7 +477,7 @@ const SyncEngineLive = Layer.effect(SyncEngine, Effect.gen(function* () {
477
477
  }
478
478
  if (isCleanupActive(effectiveCleanup.secrets.environments)) {
479
479
  const preserved = getPreserveList(effectiveCleanup.secrets.environments);
480
- const allEnvNames = new Set([...envRefs, ...Object.keys(envSecretMapping)]);
480
+ const allEnvNames = /* @__PURE__ */ new Set([...envRefs, ...Object.keys(envSecretMapping)]);
481
481
  for (const envName of allEnvNames) {
482
482
  const configuredNames = /* @__PURE__ */ new Set();
483
483
  for (const ref of envSecretMapping[envName] ?? []) {
@@ -514,7 +514,7 @@ const SyncEngineLive = Layer.effect(SyncEngine, Effect.gen(function* () {
514
514
  }
515
515
  if (isCleanupActive(effectiveCleanup.variables.environments)) {
516
516
  const preserved = getPreserveList(effectiveCleanup.variables.environments);
517
- const allEnvVarNames = new Set([...envRefs, ...Object.keys(envVariableMapping)]);
517
+ const allEnvVarNames = /* @__PURE__ */ new Set([...envRefs, ...Object.keys(envVariableMapping)]);
518
518
  for (const envName of allEnvVarNames) {
519
519
  const configuredNames = /* @__PURE__ */ new Set();
520
520
  for (const ref of envVariableMapping[envName] ?? []) {
package/bin/reposets.d.ts DELETED
@@ -1 +0,0 @@
1
- export { };