Skip to content

build(deps): bump react-redux from 9.2.0 to 9.3.0 #86

build(deps): bump react-redux from 9.2.0 to 9.3.0

build(deps): bump react-redux from 9.2.0 to 9.3.0 #86

Workflow file for this run

name: E2E AutoTest
on:
pull_request:
branches:
- main
schedule:
# Every weekday (Mon–Fri) at 13:00 Shanghai time (05:00 UTC)
- cron: '0 5 * * 1-5'
workflow_dispatch:
inputs:
test_plan:
description: "Test plan to run (leave empty for all)"
required: false
default: ""
type: string
vsix_urls:
description: "VSIX URLs or GitHub release tag URLs, comma-separated (e.g. https://github.com/redhat-developer/vscode-java/releases/tag/v1.54.0,https://host/vscode-java-debug-0.58.0.vsix). Release tag URLs auto-resolve to the platform-specific VSIX for the runner OS."
required: false
default: ""
type: string
pre_release:
description: "Install pre-release versions of marketplace extensions"
required: false
default: true
type: boolean
permissions:
contents: read
jobs:
# ── Job 1a: Build vscode-java-pack VSIX from the PR branch ───────
build-pack:
if: ${{ github.event_name == 'pull_request' }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'
cache: npm
- name: Install dependencies
run: npm ci
- name: Build extension
run: npm run build
- name: Package PR VSIX
run: npx @vscode/vsce@latest package -o vscode-java-pack-pr.vsix
- name: Upload PR VSIX
uses: actions/upload-artifact@v4
with:
name: pr-vsix
path: vscode-java-pack-pr.vsix
retention-days: 1
# ── Job 1b: Discover test plans ──────────────────────────
discover:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.scan.outputs.matrix }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Resolve test plan matrix
id: scan
shell: bash
run: |
requested="${{ inputs.test_plan }}"
if [ -n "$requested" ]; then
# Strip optional .yaml suffix and emit a single-entry matrix
plan="${requested%.yaml}"
matrix=$(printf '%s' "$plan" | jq -R . | jq -sc .)
else
matrix=$(ls test-plans/*.yaml | xargs -I{} basename {} .yaml | grep -v java-fresh-import | jq -R . | jq -sc .)
fi
echo "matrix=$matrix" >> "$GITHUB_OUTPUT"
echo "Found plans: $matrix"
# ── Job 2: Run each test plan in parallel ───────────────
e2e-test:
needs: [discover, build-pack]
# build-pack is skipped on schedule/workflow_dispatch — only require it on PRs
if: ${{ always() && needs.discover.result == 'success' && (github.event_name != 'pull_request' || needs.build-pack.result == 'success') }}
runs-on: ${{ matrix.os }}
timeout-minutes: 30
strategy:
fail-fast: false
matrix:
os: [windows-latest, ubuntu-latest, macos-latest]
plan: ${{ fromJson(needs.discover.outputs.matrix) }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Clone vscode-java (test projects)
run: git clone --depth 1 https://github.com/redhat-developer/vscode-java.git ../vscode-java
- name: Clone eclipse.jdt.ls (Gradle test projects)
run: git clone --depth 1 https://github.com/eclipse-jdtls/eclipse.jdt.ls.git ../eclipse.jdt.ls
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Setup Java 25 (for java25 test plans)
if: contains(matrix.plan, 'java25')
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 25-ea
- name: Configure JDK 25 path for runner OS
if: contains(matrix.plan, 'java25')
shell: pwsh
run: |
$planFile = "test-plans/${{ matrix.plan }}.yaml"
if ($IsWindows) {
$target = "C:\Program Files\Java\jdk-25"
New-Item -ItemType Junction -Path $target -Target $env:JAVA_HOME -Force | Out-Null
Write-Host "Created junction: $target -> $env:JAVA_HOME"
} else {
# Linux and macOS: symlink JAVA_HOME to a known location and
# rewrite the Windows-style java.jdt.ls.java.home in the plan
# so the language server resolves JDK 25 on this runner.
$target = "/opt/jdk-25"
sudo mkdir -p /opt
sudo ln -sfn $env:JAVA_HOME $target
Write-Host "Created symlink: $target -> $env:JAVA_HOME"
(Get-Content $planFile -Raw) -replace 'C:\\\\Program Files\\\\Java\\\\jdk-25', $target | Set-Content $planFile
Write-Host "Patched $planFile java.jdt.ls.java.home -> $target"
}
- name: Setup Java 21
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 21
- name: Install autotest CLI
run: npm install -g @vscjava/vscode-autotest
- name: Setup virtual display (Linux)
if: runner.os == 'Linux'
shell: bash
run: |
sudo apt-get update
sudo apt-get install -y xvfb
Xvfb :99 -screen 0 1920x1080x24 &
echo "DISPLAY=:99" >> "$GITHUB_ENV"
# Give Xvfb a moment to start before the autotest CLI launches VS Code.
sleep 2
- name: Download PR VSIX (vscode-java-pack from branch)
if: ${{ github.event_name == 'pull_request' }}
uses: actions/download-artifact@v4
with:
name: pr-vsix
path: vsix
- name: Download VSIX files
if: ${{ github.event_name == 'workflow_dispatch' && inputs.vsix_urls != '' }}
shell: pwsh
run: |
New-Item -ItemType Directory -Path vsix -Force | Out-Null
$urls = "${{ inputs.vsix_urls }}" -split "," | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne "" }
# Map runner OS/arch to vscode-java platform identifiers
$platformMap = @{ "Windows" = "win32"; "Linux" = "linux"; "macOS" = "darwin" }
$archMap = @{ "X64" = "x64"; "ARM64" = "arm64" }
$platform = $platformMap["${{ runner.os }}"]
$arch = $archMap["${{ runner.arch }}"]
$platformId = "$platform-$arch"
Write-Host "Runner platform: $platformId (${{ runner.os }}/${{ runner.arch }})"
$resolvedUrls = @()
foreach ($url in $urls) {
if ($url -match '^https://github\.com/([^/]+)/([^/]+)/releases/tag/(.+)$') {
$owner = $Matches[1]; $repo = $Matches[2]; $tag = $Matches[3]
Write-Host "Resolving GitHub release: $owner/$repo@$tag for platform $platformId"
$apiUrl = "https://api.github.com/repos/$owner/$repo/releases/tags/$tag"
$release = Invoke-RestMethod -Uri $apiUrl -Headers @{ Accept = "application/vnd.github.v3+json" } -UseBasicParsing
$platformAsset = $release.assets | Where-Object { $_.name -like "*-$platformId-*" -and $_.name -like "*.vsix" } | Select-Object -First 1
if ($platformAsset) {
Write-Host " Found platform-specific VSIX: $($platformAsset.name)"
$resolvedUrls += $platformAsset.browser_download_url
} else {
$universalAsset = $release.assets | Where-Object { $_.name -notmatch '-(darwin|linux|win32)-' -and $_.name -like "*.vsix" } | Select-Object -First 1
if ($universalAsset) {
Write-Host " No platform-specific VSIX found, using universal: $($universalAsset.name)"
$resolvedUrls += $universalAsset.browser_download_url
} else {
Write-Host "::warning::No matching VSIX found in release $owner/$repo@$tag for platform $platformId"
}
}
} else {
$resolvedUrls += $url
}
}
foreach ($url in $resolvedUrls) {
$fileName = [System.IO.Path]::GetFileName(($url -split '\?')[0])
Write-Host "Downloading: $url → vsix/$fileName"
Invoke-WebRequest -Uri $url -OutFile "vsix/$fileName" -UseBasicParsing
}
Write-Host "Downloaded VSIX files:"
Get-ChildItem vsix -Filter "*.vsix" | ForEach-Object { Write-Host " $($_.Name) ($([math]::Round($_.Length/1MB, 1)) MB)" }
- name: Run ${{ matrix.plan }}
shell: pwsh
env:
AZURE_OPENAI_ENDPOINT: ${{ secrets.AZURE_OPENAI_ENDPOINT }}
AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }}
AZURE_OPENAI_DEPLOYMENT: ${{ secrets.AZURE_OPENAI_DEPLOYMENT }}
run: |
$autotestArgs = @("run", "test-plans/${{ matrix.plan }}.yaml")
if (Test-Path vsix) {
$vsixFiles = (Get-ChildItem vsix -Filter "*.vsix" | ForEach-Object { $_.FullName }) -join ","
if ($vsixFiles) { $autotestArgs += @("--vsix", $vsixFiles) }
}
# PRs test the branch-built VSIX against stable marketplace deps.
# LLM verification activates automatically when AZURE_OPENAI_* secrets
# are available (e.g. internal PRs); fork PRs without secret access
# simply skip the LLM step (LLMClient.isConfigured() returns false).
# Scheduled & manual runs default to --pre-release unless explicitly disabled.
$isPR = "${{ github.event_name }}" -eq "pull_request"
if (-not $isPR -and "${{ inputs.pre_release }}" -ne "false") {
$autotestArgs += "--pre-release"
}
Write-Host "Running: autotest $($autotestArgs -join ' ')"
& autotest @autotestArgs
- name: Upload results
if: always()
uses: actions/upload-artifact@v4
with:
name: results-${{ matrix.plan }}-${{ matrix.os }}
path: test-results/
retention-days: 30
# ── Job 3: Aggregate analysis ───────────────────────────
analyze:
if: ${{ always() && needs.e2e-test.result != 'skipped' && github.event_name != 'pull_request' && inputs.test_plan == '' }}
needs: e2e-test
runs-on: ubuntu-latest
steps:
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install autotest CLI
run: npm install -g @vscjava/vscode-autotest
- name: Download all results
uses: actions/download-artifact@v4
with:
pattern: results-*
path: all-results
merge-multiple: false
- name: Organize results
run: |
mkdir -p test-results
# Each artifact is named results-<plan>-<os>; keep that suffix so
# Windows and Linux runs of the same plan don't collide.
for dir in all-results/results-*/; do
artifact=$(basename "$dir") # results-<plan>-<os>
suffix="${artifact#results-}" # <plan>-<os>
find "$dir" -name "results.json" -exec dirname {} \; | while read d; do
cp -r "$d" "test-results/$suffix"
done
done
echo "Organized results:"
ls test-results/
- name: Analyze results
env:
AZURE_OPENAI_ENDPOINT: ${{ secrets.AZURE_OPENAI_ENDPOINT }}
AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }}
AZURE_OPENAI_DEPLOYMENT: ${{ secrets.AZURE_OPENAI_DEPLOYMENT }}
run: autotest analyze test-results --output test-results
- name: Write Job Summary
if: always()
run: |
if [ -f test-results/summary.md ]; then
cat test-results/summary.md >> "$GITHUB_STEP_SUMMARY"
fi
- name: Upload aggregate results
if: always()
uses: actions/upload-artifact@v4
with:
name: e2e-aggregate-summary
path: test-results/summary.md
retention-days: 30