Commit Graph
176 Commits
Author SHA1 Message Date
4e6997ae07 build: support platform-specific built-in extensions from GitHub releases (#324206)
* Support platform-specific built-in extensions from GitHub releases

Adds support for downloading platform-specific built-in extension VSIXs
from GitHub releases, keyed by marketplace target platform. Also downloads
the latest pre-release assets for insiders builds, ignoring the pinned
version and checksum.

- extensionTarget.ts: resolve build target + release asset name
- builtInExtensions.ts: platformSpecific checksum map + insiders detection
- extensions.ts/fetch.ts: fromGithub asset selection + prerelease support
- CI: platform-aware cache key and target env plumbing

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Insiders downloads the latest release instead of latest pre-release

Insiders builds should always be on the newest published release, so the
GitHub download now resolves the most recently published release (including
pre-releases) rather than filtering to pre-releases only.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address code review feedback for platform-specific extensions

- Sort latest releases by published_at instead of created_at
- Log a warning when skipping checksum validation in latest mode
- Document that platform-specific extensions always download from GitHub
- Skip gracefully on unsupported platforms; keep a clear error for a
  known target missing from the platformSpecific map

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address CCR feedback: restrict targets and harden helpers

- Restrict getExtensionTarget to the supported marketplace targets, returning
  undefined for unsupported OS/arch (e.g. win32-ia32, linux-riscv64) so callers
  skip gracefully instead of failing with a missing-asset error
- Remove the bogus ia32 -> x86 mapping (no win32-x86 target exists)
- Validate the target format in getPlatformSpecificAssetName and throw a clear
  error for malformed targets
- Guard the latest-release sort against NaN timestamps (missing published_at
  sorts to the end deterministically)
- Update tests accordingly

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Align asset naming with VS Code convention and support product.overrides.json

The platform-specific extension this feature targets (typescript-go's
TypeScriptTeam.native-preview) publishes VSIX assets named
<name>-<target>.vsix using the raw marketplace target platform, not the
node-vsce-sign osx/win/arm aliasing. Update getPlatformSpecificAssetName to
the standard <name>-<target>.vsix convention and validate against the
supported target set.

- fetch.ts: in latest mode, select the newest published release that actually
  contains the requested asset, so releases shipping only other artifacts
  (e.g. tarballs) without a matching VSIX are skipped
- builtInExtensions.ts: merge product.overrides.json (gitignored, local) so
  overridden built-in extensions are downloaded, mirroring bootstrap-meta
- Update tests for the new naming convention

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Detect extensions project by path segment, not substring

ESBuildTranspiler decided CJS vs ESM output via configFilePath.includes('extensions').
When the repo is checked out (e.g. as a git worktree) into a folder whose name
merely contains the substring 'extensions', the 'src' project was wrongly treated
as an extension and transpiled to CJS, breaking top-level await in src/cli.ts,
src/server-cli.ts and src/server-main.ts. Match an 'extensions' path segment instead.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Remove product.overrides.json support from built-in extensions download

Revert the download script to read product.json directly, per review feedback.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-14 10:26:58 +00:00
Henning DieterichsandHenning Dieterichs 58c0981e26 Registers @vscode/markdown-editor in markdown-language-features extension 2026-06-09 09:49:57 +02:00
c7f7332a77 Potential fix for pull request finding
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-20 16:35:06 -07:00
Matt Bierner 66fa7c959a Make sure npm run watch also checks extension media builds 2026-05-20 15:52:30 -07:00
Henning DieterichsandGitHub 3254ff15b9 Isolates gulp task dependencies and adds facade for gulp plugins (#317101) 2026-05-18 11:28:04 -07:00
Matt Bierner ea086aed28 Move bierner.markdown-mermaid into core
This makes my mermaid markdown extension builtin. As part of this I've renamed `chat-mermaid-features` to the more generic `markdown-mermaid-features` since this once extension now contributes a consistent mermaid UX for chat, notebooks, and previews

Fixes #293028
2026-05-13 16:04:49 -07:00
Connor Peet 5d513f1be7 fix build 2026-05-07 10:30:32 -07:00
Connor Peet cbb586e765 test 2026-05-07 10:25:54 -07:00
Matt BiernerandCopilot 59240b668c Make .esbuild file a module
This prevents this annoying warning from getting printed all the time

```
[watch-copilot         ] [watch:esbuild  ] (node:12319) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///Users/matb/projects/vscode/extensions/copilot/.esbuild.ts is not specified and it doesn't parse as CommonJS.
[watch-copilot         ] [watch:esbuild  ] Reparsing as ES module because module syntax was detected. This incurs a performance overhead.
[watch-copilot         ] [watch:esbuild  ] To eliminate this warning, add "type": "module" to /Users/matb/projects/vscode/extensions/copilot/package.json.
[watch-copilot         ] [watch:esbuild  ] (Use `node --trace-warnings ...` to show where the warning was created)
```

Co-authored-by: Copilot <copilot@github.com>
2026-04-30 00:06:45 -07:00
f0ed216a04 feat: support building the built-in copilot extension for local builds (#309079)
Co-authored-by: Copilot <copilot@github.com>
2026-04-12 18:13:58 +00:00
João Moreno 2f57714276 build: ship copilot as VSIX artifact instead of compiling in-tree
- Exclude copilot from local extension compilation (excludedExtensions)
- Copilot job now packages and publishes VSIX as pipeline artifact
- All client jobs poll for and download the copilot VSIX artifact
- downloadCopilotVsix.ts handles waiting, downloading, and extracting
- Polling fails fast if the Copilot job itself fails
- Added BUILDS_API_URL to CI jobs that were missing it
2026-03-29 13:26:10 +02:00
João Moreno d07d1f2844 build: skip tsgo type-check for extensions with custom build systems 2026-03-21 19:51:12 +01:00
João Moreno 1f45f79c74 build: set cwd to extension dir when running esbuild scripts 2026-03-21 19:41:51 +01:00
João Moreno 179a94f298 build: detect .esbuild.ts for copilot extension bundling 2026-03-21 09:21:27 +01:00
RoboandGitHub 555f6469c6 ci: fix universal build for fs-copyfile usage in git extension (#302332) 2026-03-17 07:45:44 +01:00
c3b9417517 Git - second attempt to adopt the @vscode/fs-copyfile package (#301443)
* Reapply "Git - adopt the new package to use copy-on-write for the worktree include files (#299583)" (#300448)

This reverts commit c56c7bc071.

* Attempt to fix tests

* Fix build

* build: copy node_modules into extension bundle

* Regenerate lock file

---------

Co-authored-by: deepak1556 <hop2deep@gmail.com>
2026-03-16 14:14:06 +00:00
Matt Bierner 7a090df6c7 Re-remove webpack (again again)
This reverts commit 1d31c3ce40.
2026-03-11 10:46:45 -07:00
Osvaldo OrtegaandGitHub 1d31c3ce40 Revert "Re-remove webpack" 2026-03-10 20:12:53 -07:00
Matt Bierner 03968c2076 Re-remove webpack
All of our extensions are now using esbuild
2026-03-10 13:42:52 -07:00
Matt Bierner 9086b47862 Temporarily restore webpack ext builds
Needed since https://github.com/microsoft/vscode/pull/298920 snuck in which brought back webpack for the github extension
2026-03-05 08:45:54 -08:00
Matt Bierner ffc4f9dcb3 Reapply 8e445caeff
Switching to a slightly older postcss version to avoid the official build issue
2026-03-03 10:57:52 -08:00
Matt Bierner 8e445caeff Revert "Remove remaining webpack references for building extensions"
This reverts commit 3d7cf10fd1.
2026-03-02 22:42:15 -08:00
Matt Bierner 3d7cf10fd1 Remove remaining webpack references for building extensions
All extensions now should be fully ported over to use esbuild instead of webpack
2026-03-02 15:07:39 -08:00
Matt BiernerandGitHub 5a566c256d Merge pull request #295104 from microsoft/dev/mjbvz/esbuild-css
Use esbuild instead of webpack to bundle the css extension
2026-02-18 10:51:19 -08:00
Matt Bierner bf3b738a9f Try to align scanBuiltinExtensions with new esbuild changes 2026-02-17 10:01:30 -08:00
Matt Bierner 39ebcc7f34 Use esbuild instead of webpack to bundle the css extension
Switches from webpack to esbuild to bundle the css extension. Tested this locally in a browser and creating an official build to test the bundled extension still work correctly
2026-02-13 00:05:47 -08:00
Matt Bierner cb714c7c9f Addressing code review comments 2026-02-11 16:38:06 -08:00
Matt Bierner 03561955b7 Clean up esbuilding of extensions
- Make sure we still always type check using `tsgo --noEmit`
- Align names of esbuild files
- Convert all esbuild files to typescript. We use the `.mts` extension to avoid annoying node warnings about using pacakges
2026-02-11 14:57:16 -08:00
Matt BiernerandGitHub d434a65945 Use esbuild to pack the markdown extension for desktop and web (#294208)
* Try using esbuild to bundle our built-in extensions

Test switching to esbuild instead of webpack to bundle our buildin extensions. Setup so we can do this incrementally and starting with the markdown extension as a test

* Fix build ext media

* Fix .ts script name check

* Update comment

* Use ts for all scripts
2026-02-10 20:32:40 +00:00
João MorenoandGitHub bf729fa50a strip out git askpass sourcemap footer (#291673)
fixes #282020
2026-01-29 18:27:20 +00:00
Matt Bierner e779f86b17 Build script cleanup
For #277526

Quick cleanup pass after converting these scripts
2025-11-24 14:07:28 -08:00
2648263d3e Run our build scripts directly as typescript (#277567)
* Run our build scripts directly as typescript #277567

Follow up on #276864
For #277526

* Remove a few more ts-node references

* Fix linux and script reference

* Remove `_build-script` ref

* Fix script missing closing quote

* use type only import

* Fix export

* Make sure to run copy-policy-dto

* Make sure we run the copy-policy-dto script

* Enable `verbatimModuleSyntax`

* Pipelines fixes

* Try adding explicit ext to path

* Fix bad edit

* Revert extra `--`

---------

Co-authored-by: João Moreno <joaomoreno@users.noreply.github.com>
2025-11-21 14:56:00 +01:00
João MorenoandGitHub f4c2700d45 cleanup any casts (#270371)
related to #269213
cc @mjbvz @jrieken
2025-10-08 14:05:31 +00:00
Matt Bierner 360c9fd134 Add lint rule for as any and bulk ignore all existing breaks
For #269213

This adds a new eslint rule for `as any` and `<any>({... })`. We'd like to remove almost all of these, however right now the first goal is to prevent them in new code. That's why with this first PR I simply add `eslint-disable` comments for all breaks

Trying to get this change in soon after branching off for release to hopefully minimize disruption during debt week work
2025-10-02 23:38:33 -07:00
Matt Bierner c7e7a779e8 Add basic mermaid rendering support in core
For #257761

Ports over extension sample + a few improvements to core
2025-09-10 18:22:39 -07:00
Matt Bierner 0b4691fe56 Fix compile of the github extension
All of our webpack scripts are modules now
2025-08-13 10:09:04 -07:00
Matt BiernerandGitHub 2c749892ad Merge pull request #260466 from mjbvz/sick-marmoset
Convert esbuild scripts to modules
2025-08-07 21:57:27 -07:00
Matt Bierner e4f9730eae Also update gulp 2025-08-07 20:15:04 -07:00
Matt Bierner bad96b4abb Also update desktop webpack gulp 2025-08-07 19:40:47 -07:00
Matt Bierner ed71020bfc Convert extension webpack scripts to modules 2025-08-07 17:20:22 -07:00
Matt Bierner d865a99c49 Clean up some typings in build
- Adding ts-check in a few more js files
- Switching to use `@types` for a few more packages
- Remove some unused code
2025-08-07 09:38:52 -07:00
Johannes RiekenandGitHub cb0950e9d7 Migrate github extension to ESM (2nd attempt) (#248312)
* Revert "GitHub - revert ESM migration (#247322)"

This reverts commit 2047ab0fff.

* use `"@vscode/extension-telemetry": "^1.0.0"` which doesn't use default export anymore
2025-05-07 15:52:46 +02:00
Ladislau SzomoruandGitHub 2047ab0fff GitHub - revert ESM migration (#247322)
* Revert "fix github extension bundling (#247314)"

This reverts commit 0cffb673f5.

* Revert "migrate github-extension to ESM"

This reverts commit 493874c390.

* Add missing JS file
2025-04-24 19:24:59 +02:00
Johannes 493874c390 migrate github-extension to ESM 2025-04-16 16:04:12 +02:00
Connor PeetandGitHub cccd0a35c6 eng: cherry-pick 1.97.1 fixes (#240409) 2025-02-11 19:47:56 +01:00
Aman KarmaniandGitHub e76c50f20e build: switch build/tsconfig.json to module: nodenext (#238426)
* build/tsconfig: switch to module: nodenext for bun compat

* build: rewrite imports for nodenext compat

* build: re-generate
2025-01-22 20:12:39 +01:00
Tyler James LeonhardtandGitHub 305134296c Adopt the MSAL broker to talk to the OS for Microsoft auth (#233739)
This adopts the `NativeBrokerPlugin` provided by `@azure/msal-node-extensions` to provide the ability to use auth state from the OS, and show native auth dialogs instead of going to the browser.

This has several pieces:
* The adoption of the broker in the microsoft-authentication extension:
  * Adding `NativeBrokerPlugin` to our PCAs
  * Using the proposed handle API to pass the native window handle down to MSAL calls (btw, this API will change in a follow up PR)
  * Adopting an AccountAccess layer to handle:
    * giving the user control of which accounts VS Code uses
    * an eventing layer so that auth state can be updated across multiple windows
* Getting the extension to build properly and only build what it really needs. This required several package.json/webpack hacks:
  * Use a fake keytar since we don't use the feature in `@azure/msal-node-extensions` that uses keytar
  * Use a fake dpapi layer since we don't use the feature in  `@azure/msal-node-extensions` that uses it
  * Ensure the msal runtime `.node` and `.dll` files are included in the bundle
* Get the VS Code build to allow a native node module in an extension: by having a list of native extensions that will be built in the "ci" part of the build - in other words when VS Code is building on the target platform

There are a couple of followups:
* Refactor the `handle` API to handle (heh) Auxiliary Windows https://github.com/microsoft/vscode/issues/233106
* Separate the call to `acquireTokenSilent` and `acquireTokenInteractive` and all the usage of this native node module into a separate process or maybe in Core... we'll see. Something to experiment with after we have something working. NEEDS FOLLOW UP ISSUE

Fixes https://github.com/microsoft/vscode/issues/229431
2024-11-15 20:53:28 +09:00
Tyler James LeonhardtandGitHub d6688b5ba3 Only rewrite sourcemap urls when js (#233626)
This prevents the build from touching any other kind of file.
2024-11-12 00:45:15 +01:00
Alex RossandGitHub e6f2cc2f0a Add an easy way to run performance tests for tree-sitter (#233072)
* Add an easy way to run performance tests for tree-sitter
Part os #210475

* Compile build folder
2024-11-05 15:35:58 +01:00
RoboandGitHub b5a6aa14a8 feat: switch to npm as default package manager (#226927)
* feat: move from yarn to npm

* chore: skip yarn.lock files

* fix: playwright download

* chore: fix compile and hygiene

* chore: bump vsce@2.17.0

Refs https://github.com/microsoft/vscode-vsce/commit/8b49e9dfdf909ad3af2b9ec9c825f5b501f6d75e

* test: update results for bat and sh colorizer tests

* fix: add missing lock files for windows

* fix: switch to legacy-peer-deps

* chore: update markdown-it@14.1.0

Refs https://github.com/markdown-it/markdown-it/commit/737c95a12976357df99652e4b51d831cac4a75aa

esbuild step in extensions-ci-pr was previously using markdown-it
from root which had userland punycode and was able to compile successfully.

* ci: increase pr timeout for windows integration tests

* chore: fix product build

* build: ignore extension dev dependency for rcedit

* build: fix working directory inside container

* build: fix dependency generation

* npm: update dependencies

* ci: use global npmrc

* ci: update cache

* ci: setup global npmrc for private npm auth

* build: fix extension bundling

* chore: sync npm dependencies

* ci: debug env variables for container

* ci: fix win32 cli pipeline

* build: fix npmrc config usage for build/ and remote/ dirs

* fix: windows build

* fix: container builds

* fix: markdown-language-features tests and bundling

```
[03:58:22] Error: Command failed: /Users/demohan/.nvm/versions/node/v20.15.1/bin/node /Users/demohan/github/vscode/extensions/markdown-language-features/esbuild-notebook.js --outputRoot /Users/demohan/github/vscode/.build/extensions/markdown-language-features
✘ [ERROR] Could not resolve "punycode"

    extensions/markdown-language-features/node_modules/markdown-it/lib/index.js:14:27:
      14 │ var punycode     = require('punycode');
         ╵                            ~~~~~~~~~~

  The package "punycode" wasn't found on the file system but is built into node. Are you trying to bundle for node? You can use "platform: 'node'" to do that, which will remove this error.
```

Adds userland package based on https://github.com/markdown-it/markdown-it/commit/beed9aee2c1b44819afc25d485e86a6c699b6ef0

* fix: container builds for distro

* chore: update yarn occurrences

* fixup! chore: bump vsce@2.17.0

Uses the closest version to `main` branch that does not
include https://github.com/microsoft/vscode-vsce/commit/d3cc84cdec99b8e9f24be63d1a2a54abe908f68b
while still having the fix https://github.com/microsoft/vscode-vsce/commit/8b49e9dfdf909ad3af2b9ec9c825f5b501f6d75e

* chore: sync npm dependencies

* chore: sync npm dependencies

* chore: sync npm dependencies

* chore: throw error when yarn is used for installation

* chore: add review feedback

* chore: switch exec => run where needed

* chore: npm sync dependencies

* fix: markdown-language-features bundling

```
✘ [ERROR] Could not resolve "punycode"

    extensions/markdown-language-features/node_modules/markdown-it/lib/index.js:14:27:
      14 │ var punycode     = require('punycode');
         ╵                            ~~~~~~~~~~

  The package "punycode" wasn't found on the file system but is built into node. Are you trying to bundle for node? You can use "platform: 'node'" to do that, which will remove this error.
```

Adds missing userland package based on markdown-it/markdown-it@beed9ae,
can be removed once we update markdown-it >= 14.1.0

* ci: rename no-yarn-lock-changes.yml

* chore: sync npm dependencies

* ci: restore no-yarn-lock-changes.yml

We can disable it in a separate PR to keep the required
checks happy and also need workflow edit perms.

* chore: sync npm dependencies

* ci: rebuild cache

* ci: fix no-package-lock-changes.yml

* chore: bump distro

* chore: rm yarn.lock files

* chore: rm yarn.lock files without dependencies

* chore: add vscode-selfhost-import-aid to postinstall dirs

* chore: bump distro
2024-09-06 22:18:02 +09:00