Skip to content

SLVS-3097 Download the E2E VSIX from repox - #6872

Draft
sophio-japharidze-sonarsource wants to merge 1 commit into
codex/slvs-3097-vsix-smoke-spikefrom
codex/slvs-3097-e2e-repox-download
Draft

sophio-japharidze-sonarsource wants to merge 1 commit into
codex/slvs-3097-vsix-smoke-spikefrom
codex/slvs-3097-e2e-repox-download

Conversation

@sophio-japharidze-sonarsource

@sophio-japharidze-sonarsource sophio-japharidze-sonarsource commented Nov 12, 2026 •

Copy link
Copy Markdown
Member

Downloads the E2E test's VSIX from repox instead of the GitHub binaries artifact, as other SonarSource repositories do. Stacked on #6854; it will retarget to master when #6854 merges.

Why

The Build job already publishes its signed binaries to repox (Publish to Repox) before the E2E job starts. Downloading the same file from the GitHub artifact is slow and variable on the WarpBuild runners:

Source Same 155 MB VSIX
GitHub binaries artifact 49 s (comparison run) to 6m26s (an earlier #6854 run)
repox 4 s

In the comparison run (43255648766), both downloads ran in the same job and produced byte-identical files (SHA-256 58B6B2AB…6E795F11). The test passed on the repox copy.

Changes

  • build.yml: the Prepare Build step exposes PROJECT_VERSION as a job output, which is passed to the E2E workflow.
  • extension-e2e.yml: downloads SonarLint.VSIX-<version>-2022.vsix from sonarsource-public-qa with the private-reader token the job already reads for NuGet. The version includes the build number, so this is the run's own signed VSIX. The actions: read permission is no longer needed and is removed.
  • tests/e2e/README.md: describes the new source.

The connected-mode job in #6861 will get the same change when it is restacked on this.

🤖 Generated with Claude Code

Comment on lines +43 to +57
- name: Download this build's signed VSIX from repox
shell: powershell
env:
PROJECT_VERSION: ${{ inputs.project-version }}
ARTIFACTORY_URL: ${{ fromJSON(steps.secrets.outputs.vault).ARTIFACTORY_URL }}
ARTIFACTORY_USER: ${{ fromJSON(steps.secrets.outputs.vault).ARTIFACTORY_USER }}
ARTIFACTORY_ACCESS_TOKEN: ${{ fromJSON(steps.secrets.outputs.vault).ARTIFACTORY_ACCESS_TOKEN }}
run: |
# Windows PowerShell's progress bar slows large downloads down considerably.
$ProgressPreference = 'SilentlyContinue'
if ($env:PROJECT_VERSION -notmatch '^\d+\.\d+\.\d+\.\d+$') { throw "Unexpected project version '$env:PROJECT_VERSION'." }
$name = "SonarLint.VSIX-$env:PROJECT_VERSION-2022.vsix"
$url = "$($env:ARTIFACTORY_URL.TrimEnd('/'))/sonarsource-public-qa/org/sonarsource/sonarlint/visualstudio/sonarlint-visualstudio/$env:PROJECT_VERSION/$name"
$directory = New-Item -ItemType Directory -Force -Path (Join-Path $env:RUNNER_TEMP 'extension-e2e-package')
$authorization = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("${env:ARTIFACTORY_USER}:${env:ARTIFACTORY_ACCESS_TOKEN}"))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Bug: VSIX moved out of sonarsource-public-qa on master before E2E downloads

On a master push, the E2E job is required to run (the if at build.yml:31 is true). It has needs: build, so it starts only after the whole Build job has finished, and that includes Promote Build (build.yml:268-278). That step runs jf rt bpr --status "it-passed" ... "sonarsource-public-builds" without --copy. JFrog's build-promote moves artifacts by default, so by the time the E2E job runs, SonarLint.VSIX-<version>-2022.vsix is no longer under sonarsource-public-qa/.... The hard-coded repox URL at extension-e2e.yml:55 then returns 404, Invoke-WebRequest throws, and E2E fails on every master build.

