From 3dbb06652c9a1257287e066e92750b9e986bdcea Mon Sep 17 00:00:00 2001 From: Adam Ratzman Date: Sat, 4 Apr 2026 00:13:30 -0400 Subject: [PATCH 1/4] Use PR-specific version for dogfood VS Code extension For PR builds, set the extension VSIX version to 0.0. so dogfooded extensions are clearly distinguishable from marketplace releases. The version override flows from ci.yml through tests.yml to the vsce package command. Also support ExtensionVersionOverride MSBuild property in Extension.proj for local builds (e.g. dotnet build /p:ExtensionVersionOverride=0.0.99). Fixes #15589 --- .github/workflows/ci.yml | 6 ++++++ .github/workflows/tests.yml | 5 ++++- extension/Extension.proj | 10 +++++++--- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ee3416b5943..608a466e7ca 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -24,6 +24,7 @@ jobs: outputs: skip_workflow: ${{ (steps.check_for_changes.outputs.no_changes == 'true' || steps.check_for_changes.outputs.only_changed == 'true') && 'true' || 'false' }} VERSION_SUFFIX_OVERRIDE: ${{ steps.compute_version_suffix.outputs.VERSION_SUFFIX_OVERRIDE }} + EXTENSION_VERSION_OVERRIDE: ${{ steps.compute_version_suffix.outputs.EXTENSION_VERSION_OVERRIDE }} steps: - name: Checkout code @@ -58,6 +59,10 @@ jobs: Write-Host "Computed VERSION_SUFFIX_OVERRIDE=$VERSION_SUFFIX" "VERSION_SUFFIX_OVERRIDE=$VERSION_SUFFIX" | Out-File -FilePath $Env:GITHUB_OUTPUT -Append -Encoding utf8 + $EXTENSION_VERSION = "0.0.$($Env:PR_NUMBER)" + Write-Host "Computed EXTENSION_VERSION_OVERRIDE=$EXTENSION_VERSION" + "EXTENSION_VERSION_OVERRIDE=$EXTENSION_VERSION" | Out-File -FilePath $Env:GITHUB_OUTPUT -Append -Encoding utf8 + tests: uses: ./.github/workflows/tests.yml name: Tests @@ -65,6 +70,7 @@ jobs: if: ${{ github.repository_owner == 'microsoft' && needs.prepare_for_ci.outputs.skip_workflow != 'true' }} with: versionOverrideArg: ${{ needs.prepare_for_ci.outputs.VERSION_SUFFIX_OVERRIDE }} + extensionVersionOverride: ${{ needs.prepare_for_ci.outputs.EXTENSION_VERSION_OVERRIDE }} # This job is used for branch protection. It fails if any of the dependent jobs failed results: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 406a599bdcc..ef8d0dbcdf0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -7,6 +7,9 @@ on: versionOverrideArg: required: false type: string + extensionVersionOverride: + required: false + type: string jobs: setup_for_tests: @@ -295,7 +298,7 @@ jobs: - name: Run tests run: npm test - name: Package VSIX - run: npm exec @vscode/vsce -- package --pre-release -o out/aspire-extension.vsix + run: npm exec @vscode/vsce -- package --pre-release ${{ inputs.extensionVersionOverride && format('--version {0}', inputs.extensionVersionOverride) || '' }} -o out/aspire-extension.vsix - name: Upload VSIX uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: diff --git a/extension/Extension.proj b/extension/Extension.proj index 2aa1b95558d..6ef048926fd 100644 --- a/extension/Extension.proj +++ b/extension/Extension.proj @@ -20,9 +20,13 @@ + <_EffectiveVersion Condition="'$(ExtensionVersionOverride)' != ''">$(ExtensionVersionOverride) + <_EffectiveVersion Condition="'$(ExtensionVersionOverride)' == ''">$(_ExtractedVersion) <_VscodeOutputDir>$(ArtifactsPackagesDir)vscode - <_VsixPath>$(_VscodeOutputDir)\aspire-vscode-$(_ExtractedVersion).vsix - <_ManifestPath>$(_VscodeOutputDir)\aspire-vscode-$(_ExtractedVersion).manifest + <_VsixPath>$(_VscodeOutputDir)\aspire-vscode-$(_EffectiveVersion).vsix + <_ManifestPath>$(_VscodeOutputDir)\aspire-vscode-$(_EffectiveVersion).manifest + <_VersionArg Condition="'$(ExtensionVersionOverride)' != ''">--version $(ExtensionVersionOverride) + <_VersionArg Condition="'$(ExtensionVersionOverride)' == ''"> @@ -33,7 +37,7 @@ - From 3f46a9e0516c31228b23220ee440d41faef63537 Mon Sep 17 00:00:00 2001 From: Adam Ratzman Date: Sat, 4 Apr 2026 00:19:45 -0400 Subject: [PATCH 2/4] Fix: use positional arg for vsce package version vsce interprets --version as 'print tool version'. The package version must be passed as a positional argument: vsce package . --- .github/workflows/tests.yml | 2 +- extension/Extension.proj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ef8d0dbcdf0..a43deaa14f2 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -298,7 +298,7 @@ jobs: - name: Run tests run: npm test - name: Package VSIX - run: npm exec @vscode/vsce -- package --pre-release ${{ inputs.extensionVersionOverride && format('--version {0}', inputs.extensionVersionOverride) || '' }} -o out/aspire-extension.vsix + run: npm exec @vscode/vsce -- package ${{ inputs.extensionVersionOverride || '' }} --pre-release -o out/aspire-extension.vsix - name: Upload VSIX uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: diff --git a/extension/Extension.proj b/extension/Extension.proj index 6ef048926fd..e0e4cddc569 100644 --- a/extension/Extension.proj +++ b/extension/Extension.proj @@ -25,7 +25,7 @@ <_VscodeOutputDir>$(ArtifactsPackagesDir)vscode <_VsixPath>$(_VscodeOutputDir)\aspire-vscode-$(_EffectiveVersion).vsix <_ManifestPath>$(_VscodeOutputDir)\aspire-vscode-$(_EffectiveVersion).manifest - <_VersionArg Condition="'$(ExtensionVersionOverride)' != ''">--version $(ExtensionVersionOverride) + <_VersionArg Condition="'$(ExtensionVersionOverride)' != ''">$(ExtensionVersionOverride) <_VersionArg Condition="'$(ExtensionVersionOverride)' == ''"> From c0f83a48d51a55440f443d34beca760d57f4e309 Mon Sep 17 00:00:00 2001 From: Adam Ratzman Date: Sat, 4 Apr 2026 00:39:23 -0400 Subject: [PATCH 3/4] Fix: update package.json version instead of passing arg to vsce vsce package does not have a --version flag for setting the package version (--version prints the tool version). The [version] positional arg triggers npm version bump semantics, not an explicit version set. Instead, use 'npm version --no-git-tag-version' in CI and 'node -e' in Extension.proj to update package.json before packaging. --- .github/workflows/tests.yml | 5 ++++- extension/Extension.proj | 11 +++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a43deaa14f2..4f58ed0ae6c 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -297,8 +297,11 @@ jobs: run: npm install - name: Run tests run: npm test + - name: Override extension version for PR builds + if: ${{ inputs.extensionVersionOverride != '' }} + run: npm version "${{ inputs.extensionVersionOverride }}" --no-git-tag-version - name: Package VSIX - run: npm exec @vscode/vsce -- package ${{ inputs.extensionVersionOverride || '' }} --pre-release -o out/aspire-extension.vsix + run: npm exec @vscode/vsce -- package --pre-release -o out/aspire-extension.vsix - name: Upload VSIX uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: diff --git a/extension/Extension.proj b/extension/Extension.proj index e0e4cddc569..28a7428ebb5 100644 --- a/extension/Extension.proj +++ b/extension/Extension.proj @@ -25,10 +25,13 @@ <_VscodeOutputDir>$(ArtifactsPackagesDir)vscode <_VsixPath>$(_VscodeOutputDir)\aspire-vscode-$(_EffectiveVersion).vsix <_ManifestPath>$(_VscodeOutputDir)\aspire-vscode-$(_EffectiveVersion).manifest - <_VersionArg Condition="'$(ExtensionVersionOverride)' != ''">$(ExtensionVersionOverride) - <_VersionArg Condition="'$(ExtensionVersionOverride)' == ''"> + + + @@ -37,11 +40,11 @@ - - + @@ -27,8 +28,10 @@ <_ManifestPath>$(_VscodeOutputDir)\aspire-vscode-$(_EffectiveVersion).manifest - - + + @@ -54,6 +57,10 @@ IgnoreStandardErrorWarningFormat="true" WorkingDirectory="$(ExtensionSrcDir)" /> + + +