Skip to content

Commit

Permalink
feat(cli): parallel sdk testing (#3723)
Browse files Browse the repository at this point in the history
Fixes the 5th and 6th points in #2689
Fixes: #3527
Fixes: #3224
## Description:
* Stop copying wing files when testing on cloud targets, instead changed the target dir to a random tmp dir.
* Separating env vars to be present in compilation context only (those are present only on the compiled artifact, not in its imports, so vars like WING_TARGET and WING_IS_TEST are still out). 
* Moving WING_SOURCE_DIR env var to the app constructor- this way it can be passed in the code easily and doesn't depend on global env.
* Upon testing, adding an extra nanoid to the tf and cdk root resource name, to prevent having resources with the same id over the different tests
* Fixing `Bucket.tryGet`, `Bucket.tryGetJson`, `Bucket.tryDelete` since were failing on aws targets
* adjusting the tests
* generating snapshots

**All code changes can be found on the 1st commit (16 FILES), 2nd one is for snapshots (290~ FILES)**

## Checklist

- [x] Title matches [Winglang's style guide](https://www.winglang.io/contributing/start-here/pull_requests#how-are-pull-request-titles-formatted)
- [x] Description explains motivation and solution
- [ ] Tests added (always)
- [ ] Docs updated (only required for features)
- [ ] Added `pr/e2e-full` label if this feature requires end-to-end testing

*By submitting this pull request, I confirm that my contribution is made under the terms of the [Wing Cloud Contribution License](https://github.com/winglang/wing/blob/main/CONTRIBUTION_LICENSE.md)*.
  • Loading branch information
tsuf239 authored Aug 9, 2023
1 parent 6ae93e3 commit 86779db
Show file tree
Hide file tree
Showing 311 changed files with 4,940 additions and 4,885 deletions.
1 change: 1 addition & 0 deletions apps/wing/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
"ora": "^5.4.1",
"tiny-updater": "^3.4.0",
"uuid": "^8.3.2",
"nanoid": "^3.3.6",
"vscode-languageserver": "^8.0.2"
},
"devDependencies": {
Expand Down
2 changes: 2 additions & 0 deletions apps/wing/src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ async function main() {
.default("sim")
)
.option("-p, --plugins [plugin...]", "Compiler plugins")
.option("-r, --rootId <rootId>", "App root id")
.hook("preAction", progressHook)
.hook("preAction", collectAnalyticsHook)
.action(runSubCommand("compile"));
Expand All @@ -149,6 +150,7 @@ async function main() {
.default("sim")
)
.option("-p, --plugins [plugin...]", "Compiler plugins")
.option("-r, --rootId <rootId>", "App root id")
.option("--no-clean", "Keep build output")
.hook("preAction", progressHook)
.hook("preAction", collectAnalyticsHook)
Expand Down
17 changes: 8 additions & 9 deletions apps/wing/src/commands/compile.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,9 @@ describe(
"compile command tests",
() => {
test("should be able to compile the SDK capture test to tf-aws", async () => {
const exampleWingFile = await generateTmpDir(exampleFilePath);

const artifactDir = await compile(exampleWingFile, {
const artifactDir = await compile(exampleFilePath, {
target: Target.TF_AWS,
targetDir: `${await generateTmpDir()}/target`,
});

const stats = await stat(artifactDir);
Expand All @@ -27,10 +26,9 @@ describe(
});

test("should be able to compile the SDK capture test to sim", async () => {
const exampleWingFile = await generateTmpDir(exampleFilePath);

const outDir = await compile(exampleWingFile, {
const outDir = await compile(exampleFilePath, {
target: Target.SIM,
targetDir: `${await generateTmpDir()}/target`,
});

const stats = await stat(outDir);
Expand All @@ -56,6 +54,7 @@ describe(
// because we changed to the example directory, we can just pass the filename
const outDir = await compile("extern_implementation.w", {
target: Target.SIM,
targetDir: `${await generateTmpDir()}/target`,
});

const stats = await stat(outDir);
Expand All @@ -69,8 +68,8 @@ describe(
});

test("should not delete files in the output directory if they are not generated by the compiler", async () => {
const exampleWingFile = await generateTmpDir(exampleFilePath);
const artifactDir = await compile(exampleWingFile, { target: Target.TF_AWS });
const targetDir = `${await generateTmpDir()}/target`;
const artifactDir = await compile(exampleFilePath, { target: Target.TF_AWS, targetDir });

const files = await readdir(artifactDir);
expect(files.length).toBeGreaterThan(0);
Expand All @@ -83,7 +82,7 @@ describe(
await writeFile(extraFile, "hello world");

// recompile
const artifactDir2 = await compile(exampleWingFile, { target: Target.TF_AWS });
const artifactDir2 = await compile(exampleFilePath, { target: Target.TF_AWS, targetDir });
expect(artifactDir2).toBe(artifactDir);

const files2 = await readdir(artifactDir2);
Expand Down
7 changes: 7 additions & 0 deletions apps/wing/src/commands/compile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,17 @@ const log = debug("wing:compile");
export interface CompileOptions {
readonly target: wingCompiler.Target;
readonly plugins?: string[];
readonly rootId?: string;
/**
* Whether to run the compiler in `wing test` mode. This may create multiple
* copies of the application resources in order to run tests in parallel.
*/
readonly testing?: boolean;
/**
* The location to save the compilation output
* @default "./target"
*/
readonly targetDir?: string;
}

/**
Expand All @@ -39,6 +45,7 @@ export async function compile(entrypoint: string, options: CompileOptions): Prom
...options,
log,
color: coloring,
targetDir: options.targetDir,
});
} catch (error) {
if (error instanceof wingCompiler.CompileError) {
Expand Down
18 changes: 10 additions & 8 deletions apps/wing/src/commands/test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import debug from "debug";
import { promisify } from "util";
import { generateTmpDir, withSpinner } from "../util";
import { Target } from "@winglang/compiler";
import { nanoid } from "nanoid";
import { readFile, rm, rmSync } from "fs";

const log = debug("wing:test");
Expand All @@ -30,7 +31,7 @@ export interface TestOptions extends CompileOptions {
export async function test(entrypoints: string[], options: TestOptions): Promise<number> {
const startTime = Date.now();
const results: { testName: string; results: std.TestResult[] }[] = [];
for (const entrypoint of entrypoints) {
const testFile = async (entrypoint: string) => {
const testName = generateTestName(entrypoint);
try {
const singleTestResults: std.TestResult[] | void = await testOne(entrypoint, options);
Expand All @@ -42,7 +43,8 @@ export async function test(entrypoints: string[], options: TestOptions): Promise
results: [{ pass: false, path: "", error: (error as Error).message, traces: [] }],
});
}
}
};
await Promise.all(entrypoints.map(testFile));
printResults(results, Date.now() - startTime);

// if we have any failures, exit with 1
Expand Down Expand Up @@ -129,16 +131,16 @@ function printResults(
}

async function testOne(entrypoint: string, options: TestOptions) {
// since the test cleans up after each run, it's essential to create a temporary directory-
// at least one that is different then the usual compilation dir, otherwise we might end up cleaning up the user's actual resources.
const tempFile: string =
options.target === Target.SIM ? entrypoint : await generateTmpDir(entrypoint);
const synthDir = await withSpinner(
`Compiling ${generateTestName(entrypoint)} to ${options.target}...`,
() =>
compile(tempFile, {
async () =>
compile(entrypoint, {
...options,
rootId: options.rootId ?? `Test.${nanoid(10)}`,
testing: true,
// since the test cleans up after each run, it's essential to create a temporary output directory-
// at least one that is different then the usual compilation output dir, otherwise we might end up cleaning up the user's actual resources.
...(options.target !== Target.SIM && { targetDir: `${await generateTmpDir()}/target` }),
})
);

Expand Down
33 changes: 10 additions & 23 deletions apps/wing/src/util.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { copyFileSync, promises as fsPromise, readFileSync, cpSync } from "fs";
import { basename, join, resolve } from "path";
import { copyFileSync, promises as fsPromise } from "fs";
import { tmpdir } from "os";
import { join } from "path";

/**
* Normalize windows paths to be posix-like.
Expand All @@ -27,7 +27,7 @@ export async function withSpinner<T>(message: string, fn: () => Promise<T>): Pro

const spinner = ora({
stream: process.stdout, // hangar tests currently expect stderr to be empty or else they fail
text: message,
text: `${message}\n`,
}).start();
try {
const result = await fn();
Expand All @@ -54,25 +54,8 @@ export async function copyDir(src: string, dest: string) {
/**
* Creates a clean environment for each test by copying the example file to a temporary directory.
*/
export async function generateTmpDir(sourcePath: string, ...additionalFiles: string[]) {
const sourceFile = basename(sourcePath);
const file = readFileSync(sourcePath, "utf-8");
const externs = file.match(/(?<=extern ")[.\\\/A-Za-z0-9_-]+/g) ?? [];
const sourceDir = await fsPromise.mkdtemp(join(tmpdir(), "-wing-compile-test"));
const tempWingFile = join(sourceDir, sourceFile);

cpSync(sourcePath, tempWingFile);

for (const filePath of additionalFiles) {
const file = basename(filePath);
cpSync(filePath, join(sourceDir, file));
}

for (const path of externs) {
cpSync(join(resolve(sourcePath), `../${path}`), join(sourceDir, path));
}

return tempWingFile;
export async function generateTmpDir() {
return fsPromise.mkdtemp(join(tmpdir(), "-wing-compile-test"));
}

/**
Expand All @@ -95,4 +78,8 @@ export function parseNumericString(text?: string) {
return number;
}

export const currentPackage: { name: string, version: string, engines: { node: string } } = require("../package.json");
export const currentPackage: {
name: string;
version: string;
engines: { node: string };
} = require("../package.json");
2 changes: 1 addition & 1 deletion libs/wingc/src/jsify.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ impl<'a> JSifier<'a> {
output.line("const $App = $stdlib.core.App.for(process.env.WING_TARGET);".to_string());
let app_name = self.entrypoint_file_path.file_stem().unwrap().to_string_lossy();
output.line(format!(
"new $App({{ outdir: {}, name: \"{}\", rootConstruct: {}, plugins: $plugins, isTestEnvironment: {} }}).synth();",
"new $App({{ outdir: {}, name: \"{}\", rootConstruct: {}, plugins: $plugins, isTestEnvironment: {}, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }}).synth();",
OUTDIR_VAR, app_name, ROOT_CLASS, ENV_WING_IS_TEST
));
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

2 changes: 1 addition & 1 deletion libs/wingc/src/jsify/snapshots/builtins.snap
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

2 changes: 1 addition & 1 deletion libs/wingc/src/jsify/snapshots/capture_token.snap
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,6 @@ class $Root extends $stdlib.std.Resource {
}
}
const $App = $stdlib.core.App.for(process.env.WING_TARGET);
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test }).synth();
new $App({ outdir: $outdir, name: "main", rootConstruct: $Root, plugins: $plugins, isTestEnvironment: $wing_is_test, entrypointDir: process.env['WING_SOURCE_DIR'], rootId: process.env['WING_ROOT_ID'] }).synth();
```

Loading

0 comments on commit 86779db

Please sign in to comment.