Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
9306e8a
Project import generated by Copybara.
Sep 20, 2026
060a1e4
Merge remote-tracking branch 'origin/main' into sync/mono-projection
github-actions[bot] Sep 20, 2026
c02581c
Project import generated by Copybara.
Sep 20, 2026
7a45f5a
Merge remote-tracking branch 'origin/main' into sync/mono-projection
github-actions[bot] Sep 20, 2026
56cf0b2
chore: project private-runner from Mono a2e8b231b208
Sep 20, 2026
6dddc86
Merge remote-tracking branch 'origin/main' into sync/mono-projection
github-actions[bot] Sep 21, 2026
7040d9e
chore: project private-runner from Mono 9b559bc70e7d
Sep 21, 2026
114741f
Merge remote-tracking branch 'origin/main' into sync/mono-projection
github-actions[bot] Sep 21, 2026
fbae48b
chore: project private-runner from Mono 9a003786d767
Sep 21, 2026
044373c
Merge remote-tracking branch 'origin/main' into sync/mono-projection
github-actions[bot] Sep 21, 2026
a6a489b
chore: project private-runner from Mono 511bd2305f5a
Sep 21, 2026
8daad25
Merge remote-tracking branch 'origin/main' into sync/mono-projection
github-actions[bot] Sep 21, 2026
ba50ebb
chore: project private-runner from Mono ad7b9df0b712
Sep 21, 2026
b2e0e2d
chore: project private-runner from Mono 4ab4845398fd
Sep 21, 2026
d60148e
Merge remote-tracking branch 'origin/main' into sync/mono-projection
github-actions[bot] Sep 22, 2026
ca530bc
chore: project private-runner from Mono 2df44a8283c0
Sep 22, 2026
f994d02
Merge remote-tracking branch 'origin/main' into sync/mono-projection
github-actions[bot] Sep 23, 2026
acd7f01
chore: project private-runner from Mono 3ccfbea716d8
Sep 23, 2026
c8026c9
Merge remote-tracking branch 'origin/main' into sync/mono-projection
github-actions[bot] Sep 24, 2026
0492ddf
chore: project private-runner from Mono a971433d12b4
Sep 24, 2026
2e11366
Merge remote-tracking branch 'origin/main' into sync/mono-projection
github-actions[bot] Sep 24, 2026
91f1a1a
chore: project private-runner from Mono c97cbb033be2
Sep 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .repository-projection.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
"projection": "private-runner",
"projectionSchemaVersion": 1,
"sourceRepository": "dx-corp/mono",
"sourceSha": "a971433d12b40d9042b3a64c2c074fa8fc398e69",
"sourceSha": "c97cbb033be2d815b33abd51b9e1a9a37968066c",
"destinationRepository": "dx-corp/private-runner",
"priorProjectedBase": "12bfd181c9c1eb5ca6c077d5aca864307181c418",
"priorProjectedBase": "f8da6caff9cccc9a3eee5428d40dcd891215f108",
"definitionDigest": "851a6bbb3b1c4baf8c69cb244ea18da79c272bf0f9f21aaf5525836c960f2f7b",
"toolDigest": "ff02edcbb40b0028af10ab01a101e918341f157a",
"contentDigest": "f17aafbe6f41d8f1a6a6ea7861a871a3b314a6cb732c3622f51eb75b4ae54b32",
"toolDigest": "0aae6000dbd0940f5a0af380463ccb5a83285eda",
"contentDigest": "e27a7b4c85d849a1f0dab4c7bad4b7c11555655bb93d2304f5168796ec2fb402",
"publicationEligible": true
}
21 changes: 20 additions & 1 deletion scripts/distribution-validation.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import { execFileSync, spawnSync } from "node:child_process";
import { lstat, mkdtemp, readFile, readdir, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join, relative, resolve } from "node:path";
import { dirname, join, relative, resolve } from "node:path";
import { pathToFileURL } from "node:url";
import { parseArgs } from "node:util";

Expand Down Expand Up @@ -75,6 +75,24 @@ export async function validateSafeTree(name, root) {
return files;
}

export async function validateApiDocLinks(root, files) {
for (const file of files.filter(path => path.endsWith(".md"))) {
const source = await readFile(join(root, file), "utf8");
const links = [...source.matchAll(/\]\(([^\s)]+)(?:\s+"[^"]*")?\)/g)]
.map(match => ({ target: match[1], base: dirname(join(root, file)) }));
const sourcePaths = [...source.matchAll(/(?<![A-Za-z0-9_./-])(?:sdk\/deixic|contracts|proto)\/[A-Za-z0-9_./-]+/g)]
.map(match => ({ target: match[0], base: root }));
for (const { target, base } of [...links, ...sourcePaths]) {
if (/^(?:[a-z][a-z0-9+.-]*:|\/|#)/i.test(target)) continue;
const pathname = decodeURIComponent(target.split(/[?#]/, 1)[0]);
const resolved = resolve(base, pathname);
const path = relative(root, resolved).split("\\").join("/");
requireValue(path && !path.startsWith("../") && path !== ".." && files.includes(path),
`broken API documentation link: ${file} -> ${target}`);
}
}
}

export async function validateProvenance(name, root) {
const provenance = JSON.parse(await readFile(join(root, ".repository-projection.json"), "utf8"));
exactKeys(provenance, [
Expand Down Expand Up @@ -127,6 +145,7 @@ async function validateDeployment(root, files) {
}

async function validateApi(root, files) {
await validateApiDocLinks(root, files);
requireValue(files.includes("scripts/contracts/normalize-openapi-generated.py"), "API OpenAPI normalizer is missing");
const actualProto = files.filter(path => path.startsWith("proto/") && path.endsWith(".proto")).map(path => path.slice(6)).sort();
requireValue(JSON.stringify(actualProto) === JSON.stringify(PROTO), "API protobuf allowlist differs from the public SDK closure");
Expand Down