Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
11 changes: 11 additions & 0 deletions change/change-b10efea4-006d-4179-865d-f3832fa27d44.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"changes": [
{
"type": "patch",
"comment": "Fix targetWorker import path extension",
"packageName": "@lage-run/scheduler",
"email": "elcraig@microsoft.com",
"dependentChangeType": "patch"
}
]
}
11 changes: 11 additions & 0 deletions change/change-cfddac19-8849-4345-9490-243f9c6a98f9.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"changes": [
{
"type": "minor",
"comment": "Generate the CLI bundles directly from TypeScript code, not from the intermediate CJS generated by swc. This is marked as a minor change due to slight chance of behavior differences.",
"packageName": "lage",
"email": "elcraig@microsoft.com",
"dependentChangeType": "patch"
}
]
}
3 changes: 2 additions & 1 deletion packages/lage/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@
"@lage-run/cli": "workspace:^",
"@lage-run/monorepo-scripts": "workspace:^",
"@lage-run/runners": "workspace:^",
"esbuild": "^0.25.0"
"esbuild": "^0.28.0",
"workspace-tools-npm": "npm:workspace-tools@latest"
},
"files": [
"dist"
Expand Down
27 changes: 18 additions & 9 deletions packages/lage/scripts/bundle.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,34 +3,43 @@ import * as esbuild from "esbuild";
import fs from "fs";
import path from "path";
import { fileURLToPath } from "url";
import { getPackageInfos } from "workspace-tools-npm";

const dirname = path.dirname(fileURLToPath(import.meta.url));
const packageRoot = path.resolve(dirname, "..");
const runnerDir = path.resolve(packageRoot, "../runners/lib");
const repoRoot = path.resolve(packageRoot, "../..");
const runnerDir = path.resolve(packageRoot, "../runners/src");
const outdir = "dist";

const internalPackages = Object.values(getPackageInfos(repoRoot)).filter((info) => !info.private);

fs.rmSync(path.join(packageRoot, outdir), { recursive: true, force: true });

console.log("Bundling with esbuild...");

await esbuild.build({
absWorkingDir: packageRoot,
// Point all entries to the source files
entryPoints: {
lage: "@lage-run/cli/lib/cli.js",
"lage-server": "@lage-run/cli/lib/server.js",
lage: "../cli/src/cli.ts",
"lage-server": "../cli/src/server.ts",
main: "./index.js",
"workers/targetWorker": "@lage-run/scheduler/lib/workers/targetWorker.js",
singleTargetWorker: "@lage-run/cli/lib/commands/server/singleTargetWorker.js",
"workers/targetWorker": "../scheduler/src/workers/targetWorker.ts",
singleTargetWorker: "../cli/src/commands/server/singleTargetWorker.ts",
// Bundle the runners instead of simply copying, in case they reference other files
...Object.fromEntries(
fs
.readdirSync(runnerDir)
.filter((file) => file.endsWith("Runner.js"))
.filter((file) => file.endsWith("Runner.ts"))
.map((runner) => {
const name = path.basename(runner, ".js");
return [`runners/${name}`, `@lage-run/runners/lib/${runner}`];
const name = path.basename(runner, ".ts");
return [`runners/${name}`, `../runners/src/${runner}`];
})
),
},
// Alias all packages to their source files for better tree shaking
// (aliases to packages which aren't referenced do nothing)
alias: Object.fromEntries(internalPackages.map((pkg) => [pkg.name, `${pkg.name}/src/index.ts`])),
outdir,
bundle: true,
platform: "node",
Expand All @@ -42,7 +51,7 @@ await esbuild.build({
"./runners/NpmScriptRunner.js",
"./runners/NoOpRunner.js",
"./runners/WorkerRunner.js",
"./workers/targetWorker",
"./workers/targetWorker.js",
"./singleTargetWorker.js",
],
minify: true,
Expand Down
2 changes: 1 addition & 1 deletion packages/scheduler/src/SimpleScheduler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export class SimpleScheduler implements TargetScheduler<WorkerResult> {
maxWorkersByGroup: options.maxWorkersPerTask,
groupBy: ({ target }) => target.task,
maxWorkers: options.concurrency,
script: require.resolve("./workers/targetWorker"),
script: require.resolve("./workers/targetWorker.js"),
workerOptions: {
stdout: true,
stderr: true,
Expand Down
Loading
Loading