redlinegate 0.0.1

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.
Files changed (198) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +188 -0
  3. package/commands/redline-init.md +54 -0
  4. package/commands/redline-verify.md +69 -0
  5. package/dist/bin/redline.js +605 -0
  6. package/dist/bin/redline.js.map +1 -0
  7. package/dist/commands/exempt.js +45 -0
  8. package/dist/commands/exempt.js.map +1 -0
  9. package/dist/commands/init.js +615 -0
  10. package/dist/commands/init.js.map +1 -0
  11. package/dist/commands/policy.js +25 -0
  12. package/dist/commands/policy.js.map +1 -0
  13. package/dist/commands/remove.js +427 -0
  14. package/dist/commands/remove.js.map +1 -0
  15. package/dist/commands/review.js +72 -0
  16. package/dist/commands/review.js.map +1 -0
  17. package/dist/commands/sync.js +42 -0
  18. package/dist/commands/sync.js.map +1 -0
  19. package/dist/commands/verify.js +478 -0
  20. package/dist/commands/verify.js.map +1 -0
  21. package/dist/config/redline-json.js +187 -0
  22. package/dist/config/redline-json.js.map +1 -0
  23. package/dist/core/errors.js +25 -0
  24. package/dist/core/errors.js.map +1 -0
  25. package/dist/core/git.js +152 -0
  26. package/dist/core/git.js.map +1 -0
  27. package/dist/core/log.js +22 -0
  28. package/dist/core/log.js.map +1 -0
  29. package/dist/core/severity.js +16 -0
  30. package/dist/core/severity.js.map +1 -0
  31. package/dist/core/version.js +15 -0
  32. package/dist/core/version.js.map +1 -0
  33. package/dist/detect/scan.js +79 -0
  34. package/dist/detect/scan.js.map +1 -0
  35. package/dist/detect/stack.js +71 -0
  36. package/dist/detect/stack.js.map +1 -0
  37. package/dist/enforce/ladder.js +148 -0
  38. package/dist/enforce/ladder.js.map +1 -0
  39. package/dist/exempt/parse.js +86 -0
  40. package/dist/exempt/parse.js.map +1 -0
  41. package/dist/metrics/options.js +257 -0
  42. package/dist/metrics/options.js.map +1 -0
  43. package/dist/metrics/run.js +72 -0
  44. package/dist/metrics/run.js.map +1 -0
  45. package/dist/platforms/azure/client.js +53 -0
  46. package/dist/platforms/azure/client.js.map +1 -0
  47. package/dist/platforms/azure/index.js +69 -0
  48. package/dist/platforms/azure/index.js.map +1 -0
  49. package/dist/platforms/azure/install.js +917 -0
  50. package/dist/platforms/azure/install.js.map +1 -0
  51. package/dist/platforms/azure/policy-types.js +70 -0
  52. package/dist/platforms/azure/policy-types.js.map +1 -0
  53. package/dist/platforms/azure/verify.js +309 -0
  54. package/dist/platforms/azure/verify.js.map +1 -0
  55. package/dist/platforms/detect.js +40 -0
  56. package/dist/platforms/detect.js.map +1 -0
  57. package/dist/platforms/github/client.js +49 -0
  58. package/dist/platforms/github/client.js.map +1 -0
  59. package/dist/platforms/github/index.js +54 -0
  60. package/dist/platforms/github/index.js.map +1 -0
  61. package/dist/platforms/github/install.js +558 -0
  62. package/dist/platforms/github/install.js.map +1 -0
  63. package/dist/platforms/github/push.js +102 -0
  64. package/dist/platforms/github/push.js.map +1 -0
  65. package/dist/platforms/github/remote.js +36 -0
  66. package/dist/platforms/github/remote.js.map +1 -0
  67. package/dist/platforms/github/verify.js +366 -0
  68. package/dist/platforms/github/verify.js.map +1 -0
  69. package/dist/platforms/http.js +58 -0
  70. package/dist/platforms/http.js.map +1 -0
  71. package/dist/platforms/pull-request-templates.js +157 -0
  72. package/dist/platforms/pull-request-templates.js.map +1 -0
  73. package/dist/platforms/remote.js +21 -0
  74. package/dist/platforms/remote.js.map +1 -0
  75. package/dist/platforms/resolve.js +69 -0
  76. package/dist/platforms/resolve.js.map +1 -0
  77. package/dist/platforms/shape.js +19 -0
  78. package/dist/platforms/shape.js.map +1 -0
  79. package/dist/platforms/types.js +24 -0
  80. package/dist/platforms/types.js.map +1 -0
  81. package/dist/policy/checks.js +91 -0
  82. package/dist/policy/checks.js.map +1 -0
  83. package/dist/policy/diff.js +50 -0
  84. package/dist/policy/diff.js.map +1 -0
  85. package/dist/registry/discover.js +74 -0
  86. package/dist/registry/discover.js.map +1 -0
  87. package/dist/registry/serialize.js +41 -0
  88. package/dist/registry/serialize.js.map +1 -0
  89. package/dist/registry/types.js +2 -0
  90. package/dist/registry/types.js.map +1 -0
  91. package/dist/remove/host.js +294 -0
  92. package/dist/remove/host.js.map +1 -0
  93. package/dist/render/commands.js +139 -0
  94. package/dist/render/commands.js.map +1 -0
  95. package/dist/render/manifest.js +82 -0
  96. package/dist/render/manifest.js.map +1 -0
  97. package/dist/render/markers.js +166 -0
  98. package/dist/render/markers.js.map +1 -0
  99. package/dist/render/profile.js +23 -0
  100. package/dist/render/profile.js.map +1 -0
  101. package/dist/render/standards.js +169 -0
  102. package/dist/render/standards.js.map +1 -0
  103. package/dist/render/vendors.js +199 -0
  104. package/dist/render/vendors.js.map +1 -0
  105. package/dist/review/engines/api.js +95 -0
  106. package/dist/review/engines/api.js.map +1 -0
  107. package/dist/review/engines/embedded.js +20 -0
  108. package/dist/review/engines/embedded.js.map +1 -0
  109. package/dist/review/engines/types.js +2 -0
  110. package/dist/review/engines/types.js.map +1 -0
  111. package/dist/review/glob.js +29 -0
  112. package/dist/review/glob.js.map +1 -0
  113. package/dist/review/prompt.js +45 -0
  114. package/dist/review/prompt.js.map +1 -0
  115. package/dist/review/rules.js +25 -0
  116. package/dist/review/rules.js.map +1 -0
  117. package/dist/review/schema.js +84 -0
  118. package/dist/review/schema.js.map +1 -0
  119. package/dist/review/scope.js +27 -0
  120. package/dist/review/scope.js.map +1 -0
  121. package/dist/sarif/map.js +58 -0
  122. package/dist/sarif/map.js.map +1 -0
  123. package/dist/sarif/parse.js +88 -0
  124. package/dist/sarif/parse.js.map +1 -0
  125. package/dist/sarif/types.js +2 -0
  126. package/dist/sarif/types.js.map +1 -0
  127. package/dist/sync/host.js +21 -0
  128. package/dist/sync/host.js.map +1 -0
  129. package/dist/sync/plan.js +47 -0
  130. package/dist/sync/plan.js.map +1 -0
  131. package/dist/sync/render.js +57 -0
  132. package/dist/sync/render.js.map +1 -0
  133. package/dist/sync/run.js +118 -0
  134. package/dist/sync/run.js.map +1 -0
  135. package/dist/verify/host.js +52 -0
  136. package/dist/verify/host.js.map +1 -0
  137. package/dist/verify/remote.js +146 -0
  138. package/dist/verify/remote.js.map +1 -0
  139. package/package.json +52 -0
  140. package/platforms/azure/gate-template.yml +105 -0
  141. package/rulesets/redline-org-ruleset.json +46 -0
  142. package/rulesets/redline-ruleset.json +49 -0
  143. package/scripts/assign-rule-ids.mjs +129 -0
  144. package/scripts/build-baseline.mjs +124 -0
  145. package/scripts/build-correlation.mjs +74 -0
  146. package/scripts/build-dashboard.mjs +584 -0
  147. package/scripts/build-digest.mjs +164 -0
  148. package/scripts/build-inbox.mjs +133 -0
  149. package/scripts/build-registry.mjs +42 -0
  150. package/scripts/build-roi.mjs +181 -0
  151. package/scripts/check-pins.mjs +88 -0
  152. package/scripts/collect-telemetry.mjs +300 -0
  153. package/scripts/lib/__tests__/baseline.test.mjs +132 -0
  154. package/scripts/lib/__tests__/correlate.test.mjs +131 -0
  155. package/scripts/lib/__tests__/dora.test.mjs +110 -0
  156. package/scripts/lib/__tests__/exemptions.test.mjs +85 -0
  157. package/scripts/lib/__tests__/metrics-scanner.test.mjs +65 -0
  158. package/scripts/lib/__tests__/sarif.test.mjs +125 -0
  159. package/scripts/lib/__tests__/spend.test.mjs +64 -0
  160. package/scripts/lib/baseline.mjs +156 -0
  161. package/scripts/lib/correlate.mjs +125 -0
  162. package/scripts/lib/dora.mjs +133 -0
  163. package/scripts/lib/exemptions.mjs +79 -0
  164. package/scripts/lib/metrics.mjs +172 -0
  165. package/scripts/lib/rules.mjs +107 -0
  166. package/scripts/lib/sarif.mjs +108 -0
  167. package/scripts/lib/spend.mjs +69 -0
  168. package/scripts/measure-context.mjs +101 -0
  169. package/scripts/render-self.mjs +18 -0
  170. package/scripts/score-seeds.mjs +294 -0
  171. package/scripts/validate.mjs +394 -0
  172. package/standards/core.md +124 -0
  173. package/standards/manifest.json +214 -0
  174. package/standards/stacks/csharp.md +29 -0
  175. package/standards/stacks/go.md +30 -0
  176. package/standards/stacks/java.md +30 -0
  177. package/standards/stacks/javascript.md +42 -0
  178. package/standards/stacks/kotlin.md +27 -0
  179. package/standards/stacks/microservices.md +37 -0
  180. package/standards/stacks/nodejs.md +34 -0
  181. package/standards/stacks/python.md +29 -0
  182. package/standards/stacks/react-native.md +29 -0
  183. package/standards/stacks/react.md +46 -0
  184. package/standards/stacks/swift.md +26 -0
  185. package/standards/stacks/terraform.md +27 -0
  186. package/templates/CODEOWNERS +29 -0
  187. package/templates/azure/pull_request_template.md +72 -0
  188. package/templates/github/pull_request_template.md +72 -0
  189. package/templates/redline.yml +35 -0
  190. package/templates/repo-context.md +64 -0
  191. package/workflows/dashboard.yml +119 -0
  192. package/workflows/inbox.yml +97 -0
  193. package/workflows/redline-collect.yml +61 -0
  194. package/workflows/redline-gate.yml +301 -0
  195. package/workflows/redline-sync.yml +79 -0
  196. package/workflows/seed-canary.yml +231 -0
  197. package/workflows/verify-onboarding.yml +115 -0
  198. package/workflows/weekly-digest.yml +78 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../cli/platforms/azure/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import { isNonNullObject, isSuccess } from "../shape.js";
