From bece0ef048b094f6a6779e574fe8497c9ceaf602 Mon Sep 17 00:00:00 2001 From: Georgy Date: Thu, 26 Feb 2026 16:27:56 +0100 Subject: [PATCH 01/11] [Ubuntu] Add Copilot error logs review --- .../workflows/trigger-ubuntu-win-build.yml | 36 ++++ helpers/GitHubApi.psm1 | 29 +++ helpers/WaitWorkflowCompletion.ps1 | 175 +++++++++++++++++- 3 files changed, 237 insertions(+), 3 deletions(-) diff --git a/.github/workflows/trigger-ubuntu-win-build.yml b/.github/workflows/trigger-ubuntu-win-build.yml index e314247c8c..ee2aff8c79 100644 --- a/.github/workflows/trigger-ubuntu-win-build.yml +++ b/.github/workflows/trigger-ubuntu-win-build.yml @@ -80,10 +80,38 @@ jobs: - name: Checkout Code uses: actions/checkout@v5 + - name: Install Copilot CLI + shell: bash + run: | + curl -fsSL https://gh.io/copilot-install | bash + echo "$HOME/.local/bin" >> "$GITHUB_PATH" + copilot --version + + - name: Validate Copilot environment + shell: bash + env: + COPILOT_GITHUB_TOKEN: ${{ secrets.MODELS_TOKEN }} + run: | + if [[ -z "$COPILOT_GITHUB_TOKEN" ]]; then + echo "MODELS_TOKEN is empty or unavailable in this run" + exit 1 + fi + if ! command -v copilot >/dev/null 2>&1; then + echo "copilot binary not found in PATH" + ls -la "$HOME/.local/bin" || true + exit 1 + fi + - name: Wait for workflow completion env: CI_PR_TOKEN: ${{ secrets.CI_PR_TOKEN }} CI_REPO: ${{ vars.CI_REPO }} + COPILOT_GITHUB_TOKEN: ${{ secrets.MODELS_TOKEN }} + GH_TOKEN: ${{ secrets.MODELS_TOKEN }} + GITHUB_TOKEN: ${{ secrets.MODELS_TOKEN }} + COPILOT_AUTO_UPDATE: "false" + COPILOT_MODEL: gpt-5 + COPILOT_ALLOW_ALL: "false" run: | ./helpers/WaitWorkflowCompletion.ps1 ` -WorkflowRunId "${{ needs.trigger-workflow.outputs.ci_workflow_run_id }}" ` @@ -92,6 +120,7 @@ jobs: - name: Add Summary if: always() + continue-on-error: true run: | "# Test Partner Image" >> $env:GITHUB_STEP_SUMMARY "| Key | Value |" >> $env:GITHUB_STEP_SUMMARY @@ -99,6 +128,13 @@ jobs: "| Workflow Run | [Link](${{ needs.trigger-workflow.outputs.ci_workflow_run_url }}) |" >> $env:GITHUB_STEP_SUMMARY "| Workflow Result | $env:CI_WORKFLOW_RUN_RESULT |" >> $env:GITHUB_STEP_SUMMARY " " >> $env:GITHUB_STEP_SUMMARY + if (-not [string]::IsNullOrWhiteSpace($env:CI_COPILOT_ANALYSIS)) { + "## Copilot Log Analysis" >> $env:GITHUB_STEP_SUMMARY + '```text' >> $env:GITHUB_STEP_SUMMARY + "$env:CI_COPILOT_ANALYSIS" >> $env:GITHUB_STEP_SUMMARY + '```' >> $env:GITHUB_STEP_SUMMARY + " " >> $env:GITHUB_STEP_SUMMARY + } cancel-workflow: runs-on: ubuntu-latest diff --git a/helpers/GitHubApi.psm1 b/helpers/GitHubApi.psm1 index 2bc23b8f69..cd07b9bb8b 100644 --- a/helpers/GitHubApi.psm1 +++ b/helpers/GitHubApi.psm1 @@ -37,6 +37,29 @@ class GithubApi return $response } + [object] GetWorkflowRunJobs([string]$WorkflowRunId) { + $url = "actions/runs/$WorkflowRunId/jobs" + $response = $this.InvokeRestMethod($url, 'GET', $null, $null) + return $response + } + + [void] DownloadJobLogs([string]$JobId, [string]$DestinationPath) { + $requestUrl = $this.BuildUrl("actions/jobs/$JobId/logs", $null, "api") + $params = @{ + Uri = $requestUrl + Method = "GET" + Headers = @{} + OutFile = $DestinationPath + MaximumRedirection = 5 + ErrorAction = "Stop" + } + if ($this.AuthHeader) { + $params.Headers += $this.AuthHeader + } + + Invoke-WebRequest @params | Out-Null + } + [object] DispatchWorkflow([string]$EventType, [object]$EventPayload) { $url = "dispatches" $body = @{ @@ -53,6 +76,12 @@ class GithubApi return $response } + [object] ReRunFailedJobs([string]$WorkflowRunId) { + $url = "actions/runs/$WorkflowRunId/rerun-failed-jobs" + $response = $this.InvokeRestMethod($url, 'POST', $null, $null) + return $response + } + [string] hidden BuildUrl([string]$url, [string]$RequestParams, [string]$ApiPrefix) { $baseUrl = $this.BuildBaseUrl($this.Repository, $ApiPrefix) if ([string]::IsNullOrEmpty($RequestParams)) { diff --git a/helpers/WaitWorkflowCompletion.ps1 b/helpers/WaitWorkflowCompletion.ps1 index 05f1b24257..1e273c21c8 100644 --- a/helpers/WaitWorkflowCompletion.ps1 +++ b/helpers/WaitWorkflowCompletion.ps1 @@ -11,6 +11,8 @@ Param ( Import-Module (Join-Path $PSScriptRoot "GitHubApi.psm1") +$script:CopilotAnalysis = "" + function Wait-ForWorkflowCompletion($WorkflowRunId, $RetryIntervalSeconds) { do { Start-Sleep -Seconds $RetryIntervalSeconds @@ -20,17 +22,172 @@ function Wait-ForWorkflowCompletion($WorkflowRunId, $RetryIntervalSeconds) { return $workflowRun } +function Write-FailedJobLogs { + param ( + $WorkflowJobs, + $GitHubApi, + [int] $TailLines = 0 + ) + + if (-not ($WorkflowJobs -and $WorkflowJobs.jobs)) { + return + } + + $failedJobs = $WorkflowJobs.jobs | Where-Object { $_.conclusion -eq "failure" } + if (-not $failedJobs) { + Write-Host "No failed jobs found in workflow run." + return + } + + function Get-ProvisionerWindow { + param([string[]] $Lines) + + if (-not $Lines) { return @() } + + $start = $null + for ($i = $Lines.Length - 1; $i -ge 0; $i--) { + if ($Lines[$i] -match "Provisioning with") { + $start = $i + break + } + } + + if ($start -eq $null) { return @() } + + $end = $Lines.Length - 1 + for ($j = $start; $j -lt $Lines.Length; $j++) { + if ($Lines[$j] -match "Provisioning step had errors: Running the cleanup provisioner, if present") { + $end = $j - 1 + break + } + } + + if ($end -lt $start) { return @() } + return $Lines[$start..$end] + } + + function Invoke-CopilotLogAnalysis { + param([string[]] $LogLines) + + if (-not $LogLines -or $LogLines.Count -eq 0) { return } + if ([string]::IsNullOrWhiteSpace($env:COPILOT_GITHUB_TOKEN)) { return } + + $copilotCmd = $null + $cmdInfo = Get-Command copilot -ErrorAction SilentlyContinue + if ($cmdInfo) { + $copilotCmd = $cmdInfo.Source + } else { + $candidatePaths = @( + (Join-Path $env:HOME ".local/bin/copilot"), + "/usr/local/bin/copilot", + "/opt/homebrew/bin/copilot" + ) + $copilotCmd = $candidatePaths | Where-Object { Test-Path $_ } | Select-Object -First 1 + } + if ([string]::IsNullOrWhiteSpace($copilotCmd)) { return } + + $prompt = @" +Analyze the following CI provisioner failure log. +Return only 2 short lines: +1) Root cause +2) Suggested fix + +Log: +$($LogLines -join "`n") +"@ + + $promptFile = Join-Path $env:RUNNER_TEMP "copilot-log-analysis.txt" + $prompt | Out-File -FilePath $promptFile -Encoding utf8NoBOM + + try { + if ([string]::IsNullOrWhiteSpace($env:COPILOT_AUTO_UPDATE)) { $env:COPILOT_AUTO_UPDATE = "false" } + if ([string]::IsNullOrWhiteSpace($env:COPILOT_MODEL)) { $env:COPILOT_MODEL = "gpt-5" } + if ([string]::IsNullOrWhiteSpace($env:COPILOT_ALLOW_ALL)) { $env:COPILOT_ALLOW_ALL = "false" } + if ([string]::IsNullOrWhiteSpace($env:GH_TOKEN)) { $env:GH_TOKEN = $env:COPILOT_GITHUB_TOKEN } + if ([string]::IsNullOrWhiteSpace($env:GITHUB_TOKEN)) { $env:GITHUB_TOKEN = $env:COPILOT_GITHUB_TOKEN } + + $analysis = (Get-Content -Path $promptFile -Raw | & $copilotCmd --no-ask-user --no-custom-instructions 2>&1 | Out-String).Trim() + $analysis = [regex]::Replace($analysis, "(?ms)\r?\n?\s*Total usage est:.*$", "").Trim() + if ($analysis -match "No authentication information found") { + Write-Host "Copilot auth error: No authentication information found." + if ([string]::IsNullOrWhiteSpace($script:CopilotAnalysis)) { + $script:CopilotAnalysis = "Copilot auth error: No authentication information found." + } + return + } + + if (-not [string]::IsNullOrWhiteSpace($analysis)) { + Write-Host $analysis + if ([string]::IsNullOrWhiteSpace($script:CopilotAnalysis)) { + $script:CopilotAnalysis = $analysis + } + } else { + Write-Host "Copilot analysis returned empty output." + if ([string]::IsNullOrWhiteSpace($script:CopilotAnalysis)) { + $script:CopilotAnalysis = "Copilot analysis returned empty output." + } + } + } catch { + } finally { + Remove-Item -Path $promptFile -Force -ErrorAction SilentlyContinue + } + } + + foreach ($job in $failedJobs) { + $zipPath = Join-Path $env:RUNNER_TEMP "job-$($job.id)-logs.zip" + $extractPath = Join-Path $env:RUNNER_TEMP "job-$($job.id)-logs" + $logContent = @() + + try { + $GitHubApi.DownloadJobLogs($job.id, $zipPath) + if (-not (Test-Path $zipPath) -or (Get-Item $zipPath).Length -eq 0) { + Write-Host "No downloadable logs for failed job $($job.name)." + continue + } + + $slice = @() + try { + Expand-Archive -Path $zipPath -DestinationPath $extractPath -Force -ErrorAction Stop | Out-Null + $logFiles = Get-ChildItem -Path $extractPath -Recurse -File | Sort-Object Length -Descending + if ($logFiles.Count -gt 0) { + $logContent = Get-Content -Path $logFiles[0].FullName + $slice = Get-ProvisionerWindow -Lines $logContent + } + } catch { + $rawContent = Get-Content -Path $zipPath -ErrorAction SilentlyContinue + if ($rawContent) { + $logContent = $rawContent + $slice = Get-ProvisionerWindow -Lines $rawContent + } + } + + if ($slice.Count -eq 0 -and $logContent.Count -gt 0) { + $slice = $logContent | Select-Object -Last 200 + Write-Host "Provisioner window not found; using last 200 log lines." + } + + if ($slice.Count -gt 0) { + Invoke-CopilotLogAnalysis -LogLines $slice + ($slice | Select-Object -Last ($(if ($TailLines -gt 0) { $TailLines } else { $slice.Count }))) -join "`n" | Write-Host + } else { + Write-Host "Failed job logs parsed, but no lines were available for analysis." + } + } finally { + Remove-Item -Path $zipPath -Force -ErrorAction SilentlyContinue + Remove-Item -Path $extractPath -Recurse -Force -ErrorAction SilentlyContinue + } + } +} + $gitHubApi = Get-GithubApi -Repository $Repository -AccessToken $AccessToken $attempt = 1 do { $finishedWorkflowRun = Wait-ForWorkflowCompletion -WorkflowRunId $WorkflowRunId -RetryIntervalSeconds $RetryIntervalSeconds - Write-Host "Workflow run finished with result: $($finishedWorkflowRun.conclusion)" if ($finishedWorkflowRun.conclusion -in ("success", "cancelled", "timed_out")) { break } elseif ($finishedWorkflowRun.conclusion -eq "failure") { if ($attempt -le $MaxRetryCount) { - Write-Host "Workflow run will be restarted. Attempt $attempt of $MaxRetryCount" $gitHubApi.ReRunFailedJobs($WorkflowRunId) $attempt += 1 } else { @@ -39,8 +196,20 @@ do { } } while ($true) -Write-Host "Last result: $($finishedWorkflowRun.conclusion)." +try { + $workflowJobs = $gitHubApi.GetWorkflowRunJobs($WorkflowRunId) + if ($finishedWorkflowRun.conclusion -eq "failure") { + Write-FailedJobLogs -WorkflowJobs $workflowJobs -GitHubApi $gitHubApi -TailLines 0 + } +} catch { + Write-Host "Failed to load workflow jobs/logs: $($_.Exception.Message)" +} "CI_WORKFLOW_RUN_RESULT=$($finishedWorkflowRun.conclusion)" | Out-File -Append -FilePath $env:GITHUB_ENV +if (-not [string]::IsNullOrWhiteSpace($script:CopilotAnalysis) -and -not [string]::IsNullOrWhiteSpace($env:GITHUB_ENV)) { + "CI_COPILOT_ANALYSIS< Date: Thu, 26 Feb 2026 21:28:32 +0100 Subject: [PATCH 02/11] Update .github/workflows/trigger-ubuntu-win-build.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/workflows/trigger-ubuntu-win-build.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/trigger-ubuntu-win-build.yml b/.github/workflows/trigger-ubuntu-win-build.yml index ee2aff8c79..ee0e68b6a6 100644 --- a/.github/workflows/trigger-ubuntu-win-build.yml +++ b/.github/workflows/trigger-ubuntu-win-build.yml @@ -83,10 +83,8 @@ jobs: - name: Install Copilot CLI shell: bash run: | - curl -fsSL https://gh.io/copilot-install | bash - echo "$HOME/.local/bin" >> "$GITHUB_PATH" + npm install -g @githubnext/github-copilot-cli copilot --version - - name: Validate Copilot environment shell: bash env: From 5bba600d7fa201797befcccce37d5666a0f63dec Mon Sep 17 00:00:00 2001 From: Georgy Puzakov <99042181+v-GeorgyPuzakov@users.noreply.github.com> Date: Thu, 26 Feb 2026 22:04:30 +0100 Subject: [PATCH 03/11] Update helpers/WaitWorkflowCompletion.ps1 Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- helpers/WaitWorkflowCompletion.ps1 | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/helpers/WaitWorkflowCompletion.ps1 b/helpers/WaitWorkflowCompletion.ps1 index 1e273c21c8..1b880ed6fb 100644 --- a/helpers/WaitWorkflowCompletion.ps1 +++ b/helpers/WaitWorkflowCompletion.ps1 @@ -128,6 +128,12 @@ $($LogLines -join "`n") } } } catch { + Write-Host "Copilot analysis failed due to an unexpected error. See verbose output for details." + Write-Verbose ("Copilot analysis exception: {0}" -f $_.Exception.Message) + Write-Verbose ("Full exception: {0}" -f $_ | Out-String) + if ([string]::IsNullOrWhiteSpace($script:CopilotAnalysis)) { + $script:CopilotAnalysis = "Copilot analysis failed due to an unexpected error. Check workflow logs for details." + } } finally { Remove-Item -Path $promptFile -Force -ErrorAction SilentlyContinue } From f9816e29cd096e8546c16645a5fdba78d4b378d7 Mon Sep 17 00:00:00 2001 From: Georgy Puzakov <99042181+v-GeorgyPuzakov@users.noreply.github.com> Date: Thu, 26 Feb 2026 22:06:17 +0100 Subject: [PATCH 04/11] Update helpers/WaitWorkflowCompletion.ps1 Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- helpers/WaitWorkflowCompletion.ps1 | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/helpers/WaitWorkflowCompletion.ps1 b/helpers/WaitWorkflowCompletion.ps1 index 1b880ed6fb..73784ec38a 100644 --- a/helpers/WaitWorkflowCompletion.ps1 +++ b/helpers/WaitWorkflowCompletion.ps1 @@ -107,6 +107,14 @@ $($LogLines -join "`n") if ([string]::IsNullOrWhiteSpace($env:GITHUB_TOKEN)) { $env:GITHUB_TOKEN = $env:COPILOT_GITHUB_TOKEN } $analysis = (Get-Content -Path $promptFile -Raw | & $copilotCmd --no-ask-user --no-custom-instructions 2>&1 | Out-String).Trim() + if ($LASTEXITCODE -ne 0) { + $copilotErrorMessage = "Copilot CLI exited with code $LASTEXITCODE.`nOutput:`n$analysis" + Write-Host $copilotErrorMessage + if ([string]::IsNullOrWhiteSpace($script:CopilotAnalysis)) { + $script:CopilotAnalysis = $copilotErrorMessage + } + throw "Copilot CLI failed with exit code $LASTEXITCODE." + } $analysis = [regex]::Replace($analysis, "(?ms)\r?\n?\s*Total usage est:.*$", "").Trim() if ($analysis -match "No authentication information found") { Write-Host "Copilot auth error: No authentication information found." From 13bc5ebeea117c3a41ed62910051f2aa7010c748 Mon Sep 17 00:00:00 2001 From: Georgy Puzakov <99042181+v-GeorgyPuzakov@users.noreply.github.com> Date: Thu, 26 Feb 2026 22:09:55 +0100 Subject: [PATCH 05/11] Update helpers/WaitWorkflowCompletion.ps1 Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- helpers/WaitWorkflowCompletion.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/helpers/WaitWorkflowCompletion.ps1 b/helpers/WaitWorkflowCompletion.ps1 index 73784ec38a..513b59cd01 100644 --- a/helpers/WaitWorkflowCompletion.ps1 +++ b/helpers/WaitWorkflowCompletion.ps1 @@ -220,9 +220,9 @@ try { } "CI_WORKFLOW_RUN_RESULT=$($finishedWorkflowRun.conclusion)" | Out-File -Append -FilePath $env:GITHUB_ENV if (-not [string]::IsNullOrWhiteSpace($script:CopilotAnalysis) -and -not [string]::IsNullOrWhiteSpace($env:GITHUB_ENV)) { - "CI_COPILOT_ANALYSIS< Date: Thu, 26 Feb 2026 22:28:48 +0100 Subject: [PATCH 06/11] [Ubuntu] Add Copilot error logs review --- helpers/WaitWorkflowCompletion.ps1 | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/helpers/WaitWorkflowCompletion.ps1 b/helpers/WaitWorkflowCompletion.ps1 index 513b59cd01..296a291355 100644 --- a/helpers/WaitWorkflowCompletion.ps1 +++ b/helpers/WaitWorkflowCompletion.ps1 @@ -150,7 +150,7 @@ $($LogLines -join "`n") foreach ($job in $failedJobs) { $zipPath = Join-Path $env:RUNNER_TEMP "job-$($job.id)-logs.zip" $extractPath = Join-Path $env:RUNNER_TEMP "job-$($job.id)-logs" - $logContent = @() + $allLogContent = @() try { $GitHubApi.DownloadJobLogs($job.id, $zipPath) @@ -164,19 +164,29 @@ $($LogLines -join "`n") Expand-Archive -Path $zipPath -DestinationPath $extractPath -Force -ErrorAction Stop | Out-Null $logFiles = Get-ChildItem -Path $extractPath -Recurse -File | Sort-Object Length -Descending if ($logFiles.Count -gt 0) { - $logContent = Get-Content -Path $logFiles[0].FullName - $slice = Get-ProvisionerWindow -Lines $logContent + foreach ($logFile in $logFiles) { + $currentLogContent = Get-Content -Path $logFile.FullName + if ($currentLogContent) { + $allLogContent += $currentLogContent + if ($slice.Count -eq 0) { + $slice = Get-ProvisionerWindow -Lines $currentLogContent + } + if ($slice.Count -gt 0) { + break + } + } + } } } catch { $rawContent = Get-Content -Path $zipPath -ErrorAction SilentlyContinue if ($rawContent) { - $logContent = $rawContent + $allLogContent = $rawContent $slice = Get-ProvisionerWindow -Lines $rawContent } } - if ($slice.Count -eq 0 -and $logContent.Count -gt 0) { - $slice = $logContent | Select-Object -Last 200 + if ($slice.Count -eq 0 -and $allLogContent.Count -gt 0) { + $slice = $allLogContent | Select-Object -Last 200 Write-Host "Provisioner window not found; using last 200 log lines." } From ce1d0723d207b0269abbdbf23ff2b3c0ef8d1536 Mon Sep 17 00:00:00 2001 From: Georgy Date: Fri, 27 Feb 2026 11:14:42 +0100 Subject: [PATCH 07/11] [Ubuntu] Add Copilot error logs review --- .github/workflows/trigger-ubuntu-win-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/trigger-ubuntu-win-build.yml b/.github/workflows/trigger-ubuntu-win-build.yml index ee0e68b6a6..af13bf8a0c 100644 --- a/.github/workflows/trigger-ubuntu-win-build.yml +++ b/.github/workflows/trigger-ubuntu-win-build.yml @@ -84,7 +84,7 @@ jobs: shell: bash run: | npm install -g @githubnext/github-copilot-cli - copilot --version + "$(npm bin -g)/copilot" --version - name: Validate Copilot environment shell: bash env: From 219385b2077c99a45a8b359b57bdb5bba8db62e8 Mon Sep 17 00:00:00 2001 From: Georgy Date: Tue, 3 Mar 2026 17:38:22 +0100 Subject: [PATCH 08/11] =?UTF-8?q?=C2=A0change=20token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/trigger-ubuntu-win-build.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/trigger-ubuntu-win-build.yml b/.github/workflows/trigger-ubuntu-win-build.yml index af13bf8a0c..548eccbce1 100644 --- a/.github/workflows/trigger-ubuntu-win-build.yml +++ b/.github/workflows/trigger-ubuntu-win-build.yml @@ -88,7 +88,7 @@ jobs: - name: Validate Copilot environment shell: bash env: - COPILOT_GITHUB_TOKEN: ${{ secrets.MODELS_TOKEN }} + COPILOT_GITHUB_TOKEN: ${{ secrets.CI_PR_TOKEN }} run: | if [[ -z "$COPILOT_GITHUB_TOKEN" ]]; then echo "MODELS_TOKEN is empty or unavailable in this run" @@ -104,9 +104,9 @@ jobs: env: CI_PR_TOKEN: ${{ secrets.CI_PR_TOKEN }} CI_REPO: ${{ vars.CI_REPO }} - COPILOT_GITHUB_TOKEN: ${{ secrets.MODELS_TOKEN }} - GH_TOKEN: ${{ secrets.MODELS_TOKEN }} - GITHUB_TOKEN: ${{ secrets.MODELS_TOKEN }} + COPILOT_GITHUB_TOKEN: ${{ secrets.CI_PR_TOKEN }} + GH_TOKEN: ${{ secrets.CI_PR_TOKEN }} + GITHUB_TOKEN: ${{ secrets.CI_PR_TOKEN }} COPILOT_AUTO_UPDATE: "false" COPILOT_MODEL: gpt-5 COPILOT_ALLOW_ALL: "false" From d903c74e3f3ebd0bddd83ec67915ef32d4dbae9e Mon Sep 17 00:00:00 2001 From: Georgy Date: Mon, 9 Mar 2026 17:25:46 +0100 Subject: [PATCH 09/11] fix error --- images/ubuntu/Ubuntu2204-Readme.md | 2 +- images/ubuntu/Ubuntu2404-Readme.md | 2 +- images/ubuntu/toolsets/toolset-2204.json | 2 +- images/ubuntu/toolsets/toolset-2404.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/images/ubuntu/Ubuntu2204-Readme.md b/images/ubuntu/Ubuntu2204-Readme.md index 33c33c1a34..63d1801cd1 100644 --- a/images/ubuntu/Ubuntu2204-Readme.md +++ b/images/ubuntu/Ubuntu2204-Readme.md @@ -60,7 +60,7 @@ to accomplish this. - Ant 1.10.12 - Gradle 9.3.1 - Lerna 9.0.4 -- Maven 3.9.12 +- Maven 3.9.9 - Sbt 1.12.4 ### Tools diff --git a/images/ubuntu/Ubuntu2404-Readme.md b/images/ubuntu/Ubuntu2404-Readme.md index e284190bdb..c84647916d 100644 --- a/images/ubuntu/Ubuntu2404-Readme.md +++ b/images/ubuntu/Ubuntu2404-Readme.md @@ -57,7 +57,7 @@ to accomplish this. - Ant 1.10.14 - Gradle 9.3.1 - Lerna 9.0.4 -- Maven 3.9.12 +- Maven 3.9.9 ### Tools - Ansible 2.20.3 diff --git a/images/ubuntu/toolsets/toolset-2204.json b/images/ubuntu/toolsets/toolset-2204.json index abde50d37f..db633c4093 100644 --- a/images/ubuntu/toolsets/toolset-2204.json +++ b/images/ubuntu/toolsets/toolset-2204.json @@ -73,7 +73,7 @@ "java": { "default": "11", "versions": [ "8", "11", "17", "21", "25"], - "maven": "3.9.12" + "maven": "3.9.9" }, "android": { "cmdline-tools": "commandlinetools-linux-9477386_latest.zip", diff --git a/images/ubuntu/toolsets/toolset-2404.json b/images/ubuntu/toolsets/toolset-2404.json index a4e3add97d..e859a7ba4b 100644 --- a/images/ubuntu/toolsets/toolset-2404.json +++ b/images/ubuntu/toolsets/toolset-2404.json @@ -71,7 +71,7 @@ "java": { "default": "17", "versions": [ "8", "11", "17", "21", "25"], - "maven": "3.9.12" + "maven": "3.9.9" }, "android": { "cmdline-tools": "commandlinetools-linux-11076708_latest.zip", From 0a10945ddf208edf3024e5e9bb58260bec11b4e4 Mon Sep 17 00:00:00 2001 From: Georgy Date: Tue, 10 Mar 2026 09:07:08 +0100 Subject: [PATCH 10/11] Update Ubuntu Maven to 3.9.13 --- images/ubuntu/Ubuntu2204-Readme.md | 2 +- images/ubuntu/Ubuntu2404-Readme.md | 2 +- images/ubuntu/toolsets/toolset-2204.json | 2 +- images/ubuntu/toolsets/toolset-2404.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/images/ubuntu/Ubuntu2204-Readme.md b/images/ubuntu/Ubuntu2204-Readme.md index 63d1801cd1..280aefbc93 100644 --- a/images/ubuntu/Ubuntu2204-Readme.md +++ b/images/ubuntu/Ubuntu2204-Readme.md @@ -60,7 +60,7 @@ to accomplish this. - Ant 1.10.12 - Gradle 9.3.1 - Lerna 9.0.4 -- Maven 3.9.9 +- Maven 3.9.13 - Sbt 1.12.4 ### Tools diff --git a/images/ubuntu/Ubuntu2404-Readme.md b/images/ubuntu/Ubuntu2404-Readme.md index c84647916d..c89db641eb 100644 --- a/images/ubuntu/Ubuntu2404-Readme.md +++ b/images/ubuntu/Ubuntu2404-Readme.md @@ -57,7 +57,7 @@ to accomplish this. - Ant 1.10.14 - Gradle 9.3.1 - Lerna 9.0.4 -- Maven 3.9.9 +- Maven 3.9.13 ### Tools - Ansible 2.20.3 diff --git a/images/ubuntu/toolsets/toolset-2204.json b/images/ubuntu/toolsets/toolset-2204.json index db633c4093..42bae81f96 100644 --- a/images/ubuntu/toolsets/toolset-2204.json +++ b/images/ubuntu/toolsets/toolset-2204.json @@ -73,7 +73,7 @@ "java": { "default": "11", "versions": [ "8", "11", "17", "21", "25"], - "maven": "3.9.9" + "maven": "3.9.13" }, "android": { "cmdline-tools": "commandlinetools-linux-9477386_latest.zip", diff --git a/images/ubuntu/toolsets/toolset-2404.json b/images/ubuntu/toolsets/toolset-2404.json index e859a7ba4b..f5b11bdd53 100644 --- a/images/ubuntu/toolsets/toolset-2404.json +++ b/images/ubuntu/toolsets/toolset-2404.json @@ -71,7 +71,7 @@ "java": { "default": "17", "versions": [ "8", "11", "17", "21", "25"], - "maven": "3.9.9" + "maven": "3.9.13" }, "android": { "cmdline-tools": "commandlinetools-linux-11076708_latest.zip", From 48bb4d05dbff9c75ddc4a4f1165b638a5243fb2e Mon Sep 17 00:00:00 2001 From: Georgy Date: Tue, 10 Mar 2026 11:20:00 +0100 Subject: [PATCH 11/11] Add PSGallery failure-detection tests --- images/windows/scripts/tests/Tools.Tests.ps1 | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/images/windows/scripts/tests/Tools.Tests.ps1 b/images/windows/scripts/tests/Tools.Tests.ps1 index 3c6301613a..caed41794b 100644 --- a/images/windows/scripts/tests/Tools.Tests.ps1 +++ b/images/windows/scripts/tests/Tools.Tests.ps1 @@ -112,6 +112,16 @@ Describe "PowerShell Core" { } } +Describe "PowerShell Gallery" { + It "PSGallery repository is registered" { + Get-PSRepository -Name PSGallery -ErrorAction SilentlyContinue | Should -Not -BeNullOrEmpty + } + + It "Install-Module from PSGallery" { + "Install-Module -Name Microsoft.WinGet.Client -Repository PSGallery -Scope CurrentUser -Force -ErrorAction Stop" | Should -ReturnZeroExitCode + } +} + Describe "Sbt" { It "sbt" { "sbt --version" | Should -ReturnZeroExitCode