feat: add plugin-backed canvases (#3111)
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { resolveMaxWorkers } from "./vitest-worker-budget";
|
||||
|
||||
describe("resolveMaxWorkers", () => {
|
||||
it("uses the twenty-percent local default when no override is set", () => {
|
||||
expect(resolveMaxWorkers(undefined, false, false, 10)).toBe("20%");
|
||||
});
|
||||
|
||||
it("caps an unsafe local percentage override", () => {
|
||||
expect(resolveMaxWorkers("100%", false, false, 10)).toBe("20%");
|
||||
});
|
||||
|
||||
it("caps an unsafe local numeric override to available capacity", () => {
|
||||
expect(resolveMaxWorkers("10", false, false, 10)).toBe(2);
|
||||
});
|
||||
|
||||
it("keeps a safe local percentage override", () => {
|
||||
expect(resolveMaxWorkers("10%", false, false, 10)).toBe("10%");
|
||||
});
|
||||
|
||||
it("falls back for an invalid zero-worker percentage", () => {
|
||||
expect(resolveMaxWorkers("0%", false, false, 10)).toBe("20%");
|
||||
});
|
||||
|
||||
it("requires an explicit opt-in for unsafe local capacity", () => {
|
||||
expect(resolveMaxWorkers("100%", false, true, 10)).toBe("100%");
|
||||
expect(resolveMaxWorkers("100%", true, false, 10)).toBe("100%");
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,41 @@
|
||||
import os from "node:os";
|
||||
|
||||
const LOCAL_WORKER_PERCENT = 20;
|
||||
|
||||
export function resolveMaxWorkers(
|
||||
value: string | undefined,
|
||||
isCI: boolean,
|
||||
allowUnsafe: boolean,
|
||||
availableParallelism = os.availableParallelism(),
|
||||
): string | number | undefined {
|
||||
const normalized = value?.trim();
|
||||
if (isCI || allowUnsafe) return parseConfiguredWorkers(normalized);
|
||||
if (!normalized) return `${LOCAL_WORKER_PERCENT}%`;
|
||||
|
||||
const percentage = parsePercentage(normalized);
|
||||
if (percentage !== null) {
|
||||
return percentage <= LOCAL_WORKER_PERCENT ? normalized : `${LOCAL_WORKER_PERCENT}%`;
|
||||
}
|
||||
|
||||
const requestedWorkers = Number(normalized);
|
||||
if (Number.isInteger(requestedWorkers) && requestedWorkers > 0) {
|
||||
return Math.min(requestedWorkers, localWorkerBudget(availableParallelism));
|
||||
}
|
||||
return `${LOCAL_WORKER_PERCENT}%`;
|
||||
}
|
||||
|
||||
function parseConfiguredWorkers(value: string | undefined): string | number | undefined {
|
||||
if (!value) return undefined;
|
||||
if (/^[1-9]\d*%$/.test(value)) return value;
|
||||
const workers = Number(value);
|
||||
return Number.isInteger(workers) && workers > 0 ? workers : undefined;
|
||||
}
|
||||
|
||||
function parsePercentage(value: string): number | null {
|
||||
if (!/^[1-9]\d*%$/.test(value)) return null;
|
||||
return Number(value.slice(0, -1));
|
||||
}
|
||||
|
||||
function localWorkerBudget(availableParallelism: number): number {
|
||||
return Math.max(1, Math.floor(availableParallelism * (LOCAL_WORKER_PERCENT / 100)));
|
||||
}
|
||||
Reference in New Issue
Block a user