2
+ // CONTRACT: the gate pipeline (platforms/azure/gate-template.yml) publishes a
3
+ // pull-request status with this genre and name. The Status policy this file
4
+ // helps configure must require exactly that pair — see resolvePolicyTypeIds.
5
+ export const AZURE_STATUS_GENRE = 'redline';
6
+ export const AZURE_STATUS_NAME = 'gate';
7
+ export const POLICY_TYPE_NAMES = {
8
+ minimumReviewers: 'Minimum number of reviewers',
9
+ comments: 'Comment requirements',
10
+ status: 'Status',
11
+ requiredReviewers: 'Required reviewers',
12
+ build: 'Build',
13
+ };
14
+ // Brownfield marker: every branch policy Redline writes carries a
15
+ // displayName starting with this prefix. A policy of the same type without
16
+ // it is human-owned and is never updated or deleted.
17
+ export const REDLINE_POLICY_MARKER = 'Redline:';
18
+ export const AZURE_BUILD_POLICY_DISPLAY_NAME = `${REDLINE_POLICY_MARKER} gate build`;
19
+ /**
20
+ * Well-known Azure DevOps policy type ids, used only when the live lookup is
21
+ * unavailable. Verify these against `GET {project}/_apis/policy/types` on the
22
+ * pilot organisation before relying on the fallback path.
23
+ */
24
+ export const POLICY_TYPE_FALLBACK = {
25
+ 'Minimum number of reviewers': 'fa4e907d-c16b-4a4c-9dfa-4906e5d171dd',
26
+ 'Comment requirements': 'c6a1889d-b943-4856-b76f-9e46bb6b0df2',
27
+ Status: 'cbdc66da-9728-4af8-aada-9a5a32e4a226',
28
+ 'Required reviewers': 'fd2167ab-b0be-447a-8ec8-39368250530e',
29
+ Build: '0609b952-1397-4640-95ec-e00a01b2c241',
30
+ };
31
+ // The types endpoint response is untrusted external input: narrowed by an
32
+ // explicit parse function rather than trusted by shape assertion, and never
33
+ // read before the status is confirmed successful (a 403 body is a truthy
34
+ // object here too, not an array — `Array.isArray` below is what actually
35
+ // protects against it, not `?? []`).
36
+ function parsePolicyTypes(body) {
37
+ if (!isNonNullObject(body) || !Array.isArray(body['value']))
38
+ return null;
39
+ const types = [];
40
+ for (const item of body['value']) {
41
+ if (!isNonNullObject(item))
42
+ return null;
43
+ if (typeof item['id'] !== 'string' || typeof item['displayName'] !== 'string')
44
+ return null;
45
+ types.push({ id: item['id'], displayName: item['displayName'] });
46
+ }
47
+ return types;
48
+ }
49
+ /**
50
+ * Resolves each name in POLICY_TYPE_NAMES to the live policy type id for
51
+ * `project`, falling back to POLICY_TYPE_FALLBACK for any name the live
52
+ * lookup does not return (including when the whole call is denied or
53
+ * returns an unexpected shape). The lookup call itself never throws — a
54
+ * 403 here degrades to the fallback guids rather than aborting the caller.
55
+ */
56
+ export async function resolvePolicyTypeIds(client, project) {
57
+ const resolved = { ...POLICY_TYPE_FALLBACK };
58
+ const res = await client.request('GET', `/${project}/_apis/policy/types`);
59
+ if (!isSuccess(res.status))
60
+ return resolved;
61
+ const types = parsePolicyTypes(res.body);
62
+ if (types === null)
63
+ return resolved;
64
+ for (const type of types) {
65
+ if (type.displayName in resolved)
66
+ resolved[type.displayName] = type.id;
67
+ }
68
+ return resolved;
69
+ }
70
+ //# sourceMappingURL=policy-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-types.js","sourceRoot":"","sources":["../../../cli/platforms/azure/policy-types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEzD,8EAA8E;AAC9E,4EAA4E;AAC5E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAC5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAExC,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,gBAAgB,EAAE,6BAA6B;IAC/C,QAAQ,EAAE,sBAAsB;IAChC,MAAM,EAAE,QAAQ;IAChB,iBAAiB,EAAE,oBAAoB;IACvC,KAAK,EAAE,OAAO;CACN,CAAC;AAEX,kEAAkE;AAClE,2EAA2E;AAC3E,qDAAqD;AACrD,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAChD,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,qBAAqB,aAAa,CAAC;AAErF;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,6BAA6B,EAAE,sCAAsC;IACrE,sBAAsB,EAAE,sCAAsC;IAC9D,MAAM,EAAE,sCAAsC;IAC9C,oBAAoB,EAAE,sCAAsC;IAC5D,KAAK,EAAE,sCAAsC;CAC9C,CAAC;AAOF,0EAA0E;AAC1E,4EAA4E;AAC5E,yEAAyE;AACzE,yEAAyE;AACzE,qCAAqC;AACrC,SAAS,gBAAgB,CAAC,IAAa;IACrC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACzE,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3F,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAmB,EACnB,OAAe;IAEf,MAAM,QAAQ,GAA2B,EAAE,GAAG,oBAAoB,EAAE,CAAC;IACrE,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAU,KAAK,EAAE,IAAI,OAAO,qBAAqB,CAAC,CAAC;IACnF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,QAAQ,CAAC;IAE5C,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,QAAQ,CAAC;IAEpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,WAAW,IAAI,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACzE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,309 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { RedlineError } from "../../core/errors.js";
4
+ import { AZURE_BUILD_POLICY_DISPLAY_NAME, AZURE_STATUS_GENRE, AZURE_STATUS_NAME, POLICY_TYPE_NAMES, REDLINE_POLICY_MARKER, resolvePolicyTypeIds, } from "./policy-types.js";
5
+ import { createHostShapeError, isNonNullObject, isSuccess } from "../shape.js";
6
+ // Azure response bodies are untrusted external input, same house style as
7
+ // cli/platforms/github/verify.ts and cli/platforms/azure/install.ts: typed
8
+ // `unknown`, narrowed by an explicit parse function, and never read before
9
+ // the status is confirmed successful. An Azure error body is a truthy
10
+ // object (e.g. `{ message: "Forbidden" }`), not an array — `?? []` never
11
+ // fires on it, so shape is verified with `Array.isArray`/`isNonNullObject`,
12
+ // not coercion.
13
+ const hostShapeError = createHostShapeError('Azure DevOps');
14
+ // The pipeline `installGate` writes. Azure Repos ignores YAML `pr:` triggers,
15
+ // so this file plus the Build Validation policy are the whole of what runs the
16
+ // gate: with the file gone, no status is ever published and a blocking Status
17
+ // policy blocks every pull request forever.
18
+ const GATE_PIPELINE = '.azuredevops/redline-gate.yml';
19
+ // What the Status branch policy requires, and what a correctly installed
20
+ // pipeline publishes — the same `genre/name` shape readReportedCheckNames
21
+ // reports back off a pull request.
22
+ const AZURE_STATUS_CONTEXT = `${AZURE_STATUS_GENRE}/${AZURE_STATUS_NAME}`;
23
+ function assertOk(status, path) {
24
+ if (!isSuccess(status)) {
25
+ throw new RedlineError('host', `Azure DevOps returned HTTP ${status} reading ${path}`);
26
+ }
27
+ }
28
+ function parseScopedRepoIds(settings) {
29
+ const scope = settings['scope'];
30
+ if (!Array.isArray(scope))
31
+ return [];
32
+ const ids = [];
33
+ for (const entry of scope) {
34
+ if (isNonNullObject(entry) && typeof entry['repositoryId'] === 'string') {
35
+ ids.push(entry['repositoryId']);
36
+ }
37
+ }
38
+ return ids;
39
+ }
40
+ function parsePolicyConfigurations(body, what) {
41
+ if (!isNonNullObject(body) || !Array.isArray(body['value']))
42
+ throw hostShapeError(what);
43
+ return body['value'].map((item) => {
44
+ if (!isNonNullObject(item) ||
45
+ typeof item['id'] !== 'number' ||
46
+ typeof item['isEnabled'] !== 'boolean' ||
47
+ typeof item['isBlocking'] !== 'boolean') {
48
+ throw hostShapeError(what);
49
+ }
50
+ const type = item['type'];
51
+ if (!isNonNullObject(type) || typeof type['id'] !== 'string')
52
+ throw hostShapeError(what);
53
+ const settings = item['settings'];
54
+ if (!isNonNullObject(settings))
55
+ throw hostShapeError(what);
56
+ return {
57
+ id: item['id'],
58
+ isEnabled: item['isEnabled'],
59
+ isBlocking: item['isBlocking'],
60
+ type: { id: type['id'] },
61
+ settings,
62
+ };
63
+ });
64
+ }
65
+ function parseStatusList(body, what) {
66
+ if (!isNonNullObject(body) || !Array.isArray(body['value']))
67
+ throw hostShapeError(what);
68
+ return body['value'].map((item) => {
69
+ if (!isNonNullObject(item))
70
+ throw hostShapeError(what);
71
+ const context = item['context'];
72
+ if (!isNonNullObject(context) || typeof context['name'] !== 'string')
73
+ throw hostShapeError(what);
74
+ const genre = context['genre'];
75
+ if (genre !== undefined && typeof genre !== 'string')
76
+ throw hostShapeError(what);
77
+ return { name: context['name'], ...(genre !== undefined ? { genre } : {}) };
78
+ });
79
+ }
80
+ function parsePullRequestIds(body, what) {
81
+ if (!isNonNullObject(body) || !Array.isArray(body['value']))
82
+ throw hostShapeError(what);
83
+ return body['value'].map((item) => {
84
+ if (!isNonNullObject(item) || typeof item['pullRequestId'] !== 'number')
85
+ throw hostShapeError(what);
86
+ return item['pullRequestId'];
87
+ });
88
+ }
89
+ function parseEnablement(body, what) {
90
+ if (!isNonNullObject(body))
91
+ throw hostShapeError(what);
92
+ const advSecEnabled = body['advSecEnabled'];
93
+ const blockPushes = body['blockPushes'];
94
+ if (advSecEnabled !== undefined && typeof advSecEnabled !== 'boolean')
95
+ throw hostShapeError(what);
96
+ if (blockPushes !== undefined && typeof blockPushes !== 'boolean')
97
+ throw hostShapeError(what);
98
+ return {
99
+ ...(advSecEnabled !== undefined ? { advSecEnabled } : {}),
100
+ ...(blockPushes !== undefined ? { blockPushes } : {}),
101
+ };
102
+ }
103
+ export function createAzureVerify(client) {
104
+ const project = (ref) => {
105
+ if (!ref.project)
106
+ throw new RedlineError('usage', 'an Azure DevOps repository needs a project');
107
+ return ref.project;
108
+ };
109
+ const repoId = (ref) => {
110
+ if (!ref.repoId)
111
+ throw new RedlineError('usage', 'an Azure DevOps repository needs its id');
112
+ return ref.repoId;
113
+ };
114
+ return {
115
+ async readPolicy(ref) {
116
+ const proj = project(ref);
117
+ const types = await resolvePolicyTypeIds(client, proj);
118
+ const path = `/${proj}/_apis/policy/configurations`;
119
+ const res = await client.request('GET', path);
120
+ assertOk(res.status, path);
121
+ const configs = parsePolicyConfigurations(res.body, 'policy configurations');
122
+ const repo = repoId(ref);
123
+ const mine = configs.filter((c) => parseScopedRepoIds(c.settings).includes(repo));
124
+ if (mine.length === 0)
125
+ return null;
126
+ const byType = (name) => mine.find((c) => c.type.id === types[name]);
127
+ const reviewers = byType(POLICY_TYPE_NAMES.minimumReviewers);
128
+ const comments = byType(POLICY_TYPE_NAMES.comments);
129
+ const status = byType(POLICY_TYPE_NAMES.status);
130
+ // The gate's Build Validation policy — what actually queues the gate
131
+ // pipeline, since Azure Repos ignores YAML `pr:` triggers. Matched by
132
+ // the Redline: displayName marker, never by type alone: a repository
133
+ // routinely carries human-owned build policies of the same type.
134
+ const gateBuild = mine.find((c) => {
135
+ const displayName = c.settings['displayName'];
136
+ return (c.type.id === types[POLICY_TYPE_NAMES.build] &&
137
+ typeof displayName === 'string' &&
138
+ displayName.startsWith(REDLINE_POLICY_MARKER));
139
+ });
140
+ const genre = status?.settings['statusGenre'];
141
+ const statusName = status?.settings['statusName'];
142
+ // Mirrors the GitHub adapter: an advisory gate requires nothing, so
143
+ // required checks are derived only from a blocking status policy.
144
+ const requiredChecks = status !== undefined && status.isBlocking && typeof genre === 'string' && typeof statusName === 'string'
145
+ ? [`${genre}/${statusName}`]
146
+ : [];
147
+ const minimumApproverCount = reviewers?.settings['minimumApproverCount'];
148
+ // What this host cannot say is Redline's own. `applyPolicy` writes no
149
+ // required-reviewers policy at all here — Azure has no CODEOWNERS-driven
150
+ // reviewer requirement — so `requireCodeOwnerReview` read off this host
151
+ // is never evidence about Redline's install.
152
+ //
153
+ // The reviewer count and comment resolution are a three-way split, and
154
+ // collapsing the last two hid the most obvious way to loosen an Azure
155
+ // repository. A policy of that type carrying the Redline: marker is
156
+ // Redline's, and its value is drift when it weakens. An UNMARKED policy
157
+ // of that type is a human's: `init` reported it and wrote nothing rather
158
+ // than stacking a second copy of a one-setting-per-branch control, so
159
+ // holding the repository to a value Redline never set would fail it on
160
+ // every pull request forever. NO policy of that type at all is neither:
161
+ // it is the state after someone deleted Redline's, and the values read
162
+ // back (0 approvers, threads not required) are the real, live weakening.
163
+ const ownership = (config) => {
164
+ if (config === undefined)
165
+ return 'absent';
166
+ const displayName = config.settings['displayName'];
167
+ return typeof displayName === 'string' && displayName.startsWith(REDLINE_POLICY_MARKER)
168
+ ? 'redline'
169
+ : 'human';
170
+ };
171
+ const unownedSettings = ['requireCodeOwnerReview'];
172
+ // Both of these live in the minimum-reviewers policy's own settings
173
+ // (minimumApproverCount, resetOnSourcePush), so they share its ownership.
174
+ if (ownership(reviewers) === 'human') {
175
+ unownedSettings.push('requiredApprovals', 'dismissStaleReviews');
176
+ }
177
+ if (ownership(comments) === 'human')
178
+ unownedSettings.push('requireThreadResolution');
179
+ // A blocking Status policy with nothing to queue the pipeline reads as
180
+ // advisory above, which on its own tells an operator the opposite of
181
+ // what they need: the Status policy is the part that is right, and the
182
+ // missing Build Validation policy is why no pull request can ever
183
+ // satisfy it.
184
+ const advisoryReason = status?.isBlocking === true && gateBuild === undefined
185
+ ? `the ${AZURE_STATUS_GENRE}/${AZURE_STATUS_NAME} status policy is blocking, but no ` +
186
+ `"${AZURE_BUILD_POLICY_DISPLAY_NAME}" Build Validation policy queues the gate pipeline ` +
187
+ `(Azure Repos ignores the YAML pr: trigger), so the status is never published and every ` +
188
+ `pull request will sit blocked — re-run redline init with build administrator rights`
189
+ : null;
190
+ return {
191
+ requiredApprovals: typeof minimumApproverCount === 'number' ? minimumApproverCount : 0,
192
+ dismissStaleReviews: reviewers?.settings['resetOnSourcePush'] === true,
193
+ requireCodeOwnerReview: byType(POLICY_TYPE_NAMES.requiredReviewers) !== undefined,
194
+ requireThreadResolution: comments?.isEnabled === true,
195
+ requiredChecks,
196
+ // Without the Build Validation policy nothing runs the gate pipeline
197
+ // and redline/gate is never published — a blocking status policy on
198
+ // its own is a misconfiguration, not an enforcing gate.
199
+ blocking: status?.isBlocking === true && gateBuild !== undefined,
200
+ unownedSettings,
201
+ ...(advisoryReason !== null ? { advisoryReason } : {}),
202
+ };
203
+ },
204
+ readGateMachinery(cwd) {
205
+ const abs = join(cwd, GATE_PIPELINE);
206
+ const base = { path: GATE_PIPELINE, expected: AZURE_STATUS_CONTEXT };
207
+ if (!existsSync(abs))
208
+ return { ...base, present: false, publishes: null };
209
+ // Same guard as the GitHub adapter: a local read that cannot be
210
+ // completed is a finding about this repository, not an internal defect.
211
+ let body;
212
+ try {
213
+ body = readFileSync(abs, 'utf8');
214
+ }
215
+ catch (error) {
216
+ throw new RedlineError('failed', `cannot read ${GATE_PIPELINE}: ${error instanceof Error ? error.message : String(error)}`, 'restore it from redline init, or make it readable');
217
+ }
218
+ // CONTRACT with platforms/azure/gate-template.yml: its final step posts
219
+ // a pull-request status whose context is this genre and name, and the
220
+ // Status branch policy requires exactly that. Editing either value in
221
+ // the installed file makes the policy unsatisfiable, which is the same
222
+ // outage a renamed caller job is on GitHub.
223
+ //
224
+ // Matched with the quoting and spacing latitude jq's own body allows —
225
+ // a substring match on one spelling failed the gate over a second space
226
+ // — and with comment lines dropped first, so the contract surviving in a
227
+ // comment after the publish step was deleted is not read as publishing.
228
+ const live = body
229
+ .split('\n')
230
+ .filter((line) => !line.trimStart().startsWith('#'))
231
+ .join('\n');
232
+ const declares = (key, value) => new RegExp(`${key}\\s*:\\s*["']${value}["']`).test(live);
233
+ const publishes = declares('name', AZURE_STATUS_NAME) && declares('genre', AZURE_STATUS_GENRE)
234
+ ? AZURE_STATUS_CONTEXT
235
+ : null;
236
+ return { ...base, present: true, publishes };
237
+ },
238
+ async readReportedCheckNames(ref, pr) {
239
+ const path = `/${project(ref)}/_apis/git/repositories/${repoId(ref)}/pullRequests/${pr}/statuses`;
240
+ const res = await client.request('GET', path);
241
+ assertOk(res.status, path);
242
+ const statuses = parseStatusList(res.body, 'pull request statuses');
243
+ return statuses.map((s) => (s.genre ? `${s.genre}/${s.name}` : s.name));
244
+ },
245
+ async readSecurityState(ref) {
246
+ const path = `/${project(ref)}/_apis/management/repositories/${repoId(ref)}/enablement`;
247
+ const res = await client.request('GET', path, undefined, {
248
+ host: 'advsec',
249
+ apiVersion: '7.2-preview.1',
250
+ });
251
+ // Advanced Security is a separately licensed feature: a tenant without
252
+ // it returns 404 here — that is `unsupported`, a DEFINITE answer ("this
253
+ // capability does not exist on this repository"), never `denied`, the
254
+ // same distinction install.ts's enableSecurityFloor draws.
255
+ //
256
+ // A 401/403 is a different thing: Azure DevOps does not document this
257
+ // endpoint distinguishing "you lack permission to see this" from a
258
+ // well-formed refusal, so it degrades to `unknown` — the read gave no
259
+ // answer — rather than `denied`. Mapping it to `denied` was the exact
260
+ // defect Task 6 closed on GitHub and Task 17 closes here: a token that
261
+ // can WRITE the enablement setting but cannot READ it back made a
262
+ // re-run overwrite a correct `.redline.json` with a false pendingAdmin
263
+ // list, open a pull request, and exit 0. `isPending` treats `unknown`
264
+ // exactly like `unsupported` — neither enters pendingAdmin, and neither
265
+ // clears an entry already recorded there — so this is the conservative
266
+ // direction: an indeterminate read leaves the record exactly as it was.
267
+ //
268
+ // Any other non-2xx (500, 502, a gateway timeout) is a host error, not
269
+ // a finding about the repository, and must not be dressed up as any
270
+ // capability outcome — throw, same as assertOk everywhere else in this
271
+ // file.
272
+ const refusal = res.status === 404 ? 'unsupported' : res.status === 401 || res.status === 403 ? 'unknown' : null;
273
+ if (refusal === null)
274
+ assertOk(res.status, path);
275
+ const body = refusal === null ? parseEnablement(res.body, 'a repository enablement') : null;
276
+ const statusFor = (on) => refusal ?? (on === true ? 'applied' : 'denied');
277
+ return {
278
+ outcomes: [
279
+ {
280
+ capability: 'secret-scanning',
281
+ status: statusFor(body?.advSecEnabled),
282
+ detail: 'advanced security secret scanning',
283
+ },
284
+ {
285
+ capability: 'push-protection',
286
+ status: statusFor(body?.blockPushes),
287
+ detail: 'advanced security push protection',
288
+ },
289
+ // Read back off the same flag `enableSecurityFloor` records it from:
290
+ // dependency scanning is part of Advanced Security, not a separately
291
+ // switched feature, so `advSecEnabled` is the whole answer here.
292
+ {
293
+ capability: 'dependency-alerts',
294
+ status: statusFor(body?.advSecEnabled),
295
+ detail: 'advanced security dependency scanning',
296
+ },
297
+ ],
298
+ };
299
+ },
300
+ async latestPullRequestNumber(ref) {
301
+ const path = `/${project(ref)}/_apis/git/repositories/${repoId(ref)}/pullrequests?searchCriteria.status=all&$top=1`;
302
+ const res = await client.request('GET', path);
303
+ assertOk(res.status, path);
304
+ const ids = parsePullRequestIds(res.body, 'a pull request list');
305
+ return ids[0] ?? null;
306
+ },
307
+ };
308
+ }
309
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../cli/platforms/azure/verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { RedlineError } from "../core/errors.js";
2
+ const AZURE_HTTPS = /^https?:\/\/dev\.azure\.com\/([^/]+)\/([^/]+)\/_git\/([^/]+?)(?:\.git)?$/;
3
+ const AZURE_SSH = /^git@ssh\.dev\.azure\.com:v3\/([^/]+)\/([^/]+)\/([^/]+?)(?:\.git)?$/;
4
+ const AZURE_LEGACY = /^https?:\/\/([^.]+)\.visualstudio\.com\/([^/]+)\/_git\/([^/]+?)(?:\.git)?$/;
5
+ // GitHub is recognised by a hostname *containing* "github" plus a
6
+ // two-segment org/repo path — not by URL shape alone. This covers
7
+ // github.com and a self-hosted GitHub Enterprise Server whose hostname
8
+ // happens to include "github" (e.g. github.acme-corp.net), and rejects
9
+ // gitlab.com and other unrelated hosts that share the same path shape.
10
+ // A GHES instance on a hostname WITHOUT that substring (e.g.
11
+ // git.internal-corp.io) is NOT auto-detected and falls through to the
12
+ // "cannot tell which host" error below — telling an arbitrary self-hosted
13
+ // GHES apart from any other git-over-HTTPS remote by shape alone is
14
+ // underspecified without an allowlist or an explicit hint (out of scope
15
+ // here; a `--host` override belongs to the command surface, not this
16
+ // pure parser).
17
+ const GENERIC_HTTPS = /^https?:\/\/([^/]+)\/([^/]+)\/([^/]+?)(?:\.git)?$/;
18
+ const GENERIC_SSH = /^(?:ssh:\/\/)?git@([^:/]+)[:/]([^/]+)\/([^/]+?)(?:\.git)?$/;
19
+ export function parseRemote(url) {
20
+ const trimmed = url.trim();
21
+ if (trimmed === '') {
22
+ throw new RedlineError('usage', 'this repository has no git remote', 'add one with: git remote add origin <url>');
23
+ }
24
+ for (const pattern of [AZURE_HTTPS, AZURE_SSH, AZURE_LEGACY]) {
25
+ const m = pattern.exec(trimmed);
26
+ if (m)
27
+ return { host: 'azure', org: m[1], project: m[2], repo: m[3] };
28
+ }
29
+ for (const pattern of [GENERIC_SSH, GENERIC_HTTPS]) {
30
+ const m = pattern.exec(trimmed);
31
+ if (m && m[1].toLowerCase().includes('github')) {
32
+ return { host: 'github', org: m[2], repo: m[3] };
33
+ }
34
+ }
35
+ throw new RedlineError('usage', `cannot tell which host "${trimmed}" belongs to — recognised shapes: ` +
36
+ 'github.com/<org>/<repo> or any "github"-named hostname with that path shape (GitHub Enterprise Server), ' +
37
+ 'dev.azure.com/<org>/<project>/_git/<repo>, ssh.dev.azure.com:v3/<org>/<project>/<repo>, ' +
38
+ 'and <org>.visualstudio.com/<project>/_git/<repo>', 'add a github or azure devops remote to continue');
39
+ }
40
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../cli/platforms/detect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUjD,MAAM,WAAW,GAAG,0EAA0E,CAAC;AAC/F,MAAM,SAAS,GAAG,qEAAqE,CAAC;AACxF,MAAM,YAAY,GAAG,4EAA4E,CAAC;AAClG,kEAAkE;AAClE,kEAAkE;AAClE,uEAAuE;AACvE,uEAAuE;AACvE,uEAAuE;AACvE,6DAA6D;AAC7D,sEAAsE;AACtE,0EAA0E;AAC1E,oEAAoE;AACpE,wEAAwE;AACxE,qEAAqE;AACrE,gBAAgB;AAChB,MAAM,aAAa,GAAG,mDAAmD,CAAC;AAC1E,MAAM,WAAW,GAAG,4DAA4D,CAAC;AAEjF,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC3B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,YAAY,CACpB,OAAO,EACP,mCAAmC,EACnC,2CAA2C,CAC5C,CAAC;IACJ,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC;QAC7D,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC;IAC3E,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,CAAC;QACrD,CAAC;IACH,CAAC;IAED,MAAM,IAAI,YAAY,CACpB,OAAO,EACP,2BAA2B,OAAO,oCAAoC;QACpE,0GAA0G;QAC1G,0FAA0F;QAC1F,kDAAkD,EACpD,iDAAiD,CAClD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { RedlineError } from "../../core/errors.js";
3
+ import { createHttp } from "../http.js";
4
+ const readGhTokenFromCli = () => execFileSync('gh', ['auth', 'token'], { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }).trim();
5
+ export function resolveGitHubToken(env, readGhToken = readGhTokenFromCli) {
6
+ const fromEnv = env['GH_TOKEN'] ?? env['GITHUB_TOKEN'];
7
+ if (fromEnv)
8
+ return fromEnv;
9
+ try {
10
+ const token = readGhToken();
11
+ if (token)
12
+ return token;
13
+ }
14
+ catch {
15
+ // fall through to the error below
16
+ }
17
+ throw new RedlineError('permission', 'no GitHub credentials found — run: gh auth login, or set GH_TOKEN', 'run: gh auth login — or set GH_TOKEN');
18
+ }
19
+ export function createGitHubClient(opts = {}) {
20
+ const env = opts.env ?? process.env;
21
+ const token = opts.token ?? resolveGitHubToken(env);
22
+ const baseUrl = env['GITHUB_API_URL'] ?? 'https://api.github.com';
23
+ const headers = {
24
+ authorization: `Bearer ${token}`,
25
+ accept: 'application/vnd.github+json',
26
+ 'x-github-api-version': '2022-11-28',
27
+ 'user-agent': 'redlinegate',
28
+ };
29
+ const httpOptions = {
30
+ ...(opts.fetch ? { fetch: opts.fetch } : {}),
31
+ ...(opts.sleep ? { sleep: opts.sleep } : {}),
32
+ };
33
+ const http = createHttp(baseUrl, headers, httpOptions);
34
+ const graphqlUrl = `${baseUrl.replace(/\/api\/v3$/, '/api')}/graphql`;
35
+ return {
36
+ rest: (method, path, body) => http.request(method, path, body),
37
+ async graphql(query, variables) {
38
+ const res = await http.request('POST', graphqlUrl, { query, variables });
39
+ const errors = res.body?.errors;
40
+ if (errors?.length) {
41
+ throw new RedlineError('host', `GitHub GraphQL: ${errors.map((e) => e.message).join('; ')}`);
42
+ }
43
+ if (!res.body?.data)
44
+ throw new RedlineError('host', 'GitHub GraphQL returned no data');
45
+ return res.body.data;
46
+ },
47
+ };
48
+ }
49
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../cli/platforms/github/client.ts"],"names":[],"mappings":"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"}