On PR builds there is no promotion, so the timing runs will look fine and won't show this. That matters because the stated follow-up is to drop the artifact step and keep only repox. Fix: choose the repository from the ref (sonarsource-public-builds when the build was promoted), use a path that resolves either way (e.g. a virtual repo that includes both), or download through the Artifactory build-info API instead of a fixed repository path.

Pass the repository the artifacts end up in after the Build job, and use it in the download URL.:

# build.yml, extension-e2e job
    with:
      project-version: ${{ needs.build.outputs.project-version }}
      repox-repository: ${{ (github.ref_name == 'master' || startsWith(github.ref_name, 'branch-')) && 'sonarsource-public-builds' || 'sonarsource-public-qa' }}
# extension-e2e.yml URL
$url = "$($env:ARTIFACTORY_URL.TrimEnd('/'))/$env:REPOX_REPOSITORY/org/sonarsource/sonarlint/visualstudio/sonarlint-visualstudio/$env:PROJECT_VERSION/$name"
  • Apply fix

Check the box to apply the fix or reply for a change | Was this helpful? React with 👍 / 👎

The build already publishes its signed binaries to repox before the E2E job
runs. Download the VSIX from there, as other repositories do, instead of the
GitHub binaries artifact: on the WarpBuild runners the artifact download took
between 49 s and 6.5 min, against 4 s from repox for the same file.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sophio-japharidze-sonarsource
sophio-japharidze-sonarsource force-pushed the codex/slvs-3097-e2e-repox-download branch from cf6906c to c264491 Compare November 12, 2026 16:25
@sophio-japharidze-sonarsource sophio-japharidze-sonarsource changed the title [DO NOT MERGE] Compare E2E VSIX download times: repox vs GitHub artifact SLVS-3097 Download the E2E VSIX from repox Nov 12, 2026
@sonarqubecloud

Copy link
Copy Markdown

@gitar-bot

gitar-bot Bot commented Nov 12, 2026

Copy link
Copy Markdown
Code Review ⚠️ Changes requested 🟡 Medium risk 0 closed / 1 findings

Switching E2E installation to a version-derived repox download could fail or test a different VSIX if publication or coordinate resolution is wrong.

Switches the E2E VSIX download from the GitHub binaries artifact to repox, with the version passed in from the build job. Changes requested: on master the VSIX is moved out of sonarsource-public-qa by the Promote Build step before the E2E job runs, so the hard-coded repox URL in .github/workflows/extension-e2e.yml would return 404 and fail E2E on every master build. Choose the repository based on the ref, use a path that resolves either way, or download via the Artifactory build-info API.

⚠️ Bug: VSIX moved out of sonarsource-public-qa on master before E2E downloads

📄 .github/workflows/extension-e2e.yml:43-57 📄 .github/workflows/build.yml:29-37 📄 .github/workflows/build.yml:268-278

On a master push, the E2E job is required to run (the if at build.yml:31 is true). It has needs: build, so it starts only after the whole Build job has finished, and that includes Promote Build (build.yml:268-278). That step runs jf rt bpr --status "it-passed" ... "sonarsource-public-builds" without --copy. JFrog's build-promote moves artifacts by default, so by the time the E2E job runs, SonarLint.VSIX-<version>-2022.vsix is no longer under sonarsource-public-qa/.... The hard-coded repox URL at extension-e2e.yml:55 then returns 404, Invoke-WebRequest throws, and E2E fails on every master build.

On PR builds there is no promotion, so the timing runs will look fine and won't show this. That matters because the stated follow-up is to drop the artifact step and keep only repox. Fix: choose the repository from the ref (sonarsource-public-builds when the build was promoted), use a path that resolves either way (e.g. a virtual repo that includes both), or download through the Artifactory build-info API instead of a fixed repository path.

