update laptop config

This commit is contained in:
greyweather committed 2026-08-14 21:33:40 +01:00
1 parent 733a94f15f
commit efde36f8f3
338 files changed
+45564 -122

No files matched your search

@@ -0,0 +1,70 @@
<#
.SYNOPSIS
This script searches the components folder for DLLs that ship more than once.
Such DLLs are candidates for de-duplication as documented at:
https://dev.azure.com/devdiv/DevDiv/_git/vs-green?path=/server/src/SharedDependencies/README.md
.PARAMETER SkipInit
Skip running the init script as a prerequisite to populate the components folder.
#>
[CmdletBinding()]
Param(
[switch]$SkipInit
)
if (!$SkipInit) {
& $PSScriptRoot/../init.ps1
}
$AllDlls = Get-ChildItem $PSScriptRoot/../components/*.dll -Recurse
# Build up a hashtable of all DLL paths, keyed by their name.
$DllsByName = @{}
foreach ($path in $AllDlls) {
# Skip components that are not included in the vsix
if ($path -match 'dependency-extensions|marketplace-extensions') {
continue
}
$dllName = Split-Path $path -Leaf
# If this is a satellite assembly, include its culture sub-path in the name.
if ($dllName.EndsWith('.resources.dll', [StringComparison]::OrdinalIgnoreCase)) {
$directory = Split-Path $path
$culture = Split-Path $directory -Leaf
$dllName = "$culture$dllName"
}
$set = $DllsByName[$dllName]
if (!$set) {
$set = @()
}
$set += $path
$DllsByName[$dllName] = $set
}
$extraDllCount = 0
$uniqueRedundantDllNames = 0
foreach ($entry in $DllsByName.GetEnumerator()) {
if ($entry.Value.Length -gt 1) {
$extraDllCount += $entry.Value.Length - 1
$uniqueRedundantDllNames += 1
Write-Output $entry.Key
foreach ($path in $entry.Value) {
Write-Output " $(Split-Path $path)"
}
}
}
if ($extraDllCount -gt 0) {
Write-Output "A total of $extraDllCount redundant DLLs have been found across $uniqueRedundantDllNames unique names."
} else {
Write-Output "No redundant DLLs found."
}
# Return an exit code indicating how many duplicate DLLs there are.
# A non-zero result may therefore cause the build pipeline to fail,
# ensuring we avoid regressions in this area.
# TODO: Uncomment the next line when we're clean to lock in the improvements.
#exit $extraDllCount
@@ -0,0 +1,97 @@
<#
.SYNOPSIS
Set environment variables in the environment.
Azure Pipeline and CMD environments are considered.
.PARAMETER Variables
A hashtable of variables to be set.
.PARAMETER PrependPath
A set of paths to prepend to the PATH environment variable.
.OUTPUTS
A boolean indicating whether the environment variables can be expected to propagate to the caller's environment.
.DESCRIPTION
The CmdEnvScriptPath environment variable may be optionally set to a path to a cmd shell script to be created (or appended to if it already exists) that will set the environment variables in cmd.exe that are set within the PowerShell environment.
This is used by init.cmd in order to reapply any new environment variables to the parent cmd.exe process that were set in the powershell child process.
#>
[CmdletBinding(SupportsShouldProcess=$true)]
Param(
[Parameter(Mandatory=$true, Position=1)]
$Variables,
[string[]]$PrependPath
)
if ($Variables.Count -eq 0) {
return $true
}
$cmdInstructions = !$env:TF_BUILD -and !$env:GITHUB_ACTIONS -and !$env:CmdEnvScriptPath -and ($env:PS1UnderCmd -eq '1')
if ($cmdInstructions) {
Write-Warning "Environment variables have been set that will be lost because you're running under cmd.exe"
Write-Host "Environment variables that must be set manually:" -ForegroundColor Blue
} else {
Write-Host "Environment variables set:" -ForegroundColor Blue
Write-Host ($Variables | Out-String)
if ($PrependPath) {
Write-Host "Paths prepended to PATH: $PrependPath"
}
}
if ($env:TF_BUILD) {
Write-Host "Azure Pipelines detected. Logging commands will be used to propagate environment variables and prepend path."
}
if ($env:GITHUB_ACTIONS) {
Write-Host "GitHub Actions detected. Logging commands will be used to propagate environment variables and prepend path."
}
$CmdEnvScript = ''
$Variables.GetEnumerator() |% {
Set-Item -Path env:$($_.Key) -Value $_.Value
# If we're running in a cloud CI, set these environment variables so they propagate.
if ($env:TF_BUILD) {
Write-Host "##vso[task.setvariable variable=$($_.Key);]$($_.Value)"
}
if ($env:GITHUB_ACTIONS) {
Add-Content -Path $env:GITHUB_ENV -Value "$($_.Key)=$($_.Value)"
}
if ($cmdInstructions) {
Write-Host "SET $($_.Key)=$($_.Value)"
}
$CmdEnvScript += "SET $($_.Key)=$($_.Value)`r`n"
}
$pathDelimiter = ';'
if ($IsMacOS -or $IsLinux) {
$pathDelimiter = ':'
}
if ($PrependPath) {
$PrependPath |% {
$newPathValue = "$_$pathDelimiter$env:PATH"
Set-Item -Path env:PATH -Value $newPathValue
if ($cmdInstructions) {
Write-Host "SET PATH=$newPathValue"
}
if ($env:TF_BUILD) {
Write-Host "##vso[task.prependpath]$_"
}
if ($env:GITHUB_ACTIONS) {
Add-Content -Path $env:GITHUB_PATH -Value $_
}
$CmdEnvScript += "SET PATH=$_$pathDelimiter%PATH%"
}
}
if ($env:CmdEnvScriptPath) {
if (Test-Path $env:CmdEnvScriptPath) {
$CmdEnvScript = (Get-Content -Path $env:CmdEnvScriptPath) + $CmdEnvScript
}
Set-Content -Path $env:CmdEnvScriptPath -Value $CmdEnvScript
}
return !$cmdInstructions
@@ -0,0 +1,53 @@
/**
* Builds the NativeAOT Node.js addon for local development.
* Publishes the project and renames the output from .dll to .node
* so that require() loads it as a native Node.js addon.
*
* Called automatically via the "build-native" npm script before webpack.
*/
const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
const os = require('os');
if (os.platform() !== 'win32') {
console.log('build-native: skipping (native addon is Windows-only)');
process.exit(0);
}
const rid = process.arch === 'arm64' ? 'win-arm64' : 'win-x64';
const archDir = process.arch === 'arm64' ? 'win32-arm64' : 'win32-x64';
const outDir = path.join(__dirname, '..', 'dist', 'native', archDir);
const projectDir = path.join(__dirname, '..', 'src', 'native', 'NodeAddon');
const nodeFile = path.join(outDir, 'NodeAddon.node');
// Check if rebuild is needed by comparing source timestamps to output
if (fs.existsSync(nodeFile)) {
const outputTime = fs.statSync(nodeFile).mtimeMs;
const sourceDirs = [projectDir, path.join(__dirname, '..', 'src', 'native', 'shared')];
let newest = 0;
for (const dir of sourceDirs) {
if (!fs.existsSync(dir)) continue;
for (const f of fs.readdirSync(dir)) {
if (f.endsWith('.cs') || f.endsWith('.csproj') || f.endsWith('.props')) {
try { newest = Math.max(newest, fs.statSync(path.join(dir, f)).mtimeMs); } catch {}
}
}
}
if (newest < outputTime) {
console.log('build-native: NodeAddon is up to date');
process.exit(0);
}
}
console.log(`build-native: publishing NodeAddon (${rid})...`);
execSync(`dotnet publish "${projectDir}" -c Release -r ${rid} -o "${outDir}" --nologo`, { stdio: 'inherit' });
// Rename .dll to .node
const dll = path.join(outDir, 'NodeAddon.dll');
if (fs.existsSync(dll)) {
if (fs.existsSync(nodeFile)) fs.unlinkSync(nodeFile);
fs.renameSync(dll, nodeFile);
}
console.log(`build-native: done → ${outDir}`);
@@ -0,0 +1,121 @@
#!/usr/bin/env node
const fs = require('fs')
/**
* Merges prerelease-specific settings into package.json for prerelease builds.
* The checked-in package.json contains the release defaults, and this script only
* applies overrides for prerelease builds to enable preview functionality.
*
* Supported branches:
* - refs/heads/release: Uses original package.json release defaults (no merge)
* - PRs targeting refs/heads/release: Uses original package.json release defaults (no merge)
* - All other branches: Uses settings.prerelease.json overrides
*
* Usage: node merge-settings.js <branch-name> [pr-target-branch]
*
* Examples:
* - node merge-settings.js refs/heads/main
* - node merge-settings.js refs/heads/feature/my-feature refs/heads/release
*/
function mergeSettings(branchName, prTargetBranch) {
console.log(`Merging settings for branch: ${branchName}`)
if (prTargetBranch) {
console.log(`PR target branch: ${prTargetBranch}`)
}
// Read the original package.json
const packageJsonPath = 'package.json'
if (!fs.existsSync(packageJsonPath)) {
console.error('package.json not found')
process.exit(1)
}
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))
// Determine if this should be treated as a release build
const isReleaseBuild = branchName === 'refs/heads/release' || prTargetBranch === 'refs/heads/release'
// Only apply overrides for prerelease builds (everything except release branch or PRs into release)
let settingsFile
if (!isReleaseBuild) {
settingsFile = 'settings.prerelease.json'
} else {
console.log(`Branch ${branchName}${prTargetBranch ? ` (PR target: ${prTargetBranch})` : ''} uses release defaults from package.json`)
return // No merge needed - use package.json release defaults
}
console.log(`Using settings file: ${settingsFile}`)
// Read the settings file
if (!fs.existsSync(settingsFile)) {
console.warn(`Settings file ${settingsFile} not found, skipping merge`)
return
}
const branchSettings = JSON.parse(fs.readFileSync(settingsFile, 'utf8'))
// Deep merge the settings
mergeDeep(packageJson, branchSettings)
// Write the merged package.json back
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, '\t'), 'utf8')
console.log(`Successfully merged settings from ${settingsFile} into package.json`)
}
/**
* Deep merge utility function that handles arrays properly for VS Code package.json structure
*/
function mergeDeep(target, source) {
for (const key in source) {
// Delete a setting in pre-release
if (source[key] === '__delete') {
console.log(`Deleting property: ${key}`)
delete target[key]
continue
}
if (source[key] && typeof source[key] === 'object') {
if (Array.isArray(source[key])) {
// For arrays like configuration[], we need to merge elements by index
if (!Array.isArray(target[key])) {
target[key] = []
}
source[key].forEach((sourceItem, index) => {
if (!target[key][index]) {
target[key][index] = {}
}
// Only merge if sourceItem is a object, otherwise replace (e.g. tags[])
if (sourceItem && typeof sourceItem === 'object' && !Array.isArray(sourceItem)) {
if (!target[key][index] || typeof target[key][index] !== 'object' || Array.isArray(target[key][index])) {
target[key][index] = {}
}
mergeDeep(target[key][index], sourceItem)
} else {
target[key][index] = sourceItem
}
})
} else {
// For objects, do regular deep merge
if (!target[key]) {
target[key] = {}
}
mergeDeep(target[key], source[key])
}
} else {
target[key] = source[key]
}
}
}
// Get branch name and optional PR target branch from command line arguments
const branchName = process.argv[2]
const prTargetBranch = process.argv[3] // Optional: PR target branch
if (!branchName) {
console.error('Usage: node merge-settings.js <branch-name> [pr-target-branch]')
process.exit(1)
}
mergeSettings(branchName, prTargetBranch)
@@ -0,0 +1,5 @@
<Project>
<PropertyGroup>
<RepoRoot>$(MSBuildThisFileDirectory)../../../</RepoRoot>
</PropertyGroup>
</Project>
@@ -0,0 +1,16 @@
#------------------------------------------------------------------------------
# This file contains command-line options that MSBuild will process as part of
# every build, unless the "/noautoresponse" switch is specified.
#
# MSBuild processes the options in this file first, before processing the
# options on the command line. As a result, options on the command line can
# override the options in this file. However, depending on the options being
# set, the overriding can also result in conflicts.
#
# NOTE: The "/noautoresponse" switch cannot be specified in this file, nor in
# any response file that is referenced by this file.
#------------------------------------------------------------------------------
/nr:false
/m
/verbosity:minimal
/clp:Summary;ForceNoAlign
@@ -0,0 +1,10 @@
<Project>
<!-- https://learn.microsoft.com/nuget/consume-packages/central-package-management -->
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
</PropertyGroup>
<ItemGroup>
<GlobalPackageReference Include="Microsoft.VisualStudioEng.MicroBuild.Core" Version="1.0.0" />
</ItemGroup>
</Project>
@@ -0,0 +1,63 @@
33> 22.22.42.35 Adding D:\a\_work\1\s\extension\dist\491.extension.js cert (200)
33> 22.22.42.35 Adding D:\a\_work\1\s\extension\dist\522.extension.js cert (200)
33> 22.22.42.35 Adding D:\a\_work\1\s\extension\dist\754.extension.js cert (200)
33> 22.22.42.35 Adding D:\a\_work\1\s\extension\dist\extension.js cert (200)
33> 22.22.42.35 Submitting files to be signed with certs (200),(LogID: 44fc0b0e).
33> 22.22.42.48 Finished submitting files to be signed. (200),(LogID: 44fc0b0e)
33> 22.22.42.48 All files in (200),(LogID: 44fc0b0e) successfully submitted.
33> 22.22.42.48 Submitted Files :
extension.js f6b5ca54-4ce1-40db-90a2-c0777a8bc012
491.extension.js f65b518f-6b10-4cd7-a5c7-5649fb1253a9
754.extension.js 799eb8ec-5d89-48fb-b3c6-539d8176c1c6
522.extension.js 4764dc83-a1d4-478d-9a84-adab83dbf50c
33> 22.22.42.48 Checking the status for some signed files. (200) (LogID: 998c1133)
33> 22.22.42.51 OperationId: f65b518f-6b10-4cd7-a5c7-5649fb1253a9 - Inprogress
33> 22.22.42.51 OperationId: 799eb8ec-5d89-48fb-b3c6-539d8176c1c6 - Inprogress
33> 22.22.42.51 OperationId: 4764dc83-a1d4-478d-9a84-adab83dbf50c - Inprogress
33> 22.22.42.51 OperationId: f6b5ca54-4ce1-40db-90a2-c0777a8bc012 - Inprogress
33> 22.22.42.51 Waiting 00:00:15 second(s) before retrying status...
33> 22.22.43.06 Checking the status for some signed files. (200) (LogID: 4bc2559e)
33> 22.22.43.09 OperationId: 799eb8ec-5d89-48fb-b3c6-539d8176c1c6 - Inprogress
33> 22.22.43.09 OperationId: f65b518f-6b10-4cd7-a5c7-5649fb1253a9 - Inprogress
33> 22.22.43.09 OperationId: f6b5ca54-4ce1-40db-90a2-c0777a8bc012 - Inprogress
33> 22.22.43.09 OperationId: 4764dc83-a1d4-478d-9a84-adab83dbf50c - Inprogress
33> 22.22.43.09 Waiting 00:00:15 second(s) before retrying status...
33> 22.22.43.24 Checking the status for some signed files. (200) (LogID: 9e9ff44f)
33> 22.22.43.26 OperationId: 799eb8ec-5d89-48fb-b3c6-539d8176c1c6 - Inprogress
33> 22.22.43.26 OperationId: 4764dc83-a1d4-478d-9a84-adab83dbf50c - Inprogress
33> 22.22.43.26 OperationId: f6b5ca54-4ce1-40db-90a2-c0777a8bc012 - Inprogress
33> 22.22.43.26 OperationId: f65b518f-6b10-4cd7-a5c7-5649fb1253a9 - Inprogress
33> 22.22.43.26 Waiting 00:00:15 second(s) before retrying status...
33> 22.22.43.41 Checking the status for some signed files. (200) (LogID: 2fb4de17)
33> 22.22.43.44 OperationId: f65b518f-6b10-4cd7-a5c7-5649fb1253a9 - Inprogress
33> 22.22.43.44 OperationId: 4764dc83-a1d4-478d-9a84-adab83dbf50c - Inprogress
33> 22.22.43.44 OperationId: 799eb8ec-5d89-48fb-b3c6-539d8176c1c6 - Inprogress
33> 22.22.43.44 OperationId: f6b5ca54-4ce1-40db-90a2-c0777a8bc012 - Inprogress
33> 22.22.43.44 Waiting 00:00:15 second(s) before retrying status...
33> 22.22.43.59 Checking the status for some signed files. (200) (LogID: ea4baafe)
33> 22.22.44.02 OperationId: f65b518f-6b10-4cd7-a5c7-5649fb1253a9 - Inprogress
33> 22.22.44.02 OperationId: 4764dc83-a1d4-478d-9a84-adab83dbf50c - Inprogress
33> 22.22.44.02 OperationId: 799eb8ec-5d89-48fb-b3c6-539d8176c1c6 - Inprogress
33> 22.22.44.02 Adding file D:\a\_work\1\s\extension\dist\extension.js for downloading...
37> 22.22.44.02 Downloading file D:\a\_work\1\s\extension\dist\extension.js...
37> 22.22.44.03 Successfully downloaded file D:\a\_work\1\s\extension\dist\extension.js from ESRP.
33> 22.22.44.06 Waiting 00:00:15 second(s) before retrying status...
33> 22.22.44.21 Checking the status for some signed files. (200) (LogID: 7a339d8b)
33> 22.22.44.24 OperationId: f65b518f-6b10-4cd7-a5c7-5649fb1253a9 - Inprogress
33> 22.22.44.24 OperationId: 4764dc83-a1d4-478d-9a84-adab83dbf50c - Inprogress
33> 22.22.44.24 Adding file D:\a\_work\1\s\extension\dist\754.extension.js for downloading...
39> 22.22.44.24 Downloading file D:\a\_work\1\s\extension\dist\754.extension.js...
39> 22.22.44.24 Successfully downloaded file D:\a\_work\1\s\extension\dist\754.extension.js from ESRP.
33> 22.22.44.27 Waiting 00:00:15 second(s) before retrying status...
33> 22.22.44.42 Checking the status for some signed files. (200) (LogID: 66a94033)
33> 22.22.44.44 OperationId: 4764dc83-a1d4-478d-9a84-adab83dbf50c - Inprogress
33> 22.22.44.44 Adding file D:\a\_work\1\s\extension\dist\491.extension.js for downloading...
41> 22.22.44.44 Downloading file D:\a\_work\1\s\extension\dist\491.extension.js...
41> 22.22.44.45 Successfully downloaded file D:\a\_work\1\s\extension\dist\491.extension.js from ESRP.
33> 22.22.44.46 Waiting 00:00:15 second(s) before retrying status...
33> 22.22.45.01 Checking the status for some signed files. (200) (LogID: 22b844c1)
33> 22.22.45.04 Adding file D:\a\_work\1\s\extension\dist\522.extension.js for downloading...
44> 22.22.45.04 Downloading file D:\a\_work\1\s\extension\dist\522.extension.js...
44> 22.22.45.05 Successfully downloaded file D:\a\_work\1\s\extension\dist\522.extension.js from ESRP.
31> 22.22.45.07 Submitted all the files.
@@ -0,0 +1,39 @@
31> 22.22.46.36 Adding D:\a\_work\1\s\extension\dist\491.extension.js cert (200)
31> 22.22.46.36 Adding D:\a\_work\1\s\extension\dist\522.extension.js cert (200)
31> 22.22.46.36 Adding D:\a\_work\1\s\extension\dist\754.extension.js cert (200)
31> 22.22.46.36 Adding D:\a\_work\1\s\extension\dist\extension.js cert (200)
31> 22.22.46.36 Submitting files to be signed with certs (200),(LogID: 0159ecaa).
31> 22.22.46.40 Finished submitting files to be signed. (200),(LogID: 0159ecaa)
31> 22.22.46.40 All files in (200),(LogID: 0159ecaa) successfully submitted.
31> 22.22.46.40 Submitted Files :
754.extension.js bc9d995c-314b-484b-b1cd-2660903b77f2
491.extension.js 1d4b4ee8-ca33-43d4-b944-44cf60c3d93d
522.extension.js ca3b3d10-629e-496f-b294-f5f576a9e1f2
extension.js 50e95d81-8773-4c77-a012-b1f6ddc46014
31> 22.22.46.40 Checking the status for some signed files. (200) (LogID: 17f2ee9f)
31> 22.22.46.43 OperationId: 1d4b4ee8-ca33-43d4-b944-44cf60c3d93d - Inprogress
31> 22.22.46.43 OperationId: bc9d995c-314b-484b-b1cd-2660903b77f2 - Inprogress
31> 22.22.46.43 OperationId: 50e95d81-8773-4c77-a012-b1f6ddc46014 - Inprogress
31> 22.22.46.43 OperationId: ca3b3d10-629e-496f-b294-f5f576a9e1f2 - Inprogress
31> 22.22.46.43 Waiting 00:00:15 second(s) before retrying status...
31> 22.22.46.58 Checking the status for some signed files. (200) (LogID: 0e106925)
31> 22.22.47.00 OperationId: ca3b3d10-629e-496f-b294-f5f576a9e1f2 - Inprogress
31> 22.22.47.00 Adding file D:\a\_work\1\s\extension\dist\754.extension.js for downloading...
31> 22.22.47.00 Adding file D:\a\_work\1\s\extension\dist\extension.js for downloading...
31> 22.22.47.00 Adding file D:\a\_work\1\s\extension\dist\491.extension.js for downloading...
33> 22.22.47.00 Downloading file D:\a\_work\1\s\extension\dist\754.extension.js...
35> 22.22.47.00 Downloading file D:\a\_work\1\s\extension\dist\491.extension.js...
34> 22.22.47.00 Downloading file D:\a\_work\1\s\extension\dist\extension.js...
35> 22.22.47.01 Successfully downloaded file D:\a\_work\1\s\extension\dist\491.extension.js from ESRP.
33> 22.22.47.01 Successfully downloaded file D:\a\_work\1\s\extension\dist\754.extension.js from ESRP.
34> 22.22.47.01 Successfully downloaded file D:\a\_work\1\s\extension\dist\extension.js from ESRP.
31> 22.22.47.02 Waiting 00:00:15 second(s) before retrying status...
31> 22.22.47.17 Checking the status for some signed files. (200) (LogID: 9b354416)
31> 22.22.47.20 OperationId: ca3b3d10-629e-496f-b294-f5f576a9e1f2 - Inprogress
31> 22.22.47.20 Waiting 00:00:15 second(s) before retrying status...
31> 22.22.47.35 Checking the status for some signed files. (200) (LogID: 2117cd1a)
31> 22.22.47.38 Adding file D:\a\_work\1\s\extension\dist\522.extension.js for downloading...
14> 22.22.47.38 Downloading file D:\a\_work\1\s\extension\dist\522.extension.js...
14> 22.22.47.38 Successfully downloaded file D:\a\_work\1\s\extension\dist\522.extension.js from ESRP.
29> 22.22.47.40 Submitted all the files.
@@ -0,0 +1,37 @@
31> 22.22.48.50 Adding D:\a\_work\1\s\extension\dist\491.extension.js cert (200)
31> 22.22.48.50 Adding D:\a\_work\1\s\extension\dist\522.extension.js cert (200)
31> 22.22.48.50 Adding D:\a\_work\1\s\extension\dist\754.extension.js cert (200)
31> 22.22.48.50 Adding D:\a\_work\1\s\extension\dist\extension.js cert (200)
31> 22.22.48.50 Submitting files to be signed with certs (200),(LogID: 9aa8f2ba).
31> 22.22.48.55 Finished submitting files to be signed. (200),(LogID: 9aa8f2ba)
31> 22.22.48.55 All files in (200),(LogID: 9aa8f2ba) successfully submitted.
31> 22.22.48.55 Submitted Files :
491.extension.js bdefc910-8961-4756-b75f-baf4cc6c68f8
754.extension.js ed606447-e753-40c6-8e4c-5beea3b58929
522.extension.js 36eea8c3-8638-4903-ae98-dfc8e7446fd7
extension.js cb7a31f9-15e8-4a75-bad3-0ce7250fd714
31> 22.22.48.55 Checking the status for some signed files. (200) (LogID: 0ce73431)
31> 22.22.48.58 OperationId: 36eea8c3-8638-4903-ae98-dfc8e7446fd7 - Inprogress
31> 22.22.48.58 OperationId: cb7a31f9-15e8-4a75-bad3-0ce7250fd714 - Inprogress
31> 22.22.48.58 OperationId: bdefc910-8961-4756-b75f-baf4cc6c68f8 - Inprogress
31> 22.22.48.58 OperationId: ed606447-e753-40c6-8e4c-5beea3b58929 - Inprogress
31> 22.22.48.58 Waiting 00:00:15 second(s) before retrying status...
31> 22.22.49.13 Checking the status for some signed files. (200) (LogID: 6fcef6a9)
31> 22.22.49.15 OperationId: cb7a31f9-15e8-4a75-bad3-0ce7250fd714 - Inprogress
31> 22.22.49.15 OperationId: ed606447-e753-40c6-8e4c-5beea3b58929 - Inprogress
31> 22.22.49.15 Adding file D:\a\_work\1\s\extension\dist\491.extension.js for downloading...
31> 22.22.49.15 Adding file D:\a\_work\1\s\extension\dist\522.extension.js for downloading...
33> 22.22.49.15 Downloading file D:\a\_work\1\s\extension\dist\491.extension.js...
34> 22.22.49.15 Downloading file D:\a\_work\1\s\extension\dist\522.extension.js...
34> 22.22.49.16 Successfully downloaded file D:\a\_work\1\s\extension\dist\522.extension.js from ESRP.
33> 22.22.49.16 Successfully downloaded file D:\a\_work\1\s\extension\dist\491.extension.js from ESRP.
31> 22.22.49.18 Waiting 00:00:15 second(s) before retrying status...
31> 22.22.49.33 Checking the status for some signed files. (200) (LogID: 5283e809)
31> 22.22.49.36 Adding file D:\a\_work\1\s\extension\dist\extension.js for downloading...
31> 22.22.49.36 Adding file D:\a\_work\1\s\extension\dist\754.extension.js for downloading...
36> 22.22.49.36 Downloading file D:\a\_work\1\s\extension\dist\extension.js...
34> 22.22.49.36 Downloading file D:\a\_work\1\s\extension\dist\754.extension.js...
34> 22.22.49.37 Successfully downloaded file D:\a\_work\1\s\extension\dist\754.extension.js from ESRP.
36> 22.22.49.37 Successfully downloaded file D:\a\_work\1\s\extension\dist\extension.js from ESRP.
29> 22.22.49.40 Submitted all the files.
@@ -0,0 +1,114 @@
{
"version": 3,
"targets": {
".NETStandard,Version=v2.0": {
"Microsoft.VisualStudioEng.MicroBuild.Core/1.0.0": {
"type": "package",
"build": {
"build/Microsoft.VisualStudioEng.MicroBuild.Core.props": {},
"build/Microsoft.VisualStudioEng.MicroBuild.Core.targets": {}
},
"buildMultiTargeting": {
"buildCrossTargeting/Microsoft.VisualStudioEng.MicroBuild.Core.props": {},
"buildCrossTargeting/Microsoft.VisualStudioEng.MicroBuild.Core.targets": {}
}
}
}
},
"libraries": {
"Microsoft.VisualStudioEng.MicroBuild.Core/1.0.0": {
"sha512": "CqFQS0NJe9NhkGGv3z5/PtB8iExlDCiIGrx7DbtrmEOdNDJRilzLug3bU2q3tMYL2XVFB9eeOyA3BDZ0/vfx2A==",
"type": "package",
"path": "microsoft.visualstudioeng.microbuild.core/1.0.0",
"files": [
".nupkg.metadata",
".signature.p7s",
"build/MicroBuild.Plugin.props",
"build/Microsoft.VisualStudioEng.MicroBuild.Core.props",
"build/Microsoft.VisualStudioEng.MicroBuild.Core.targets",
"buildCrossTargeting/Microsoft.VisualStudioEng.MicroBuild.Core.props",
"buildCrossTargeting/Microsoft.VisualStudioEng.MicroBuild.Core.targets",
"microsoft.visualstudioeng.microbuild.core.1.0.0.nupkg.sha512",
"microsoft.visualstudioeng.microbuild.core.nuspec"
]
}
},
"projectFileDependencyGroups": {
".NETStandard,Version=v2.0": [
"Microsoft.VisualStudioEng.MicroBuild.Core >= 1.0.0"
]
},
"packageFolders": {
"D:\\a\\_work\\_temp\\.nuget\\packages\\": {},
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}
},
"project": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "D:\\a\\_work\\1\\s\\extension\\tools\\msbuild\\signJs\\signJs.proj",
"projectName": "signJs",
"projectPath": "D:\\a\\_work\\1\\s\\extension\\tools\\msbuild\\signJs\\signJs.proj",
"packagesPath": "D:\\a\\_work\\_temp\\.nuget\\packages\\",
"outputPath": "D:\\a\\_work\\1\\s\\extension\\tools\\msbuild\\signJs\\obj\\",
"projectStyle": "PackageReference",
"centralPackageVersionsManagementEnabled": true,
"CentralPackageTransitivePinningEnabled": true,
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"D:\\a\\_work\\1\\s\\NuGet.Config",
"C:\\Users\\cloudtest\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"netstandard2.0"
],
"sources": {
"https://pkgs.dev.azure.com/devdiv/DevDiv/_packaging/vs-green/nuget/v3/index.json": {}
},
"frameworks": {
"netstandard2.0": {
"targetAlias": "netstandard2.0",
"projectReferences": {}
}
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "10.0.100"
},
"frameworks": {
"netstandard2.0": {
"targetAlias": "netstandard2.0",
"dependencies": {
"Microsoft.VisualStudioEng.MicroBuild.Core": {
"include": "Runtime, Build, Native, ContentFiles, Analyzers",
"suppressParent": "All",
"target": "Package",
"version": "[1.0.0, )",
"versionCentrallyManaged": true
}
},
"centralPackageVersions": {
"Microsoft.VisualStudioEng.MicroBuild.Core": "1.0.0"
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"runtimeIdentifierGraphPath": "C:\\ToolCache\\dotnet\\sdk\\10.0.108\\RuntimeIdentifierGraph.json"
}
}
}
}
@@ -0,0 +1,10 @@
{
"version": 2,
"dgSpecHash": "hfYchbfrVaY=",
"success": true,
"projectFilePath": "D:\\a\\_work\\1\\s\\extension\\tools\\msbuild\\signJs\\signJs.proj",
"expectedPackageFiles": [
"D:\\a\\_work\\_temp\\.nuget\\packages\\microsoft.visualstudioeng.microbuild.core\\1.0.0\\microsoft.visualstudioeng.microbuild.core.1.0.0.nupkg.sha512"
],
"logs": []
}
@@ -0,0 +1,77 @@
{
"format": 1,
"restore": {
"D:\\a\\_work\\1\\s\\extension\\tools\\msbuild\\signJs\\signJs.proj": {}
},
"projects": {
"D:\\a\\_work\\1\\s\\extension\\tools\\msbuild\\signJs\\signJs.proj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "D:\\a\\_work\\1\\s\\extension\\tools\\msbuild\\signJs\\signJs.proj",
"projectName": "signJs",
"projectPath": "D:\\a\\_work\\1\\s\\extension\\tools\\msbuild\\signJs\\signJs.proj",
"packagesPath": "D:\\a\\_work\\_temp\\.nuget\\packages\\",
"outputPath": "D:\\a\\_work\\1\\s\\extension\\tools\\msbuild\\signJs\\obj\\",
"projectStyle": "PackageReference",
"centralPackageVersionsManagementEnabled": true,
"CentralPackageTransitivePinningEnabled": true,
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"D:\\a\\_work\\1\\s\\NuGet.Config",
"C:\\Users\\cloudtest\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"netstandard2.0"
],
"sources": {
"https://pkgs.dev.azure.com/devdiv/DevDiv/_packaging/vs-green/nuget/v3/index.json": {}
},
"frameworks": {
"netstandard2.0": {
"targetAlias": "netstandard2.0",
"projectReferences": {}
}
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "10.0.100"
},
"frameworks": {
"netstandard2.0": {
"targetAlias": "netstandard2.0",
"dependencies": {
"Microsoft.VisualStudioEng.MicroBuild.Core": {
"include": "Runtime, Build, Native, ContentFiles, Analyzers",
"suppressParent": "All",
"target": "Package",
"version": "[1.0.0, )",
"versionCentrallyManaged": true
}
},
"centralPackageVersions": {
"Microsoft.VisualStudioEng.MicroBuild.Core": "1.0.0"
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"runtimeIdentifierGraphPath": "C:\\ToolCache\\dotnet\\sdk\\10.0.108\\RuntimeIdentifierGraph.json"
}
}
}
}
}
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">D:\a\_work\_temp\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">D:\a\_work\_temp\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">7.0.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="D:\a\_work\_temp\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.visualstudioeng.microbuild.core\1.0.0\build\Microsoft.VisualStudioEng.MicroBuild.Core.props" Condition="Exists('$(NuGetPackageRoot)microsoft.visualstudioeng.microbuild.core\1.0.0\build\Microsoft.VisualStudioEng.MicroBuild.Core.props')" />
</ImportGroup>
</Project>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)microsoft.visualstudioeng.microbuild.core\1.0.0\build\Microsoft.VisualStudioEng.MicroBuild.Core.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.visualstudioeng.microbuild.core\1.0.0\build\Microsoft.VisualStudioEng.MicroBuild.Core.targets')" />
</ImportGroup>
</Project>
@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.Build.NoTargets">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GenerateAssemblyVersionInfo>false</GenerateAssemblyVersionInfo>
<EnableDefaultSignFiles>false</EnableDefaultSignFiles>
<MicroBuild_DoNotStrongNameSign>true</MicroBuild_DoNotStrongNameSign>
<IsPackable>false</IsPackable>
<OutDir>$(RepoRoot)extension\dist\</OutDir>
</PropertyGroup>
<ItemGroup>
<FilesToSign Include="$(OutDir)*.js">
<Authenticode>MicrosoftSHA2</Authenticode>
</FilesToSign>
</ItemGroup>
</Project>
@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.Build.NoTargets">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GenerateAssemblyVersionInfo>false</GenerateAssemblyVersionInfo>
<EnableDefaultSignFiles>false</EnableDefaultSignFiles>
<MicroBuild_DoNotStrongNameSign>true</MicroBuild_DoNotStrongNameSign>
<IsPackable>false</IsPackable>
<OutDir>$(RepoRoot)package\</OutDir>
</PropertyGroup>
<ItemGroup>
<FilesToSign Include="$(OutDir)*.signature.p7s">
<Authenticode>VSCodePublisher</Authenticode>
</FilesToSign>
</ItemGroup>
</Project>
@@ -0,0 +1,69 @@
/**
* Temporary Windows compatibility patch for Fantasticon.
*
* Context: https://github.com/tancredi/fantasticon/issues/470
*
* Fantasticon 4.x builds the SVG discovery pattern internally using `path.join`
* and then passes that pattern into `glob`. On Windows, `path.join` emits
* backslashes, but `glob` does not interpret backslashes as path separators —
* they are treated as escape characters. This causes "No SVGs found" errors
* even though the SVG files exist on disk.
*
* This script patches the installed Fantasticon package on Windows to normalize
* the generated glob path to forward slashes. It is a no-op on macOS/Linux.
*
* Based on: https://github.com/microsoft/vscode-codicons/pull/457
*/
const fs = require('fs');
const path = require('path');
if (process.platform !== 'win32') {
process.exit(0);
}
const targetFiles = [
path.resolve(__dirname, '..', 'node_modules', 'fantasticon', 'dist', 'index.cjs'),
path.resolve(__dirname, '..', 'node_modules', 'fantasticon', 'dist', 'cli', 'index.cjs')
];
const replacementSuffix = ".replace(/\\\\/g, '/')";
const targetSnippet = '`**/*.${ASSETS_EXTENSION}`';
let patchedFileCount = 0;
let alreadyPatchedCount = 0;
for (const targetFile of targetFiles) {
if (!fs.existsSync(targetFile)) {
continue;
}
const originalContent = fs.readFileSync(targetFile, 'utf8');
const patchedContent = originalContent
.split('\n')
.map((line) => {
if (!line.includes('const globPath = ') || !line.includes(targetSnippet) || line.includes(replacementSuffix)) {
return line;
}
return line.replace(';', `${replacementSuffix};`);
})
.join('\n');
if (patchedContent !== originalContent) {
fs.writeFileSync(targetFile, patchedContent, 'utf8');
patchedFileCount += 1;
continue;
}
if (originalContent.includes(replacementSuffix)) {
alreadyPatchedCount += 1;
}
}
if (patchedFileCount === 0 && alreadyPatchedCount === 0) {
console.error('patch-fantasticon: expected globPath pattern not found in installed Fantasticon files.');
process.exit(1);
}
if (patchedFileCount > 0) {
console.log(`patch-fantasticon: patched ${patchedFileCount} file(s) for Windows glob compatibility.`);
}
@@ -0,0 +1,55 @@
// Runs integration tests, with an optional --skip-loc flag to skip the
// localization step (useful in CI where loc has already been built).
//
// Usage:
// node tools/run-integration-tests.js [--skip-loc] [--suite perf|experimental] [-- ...args]
//
// Without --suite, runs the functional test suite by default.
const { execSync } = require('child_process')
const args = process.argv.slice(2)
const skipLoc = args.includes('--skip-loc')
const passthrough = []
let suite = 'functional'
for (let i = 0; i < args.length; i++) {
if (args[i] === '--skip-loc') continue
if (args[i] === '--suite' && i + 1 < args.length) {
suite = args[++i]
continue
}
if (args[i] === '--') {
passthrough.push(...args.slice(i + 1))
break
}
passthrough.push(args[i])
}
const suiteScripts = {
functional: './out/test/integration/runTestFunctionalSuite.js',
perf: './out/test/integration/runTestPerformanceSuite.js',
experimental: './out/test/integration/runExperimentalTestSuite.js',
}
const script = suiteScripts[suite]
if (!script) {
console.error(`Unknown suite: ${suite}. Expected one of: ${Object.keys(suiteScripts).join(', ')}`)
process.exit(1)
}
function run(cmd) {
console.log(`> ${cmd}`)
execSync(cmd, { stdio: 'inherit' })
}
if (!skipLoc) {
// Suppress verbose per-language "Message file not found" warnings during test runs.
// These are expected when translation files haven't been produced yet.
process.env.SUPPRESS_LOC_WARNINGS = '1'
run('yarn run localize')
}
const extra = passthrough.length > 0 ? ' ' + passthrough.join(' ') : ''
run(`node ${script}${extra}`)
@@ -0,0 +1,20 @@
// No-op stub for ttf2woff2.
// The extension only generates WOFF fonts (not WOFF2), so the native
// ttf2woff2 module is never used. This stub replaces the real package
// to avoid requiring node-gyp, Python, and C++ build tools.
//
// If WOFF2 support is ever needed, remove the "ttf2woff2" resolution
// override from the root package.json.
const { Transform } = require('stream');
module.exports = function ttf2woff2(opts) {
return new Transform({
transform(chunk, encoding, callback) {
callback(new Error(
'ttf2woff2 is stubbed out. The extension only generates WOFF fonts. ' +
'If you need WOFF2, remove the ttf2woff2 resolution override from package.json.'
));
}
});
};
@@ -0,0 +1,6 @@
{
"name": "ttf2woff2",
"version": "8.0.1",
"description": "No-op stub. The extension only generates WOFF (not WOFF2) fonts, so this native module is unnecessary. This stub prevents node-gyp/Python/C++ from being required during yarn install.",
"main": "index.js"
}