chore(vendor): import pi 1.3.0
Imported as a linear vendor commit so forge rebases do not replay the upstream root tree. git-subtree-dir: third_party/pi git-subtree-split: 71023aec1546d6d677a65669c5665c0927ce0dd0
This commit is contained in:
70
third_party/pi/packages/evals/docker/install-runtime.mjs
vendored
Normal file
70
third_party/pi/packages/evals/docker/install-runtime.mjs
vendored
Normal file
@@ -0,0 +1,70 @@
|
||||
import { execFileSync } from "node:child_process";
|
||||
import { cpSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync } from "node:fs";
|
||||
import { dirname, join, resolve } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { installConsumer } from "../../../scripts/local-package-install.mjs";
|
||||
import { produceArtifactSet } from "../../../scripts/package-artifacts.mjs";
|
||||
import { codingAgentName } from "../../../scripts/coding-agent-smoke.mjs";
|
||||
|
||||
const repositoryRoot = resolve(dirname(fileURLToPath(import.meta.url)), "../../..");
|
||||
const outputDirectory = process.argv[2];
|
||||
if (!outputDirectory || process.argv.length !== 3) {
|
||||
throw new Error("Usage: node packages/evals/docker/install-runtime.mjs <output-directory>");
|
||||
}
|
||||
|
||||
const evalPackage = JSON.parse(readFileSync(join(repositoryRoot, "packages/evals/package.json"), "utf8"));
|
||||
const artifactSet = produceArtifactSet({
|
||||
build: false,
|
||||
outDir: join(outputDirectory, "artifacts"),
|
||||
repoRoot: repositoryRoot,
|
||||
// Docker build contexts may omit Git metadata; this artifact set is consumed only within this image build.
|
||||
source: null,
|
||||
});
|
||||
const artifactNames = new Set(artifactSet.packages.map((pkg) => pkg.name));
|
||||
const evaluatorDependencies = Object.entries(evalPackage.devDependencies).filter(([name]) => !artifactNames.has(name));
|
||||
const installDirectory = join(outputDirectory, "install");
|
||||
installConsumer({ artifactSet, directory: installDirectory, packageNames: [codingAgentName] });
|
||||
execFileSync(
|
||||
"npm",
|
||||
[
|
||||
"install",
|
||||
"--ignore-scripts",
|
||||
"--omit=dev",
|
||||
"--no-audit",
|
||||
"--no-fund",
|
||||
"--no-save",
|
||||
...evaluatorDependencies.map(([name, version]) => `${name}@${version}`),
|
||||
],
|
||||
{ cwd: installDirectory, stdio: "inherit" },
|
||||
);
|
||||
|
||||
for (const packageName of artifactNames) {
|
||||
if (packageName === codingAgentName) continue;
|
||||
const packageDirectory = join(installDirectory, "node_modules", ...packageName.split("/"));
|
||||
if (!existsSync(packageDirectory)) continue;
|
||||
for (const entry of readdirSync(packageDirectory, { withFileTypes: true })) {
|
||||
if (
|
||||
(entry.isDirectory() && ["docs", "examples", "src", "test", "tests"].includes(entry.name)) ||
|
||||
(entry.isFile() && /^(?:readme|changelog)(?:\..+)?$/i.test(entry.name))
|
||||
) {
|
||||
rmSync(join(packageDirectory, entry.name), { force: true, recursive: true });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const runtimeRoot = join(outputDirectory, "root");
|
||||
const runtimeEvalRoot = join(runtimeRoot, "packages/evals");
|
||||
mkdirSync(join(runtimeEvalRoot, "docker"), { recursive: true });
|
||||
for (const file of ["package.json", "vitest.base.ts"]) {
|
||||
cpSync(join(repositoryRoot, file), join(runtimeRoot, file));
|
||||
}
|
||||
for (const file of ["package.json", "vitest.evals.config.ts"]) {
|
||||
cpSync(join(repositoryRoot, "packages/evals", file), join(runtimeEvalRoot, file));
|
||||
}
|
||||
for (const directory of ["src", "evals"]) {
|
||||
cpSync(join(repositoryRoot, "packages/evals", directory), join(runtimeEvalRoot, directory), { recursive: true });
|
||||
}
|
||||
cpSync(
|
||||
join(repositoryRoot, "packages/evals/docker/entrypoint.ts"),
|
||||
join(runtimeEvalRoot, "docker/entrypoint.ts"),
|
||||
);
|
||||
Reference in New Issue
Block a user