Repository navigation
eng: Prepare 1.2.0 with shared build, lint, and test tooling - #2412
Open
Brandon Waterloo [MSFT] (bwateratmsft) wants to merge 61 commits into
Open
Brandon Waterloo [MSFT] (bwateratmsft) wants to merge 61 commits into
Brandon Waterloo [MSFT] (bwateratmsft) wants to merge 61 commits into
Conversation
Use native TypeScript 7 for builds and retain the TypeScript 6 API for ESLint. Keep Mocha 11 and Node 22 typings, resolving dependencies with a seven-day publication cutoff. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Replace esbuild-plugin-copy with a public native copy plugin, include Azure utils icon assets, and add webview presets with an optional Sass subpath. Cover native copying with integration tests and exclude compiled tests from package contents. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Compose explicit TypeScript lint projects, type-only module boundaries, and lazy import restrictions without replacing rule options. Ignore underscore-prefixed bindings and apply test relaxations to ts, mts, and cts files. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Add immutable VS Code and standalone Node Mocha configuration factories, a safe cache-link helper and CLI, and regression coverage for test, lint, browser, Sass, compiler, and public export behavior. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Remove the alpha publish tag and document native copying, the minimum Node version, compiler isolation and pnpm bin resolution, and the future TypeScript 7.1 API migration. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Copilot started reviewing on behalf of
Brandon Waterloo [MSFT] (bwateratmsft)
October 12, 2026 15:28
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
It changes release-critical shared tooling, dependency resolution, and cross-platform filesystem behavior across multiple public APIs.
0 open findings
What changed in this PR
Prepares the shared Azure extension engineering package for stable 1.2.0 with updated compilers, build/lint presets, and test infrastructure.
Changes:
- Adds native asset copying, webview/Sass build support, and updated dependencies.
- Adds composable ESLint, VS Code, and standalone Mocha configurations.
- Adds optional shared VS Code test caching and integration coverage.
| File | Description |
|---|---|
eng/.npmignore |
Excludes compiled tests from publication. |
eng/MIGRATION.md |
Documents Node, compiler, and copy-plugin migration. |
eng/README.md |
Describes compiler separation and Mocha tooling. |
eng/package-lock.json |
Locks the 1.2.0 dependency graph. |
eng/package.json |
Defines release metadata, exports, dependencies, and scripts. |
eng/tsconfig.json |
Explicitly includes Node ambient types. |
eng/src/cloneConfig.ts |
Adds configuration cloning support. |
eng/src/esbuild/README.md |
Documents copying, webviews, and Sass. |
eng/src/esbuild/copyPlugin.ts |
Implements native asset copying. |
eng/src/esbuild/esbuildConfigs.ts |
Adds copy and webview presets. |
eng/src/esbuild/sassPlugin.ts |
Adds opt-in Sass compilation. |
eng/src/eslint/README.md |
Documents new lint helpers and behavior. |
eng/src/eslint/eslintConfigs.ts |
Adds composable restrictions and project configuration. |
eng/src/mocha/README.md |
Documents standalone Node/Mocha tests. |
eng/src/mocha/config.ts |
Adds the shared Mocha configuration factory. |
eng/src/test/copyPlugin.test.mts |
Tests native copying behavior. |
eng/src/test/sharedTooling.test.mts |
Covers shared build, lint, and test tooling. |
eng/src/vscode-test/README.md |
Documents config factories and cache sharing. |
eng/src/vscode-test/linkTestCache.ts |
Implements safe test-cache linking. |
eng/src/vscode-test/linkTestCacheCli.ts |
Adds the cache-linking CLI. |
eng/src/vscode-test/vscodeTestConfigs.ts |
Adds independent VS Code config creation. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Use a standalone Mocha harness with should and chai-as-promised assertions. Remove duplicated CJS test runs, keep both production build formats, and preserve filesystem, watch, export, and optional-peer regression coverage. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Reverts d4bbd1d at user request. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 02654a8c-4ca1-401a-95f0-f672fbcb0c65
Brandon Waterloo [MSFT] (bwateratmsft)
marked this pull request as ready for review
October 15, 2026 14:14
Brandon Waterloo [MSFT] (bwateratmsft)
requested a review
from a team
as a code owner
October 15, 2026 14:14
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🤖
Summary
Prepare a stable
@microsoft/vscode-azext-eng@1.2.0release in focused commits:.nvmrcremains 22.18, without a package-local Node pin or CI Node-selection changes.esbuild-plugin-copywith a public native copy plugin, include Azure utils icon assets, and add browser/webview presets plus an optional Sass plugin subpath. Per-assetmodeaccepts exact destination permissions or a synchronous permission-transform callback..mts/.ctstest support.srcand share its compiler project, following vscode-azure's layout. Native ESM TypeScript tests exercise built public exports;test/global.test.tsis discovered alongside the suites, without a preload or eng-specific source-resolution hook. Keep local Chaishouldseparate from the publicexpectglobals.Compatibility notes
rootDir: "."and default file inclusion. Remove the explicitinclude, separate test tsconfig, andbuild:checkscript. Both builds check source and tests. TypeScript resolves package self-imports back to source usingrootDir/outDir; nopathsaliases or pre-existing build outputs are needed for the initial type-check.dist/esm/srcanddist/cjs/src; exports, declaration targets, the CLI bin, and lockfile bin metadata point to those paths. Public package subpath names are unchanged. Emitted tests are excluded from the archive. Anchor the source-folder packaging exclusion to the package root so it does not exclude the new production output.testscript remains justmocha. CI builds first; local developers runnpm run buildbeforenpm testbecause tests exercise built public helpers. Native TypeScript test files run directly, not their emitted JavaScript. Mocha retains its default two-second timeout. Thetest/*.test.{ts,mts}glob includes the local assertion setup; remove theimportnode option entirely. Only type-stripping and experimental-warning options remain.rewriteRelativeImportExtensionsremains removed. The shared resolver and its registration are unchanged from main: retain asynchronousmodule.register()and the existing extensionless.ts/.jslookup. Remove the temporary synchronous-hook migration and all explicit JavaScript source fallbacks. Consumer presets still transform enums; eng's harness only strips types. Consumer default test paths are unchanged.mode: 0o755sets permissions;mode: current => current | 0o100adds owner-execute. Invalid modes, callback errors, and chmod errors fail the build; source/destination aliases are rejected before chmod. Windows ignores overrides without logging or invoking callbacks; JSDoc says "Ignored on Windows." Source permission changes innode_modulesremain separate.Validation
The single-project/test simplification was validated from
eng, including a build with both output directories removed beforehand. After removing redundantpaths, native TS7, TypeScript 6, and typed ESLint passed with neither output directory present. After restoring the original asynchronous hook, ESM/CJS builds, typed lint, and the full native test suite passed again on Node 22. The latestglobal.test.tsdiscovery change passed full suites on actual Node 22.17.0 and Node 24.18 with no preload option, plus both module-target type-checks and typed lint.npm run buildnpm run lintnpm test -- --reporter dotnpm exec --offline --package=node@22.17.0 -- node node_modules\@typescript\native\bin\tsc --noEmit --incremental falseglobal.test.ts; also previously passed without aliases or build outputsnpm exec --offline --package=node@22.17.0 -- node node_modules\@typescript\native\bin\tsc --noEmit --incremental false --outDir .\dist\cjs --module nodenext --moduleResolution nodenext --declaration falsenpm exec --offline --package=node@22.17.0 -- node node_modules\typescript\bin\tsc --noEmit --incremental falsenpm exec --offline --package=node@22.17.0 -- node node_modules\@typescript\native\bin\tscnpm exec --offline --package=node@22.17.0 -- node node_modules\@typescript\native\bin\tsc --outDir .\dist\cjs --module nodenext --moduleResolution nodenext --declaration falsenpm exec --offline --package=node@22.17.0 -- node node_modules\mocha\bin\mocha.js --reporter dotnpm test -- --grep 'Node Mocha factory'npm exec --offline --package=node@22.17.0 -- node node_modules\mocha\bin\mocha.js --reporter dot --grep 'cache CLI'npm exec --offline --package=node@22.18.0 -- node node_modules\eslint\bin\eslint.js --max-warnings 0global.test.tsand no preloadnpm pack --dry-run --jsonnpm pack --json --pack-destination <session artifact directory>git diff --checkAll six CommonJS public helper entry points also loaded on actual Node 22.17.0. The integration fixture covers extensionless TypeScript preference, existing JavaScript imports, CommonJS resolution, enum transformation, and shared globals. Package/declaration integration verifies ESM exports and loading without the optional Sass peer. Existing typeless-package warnings remain visible.
Earlier validation of the unchanged copy implementation on Ubuntu/WSL with actual Node 22.17.0 and Linux esbuild 0.28.2 passed 14 tests, with 1 Windows-only pending, using
node --experimental-strip-types --disable-warning=ExperimentalWarning node_modules/mocha/bin/mocha.js --no-config --no-package --reporter dot "src/test/copyPlugin.test.mts"before relocation. POSIX checks were not rerun for this configuration-only simplification.Locked dependency versions remain those in the previously audited Node 22 lock: all 295 releases were published on or before
2026-10-05T15:06:58.056Z. This simplification changes only root CLI bin metadata in the lockfile.