Pass the repository the artifacts end up in after the Build job, and use it in the download URL.
# build.yml, extension-e2e job
    with:
      project-version: ${{ needs.build.outputs.project-version }}
      repox-repository: ${{ (github.ref_name == 'master' || startsWith(github.ref_name, 'branch-')) && 'sonarsource-public-builds' || 'sonarsource-public-qa' }}
# extension-e2e.yml URL
$url = "$($env:ARTIFACTORY_URL.TrimEnd('/'))/$env:REPOX_REPOSITORY/org/sonarsource/sonarlint/visualstudio/sonarlint-visualstudio/$env:PROJECT_VERSION/$name"
🤖 Prompt for agents
Code Review: Switches the E2E VSIX download from the GitHub `binaries` artifact to repox, with the version passed in from the build job. Changes requested: on master the VSIX is moved out of `sonarsource-public-qa` by the Promote Build step before the E2E job runs, so the hard-coded repox URL in `.github/workflows/extension-e2e.yml` would return 404 and fail E2E on every master build. Choose the repository based on the ref, use a path that resolves either way, or download via the Artifactory build-info API.

1. ⚠️ Bug: VSIX moved out of sonarsource-public-qa on master before E2E downloads
   Files: .github/workflows/extension-e2e.yml:43-57, .github/workflows/build.yml:29-37, .github/workflows/build.yml:268-278

   On a master push, the E2E job is required to run (the `if` at build.yml:31 is true). It has `needs: build`, so it starts only after the whole Build job has finished, and that includes `Promote Build` (build.yml:268-278). That step runs `jf rt bpr --status "it-passed" ... "sonarsource-public-builds"` without `--copy`. JFrog's build-promote moves artifacts by default, so by the time the E2E job runs, `SonarLint.VSIX-<version>-2022.vsix` is no longer under `sonarsource-public-qa/...`. The hard-coded repox URL at extension-e2e.yml:55 then returns 404, `Invoke-WebRequest` throws, and E2E fails on every master build.
   
   On PR builds there is no promotion, so the timing runs will look fine and won't show this. That matters because the stated follow-up is to drop the artifact step and keep only repox. Fix: choose the repository from the ref (`sonarsource-public-builds` when the build was promoted), use a path that resolves either way (e.g. a virtual repo that includes both), or download through the Artifactory build-info API instead of a fixed repository path.

   Fix (Pass the repository the artifacts end up in after the Build job, and use it in the download URL.):
   # build.yml, extension-e2e job
       with:
         project-version: ${{ needs.build.outputs.project-version }}
         repox-repository: ${{ (github.ref_name == 'master' || startsWith(github.ref_name, 'branch-')) && 'sonarsource-public-builds' || 'sonarsource-public-qa' }}
   # extension-e2e.yml URL
   $url = "$($env:ARTIFACTORY_URL.TrimEnd('/'))/$env:REPOX_REPOSITORY/org/sonarsource/sonarlint/visualstudio/sonarlint-visualstudio/$env:PROJECT_VERSION/$name"

Verification Rules 3/3 met Knowledge ✅ 1

Functional validation No results

Rules 3 passed 1 not applicable

✅ Approved GitHub Actions runners
✅ Internal artifact registries
✅ Repository license compliance

Knowledge ✅ 1 expectation met

Expectation met Promoted Visual Studio E2E runner expectation met

Auto-approval Not enabled

Set up

For more verification details, comment gitar display:verbose.

Options

Auto-apply is off → Gitar will not commit updates to this branch.
Display: compact → Showing compact verification results.
Unblock → Override a blocking verdict and allow merging.

Comment with these commands to change the behavior for this request:

Auto-apply Compact Unblock
gitar auto-apply:on         
gitar display:verbose         
gitar unblock         

Was this helpful? React with 👍 / 👎 | Gitar

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant