-
Notifications
You must be signed in to change notification settings - Fork 63
Release/2025.05 #3913
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Release/2025.05 #3913
Changes from 234 commits
7947ce3
a902138
0acee93
5af93ff
f4c41ec
4f2f328
15908fd
aa67d6c
6e761c0
e84107b
d378c72
e6c8312
1ede307
d7614a8
be1f322
495a402
180a2aa
7723da1
79b560d
505ed20
2194777
3758618
f660f1f
b1b2ae0
195a6c5
e5b14e4
0d4f52b
0cceb13
a220acb
7e536f4
a0b0f20
384d694
cea6eee
a0c4d81
204b7ff
2add3b4
c05c066
1e7dc04
645811c
2372944
fc5e532
18f23d9
faefd35
d738aa7
bbadb8b
db3e5af
1c17038
26f7045
5c78396
a420e84
b6d195a
f8cc05a
b9633c1
7d1597f
dcb85f9
e592164
ee05a06
363b899
4ddaeb3
1eeecfa
50b93bd
738cf84
2f600d8
dfdd84e
98f7d73
382b45c
3066cce
0b46cef
e8de17d
f2358a2
4c676ac
25b19eb
741b79d
6f7e50e
c255174
b052240
e0f5606
c4392d4
1fcd284
82b1f23
9f00bb1
3f150fb
bd9add8
29e1089
db3f7ea
268281a
2117dca
9e584ed
39c1894
6339bc8
94a18c4
8f6e50e
bd8438f
0dcc912
d1cf13f
ee49b3b
e6a34da
534605e
daad8dc
51f5e09
fd2626c
c137e6a
ba160ed
8b18906
63ef1d1
078e8fd
5d1e3d4
fece367
7ae63da
3fc8d4b
3d84a14
6b251fb
f32a6d4
574dc78
4d0b980
5513459
a3a7733
fcffbad
6ee6d19
ac0f566
f010ab9
826236f
a620e58
8ae0e6c
0c643d9
9e24b30
99a9258
81df047
3dc945c
7cd50ce
a097f88
48ccb0f
09af45d
ea79f8f
8c671a0
5aa359e
5d78ff4
37b2606
942527d
76db64e
1a92e39
f462037
423df2b
b86c36e
e452084
1e2d4d3
7d58d46
51f5b85
571e33c
e185772
0a39fe8
e1ebb33
c555d23
b9015dc
6110028
04af042
61ba4b0
be595b4
f0ad01c
2bb4de9
01dc5ae
7c35a02
1fcabcd
be2e7e9
cfbcdd7
42dc450
2813097
5d7a500
3f64894
32e894b
d34e323
e66637f
28f4596
d531835
19347f7
a510a1d
bab3bc4
f52b281
9117a37
7bffdd7
f9503bd
1dd0059
eb0ca41
b1fa03e
3daf086
2d11e10
0c9f6f5
154d15d
dab8b9c
c07817c
cfad42b
1dacabe
1f17536
207ef20
5a893f2
d19d44c
822cc2a
ae93198
293462d
06a76ed
d464901
3142429
f8782b0
d65de99
441c844
4c6afbb
c7ebde4
082c915
922cc94
a7e84c9
698a301
0c380eb
85cf1d7
67d1838
9c3ce3d
c73fbed
2fb0abb
37bbc6f
c0ecfce
f029903
8c5d144
53b3aed
d3d8513
01f73fe
933f522
1c3ce46
11cd9b9
f5be549
74a71e3
1e4f12f
ec6c988
fb4925d
d6699df
61af5d6
e8b1e07
14f5cd2
00d612f
3bddaea
778a69c
f73e0d0
3de223a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,168 @@ | ||||||||||||||||||||||||||
name: Run QA Test # Runs automated tests on a self-hosted QA machine | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
on: | ||||||||||||||||||||||||||
workflow_run: | ||||||||||||||||||||||||||
workflows: ["Build"] | ||||||||||||||||||||||||||
types: | ||||||||||||||||||||||||||
- completed | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
concurrency: | ||||||||||||||||||||||||||
group: qa-test-run | ||||||||||||||||||||||||||
cancel-in-progress: true # Cancels any queued job when a new one starts | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
jobs: | ||||||||||||||||||||||||||
debug-workflow: | ||||||||||||||||||||||||||
runs-on: ubuntu-latest | ||||||||||||||||||||||||||
steps: | ||||||||||||||||||||||||||
- name: Debug Workflow Variables | ||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||
echo "Workflow Conclusion: ${{ github.event.workflow_run.conclusion }}" | ||||||||||||||||||||||||||
echo "Workflow Head Branch: ${{ github.event.workflow_run.head_branch }}" | ||||||||||||||||||||||||||
echo "Workflow Run ID: ${{ github.event.workflow_run.id }}" | ||||||||||||||||||||||||||
echo "Head Commit Message: ${{ github.event.workflow_run.head_commit.message }}" | ||||||||||||||||||||||||||
Check failureCode scanning / CodeQL Code injection Critical
Potential code injection in
${ github.event.workflow_run.head_commit.message } Error loading related location Loadingworkflow_run Error loading related location Loading
Copilot AutofixAI 12 days ago To fix the issue, the untrusted input
Suggested changeset
1
.github/workflows/qatest.yaml
Copilot is powered by AI and may make mistakes. Always verify output.
Positive FeedbackNegative Feedback
Refresh and try again.
|
||||||||||||||||||||||||||
echo "GitHub Ref: ${{ github.ref }}" | ||||||||||||||||||||||||||
echo "GitHub Ref Name: ${{ github.ref_name }}" | ||||||||||||||||||||||||||
echo "GitHub Event Name: ${{ github.event_name }}" | ||||||||||||||||||||||||||
echo "GitHub Workflow Name: ${{ github.workflow }}" | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
install-viewer-and-run-tests: | ||||||||||||||||||||||||||
Comment on lines
+15
to
+28
Check warningCode scanning / CodeQL Workflow does not contain permissions Medium
Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {}
|
||||||||||||||||||||||||||
runs-on: [self-hosted, qa-machine] | ||||||||||||||||||||||||||
# Run test only on successful builds of Second_Life_X branches | ||||||||||||||||||||||||||
if: > | ||||||||||||||||||||||||||
github.event.workflow_run.conclusion == 'success' && | ||||||||||||||||||||||||||
( | ||||||||||||||||||||||||||
startsWith(github.event.workflow_run.head_branch, 'Second_Life') | ||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
steps: | ||||||||||||||||||||||||||
- name: Temporarily Allow PowerShell Scripts (Process Scope) | ||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||
Set-ExecutionPolicy RemoteSigned -Scope Process -Force | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
- name: Verify viewer-sikulix-main Exists | ||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||
if (-Not (Test-Path -Path 'C:\viewer-sikulix-main')) { | ||||||||||||||||||||||||||
Write-Host '❌ Error: viewer-sikulix not found on runner!' | ||||||||||||||||||||||||||
exit 1 | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
Write-Host '✅ viewer-sikulix is already available.' | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
- name: Fetch & Download Windows Installer Artifact | ||||||||||||||||||||||||||
shell: pwsh | ||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||
$BUILD_ID = "${{ github.event.workflow_run.id }}" | ||||||||||||||||||||||||||
$ARTIFACTS_URL = "https://api.github.com/repos/secondlife/viewer/actions/runs/$BUILD_ID/artifacts" | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
# Fetch the correct artifact URL | ||||||||||||||||||||||||||
$response = Invoke-RestMethod -Headers @{Authorization="token ${{ secrets.GITHUB_TOKEN }}" } -Uri $ARTIFACTS_URL | ||||||||||||||||||||||||||
$ARTIFACT_NAME = ($response.artifacts | Where-Object { $_.name -eq "Windows-installer" }).archive_download_url | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
if (-Not $ARTIFACT_NAME) { | ||||||||||||||||||||||||||
Write-Host "❌ Error: Windows-installer artifact not found!" | ||||||||||||||||||||||||||
exit 1 | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
Write-Host "✅ Artifact found: $ARTIFACT_NAME" | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
# Secure download path | ||||||||||||||||||||||||||
$DownloadPath = "$env:TEMP\secondlife-build-$BUILD_ID" | ||||||||||||||||||||||||||
New-Item -ItemType Directory -Path $DownloadPath -Force | Out-Null | ||||||||||||||||||||||||||
$InstallerPath = "$DownloadPath\installer.zip" | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
# Download the ZIP | ||||||||||||||||||||||||||
Invoke-WebRequest -Uri $ARTIFACT_NAME -Headers @{Authorization="token ${{ secrets.GITHUB_TOKEN }}"} -OutFile $InstallerPath | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
# Ensure download succeeded | ||||||||||||||||||||||||||
if (-Not (Test-Path $InstallerPath)) { | ||||||||||||||||||||||||||
Write-Host "❌ Error: Failed to download Windows-installer.zip" | ||||||||||||||||||||||||||
exit 1 | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
- name: Extract Installer & Locate Executable | ||||||||||||||||||||||||||
shell: pwsh | ||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||
# Explicitly set BUILD_ID again (since it does not appear to persist across steps) | ||||||||||||||||||||||||||
$BUILD_ID = "${{ github.event.workflow_run.id }}" | ||||||||||||||||||||||||||
$ExtractPath = "$env:TEMP\secondlife-build-$BUILD_ID" | ||||||||||||||||||||||||||
$InstallerZip = "$ExtractPath\installer.zip" | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
# Print paths for debugging | ||||||||||||||||||||||||||
Write-Host "Extract Path: $ExtractPath" | ||||||||||||||||||||||||||
Write-Host "Installer ZIP Path: $InstallerZip" | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
# Verify ZIP exists before extracting | ||||||||||||||||||||||||||
if (-Not (Test-Path $InstallerZip)) { | ||||||||||||||||||||||||||
Write-Host "❌ Error: ZIP file not found at $InstallerZip!" | ||||||||||||||||||||||||||
exit 1 | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
Write-Host "✅ ZIP file exists and is valid. Extracting..." | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
Expand-Archive -Path $InstallerZip -DestinationPath $ExtractPath -Force | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
# Find installer executable | ||||||||||||||||||||||||||
$INSTALLER_PATH = (Get-ChildItem -Path $ExtractPath -Filter '*.exe' -Recurse | Select-Object -First 1).FullName | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
if (-Not $INSTALLER_PATH -or $INSTALLER_PATH -eq "") { | ||||||||||||||||||||||||||
Write-Host "❌ Error: No installer executable found in the extracted files!" | ||||||||||||||||||||||||||
Write-Host "📂 Extracted Files:" | ||||||||||||||||||||||||||
Get-ChildItem -Path $ExtractPath -Recurse | Format-Table -AutoSize | ||||||||||||||||||||||||||
exit 1 | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
Write-Host "✅ Installer found: $INSTALLER_PATH" | ||||||||||||||||||||||||||
echo "INSTALLER_PATH=$INSTALLER_PATH" | Out-File -FilePath $env:GITHUB_ENV -Append | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
- name: Install Second Life Using Task Scheduler (Bypass UAC) | ||||||||||||||||||||||||||
shell: pwsh | ||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||
$action = New-ScheduledTaskAction -Execute "${{ env.INSTALLER_PATH }}" -Argument "/S" | ||||||||||||||||||||||||||
$principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest | ||||||||||||||||||||||||||
$task = New-ScheduledTask -Action $action -Principal $principal | ||||||||||||||||||||||||||
Register-ScheduledTask -TaskName "SilentSLInstaller" -InputObject $task -Force | ||||||||||||||||||||||||||
Start-ScheduledTask -TaskName "SilentSLInstaller" | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
- name: Wait for Installation to Complete | ||||||||||||||||||||||||||
shell: pwsh | ||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||
Write-Host "Waiting for the Second Life installer to finish..." | ||||||||||||||||||||||||||
do { | ||||||||||||||||||||||||||
Start-Sleep -Seconds 5 | ||||||||||||||||||||||||||
$installerProcess = Get-Process | Where-Object { $_.Path -eq "${{ env.INSTALLER_PATH }}" } | ||||||||||||||||||||||||||
} while ($installerProcess) | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
Write-Host "✅ Installation completed!" | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
- name: Cleanup Task Scheduler Entry | ||||||||||||||||||||||||||
shell: pwsh | ||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||
Unregister-ScheduledTask -TaskName "SilentSLInstaller" -Confirm:$false | ||||||||||||||||||||||||||
Write-Host "✅ Task Scheduler entry removed." | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
- name: Delete Installer ZIP | ||||||||||||||||||||||||||
shell: pwsh | ||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||
# Explicitly set BUILD_ID again | ||||||||||||||||||||||||||
$BUILD_ID = "${{ github.event.workflow_run.id }}" | ||||||||||||||||||||||||||
$DeletePath = "$env:TEMP\secondlife-build-$BUILD_ID\installer.zip" | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
Write-Host "Checking if installer ZIP exists: $DeletePath" | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
# Ensure the ZIP file exists before trying to delete it | ||||||||||||||||||||||||||
if (Test-Path $DeletePath) { | ||||||||||||||||||||||||||
Remove-Item -Path $DeletePath -Force | ||||||||||||||||||||||||||
Write-Host "✅ Successfully deleted: $DeletePath" | ||||||||||||||||||||||||||
} else { | ||||||||||||||||||||||||||
Write-Host "⚠️ Warning: ZIP file does not exist, skipping deletion." | ||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
- name: Run QA Test Script | ||||||||||||||||||||||||||
run: | | ||||||||||||||||||||||||||
Write-Host "Running QA Test script..." | ||||||||||||||||||||||||||
python C:\viewer-sikulix-main\runTests.py | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
# - name: Upload Test Results | ||||||||||||||||||||||||||
# uses: actions/upload-artifact@v3 | ||||||||||||||||||||||||||
# with: | ||||||||||||||||||||||||||
# name: test-results | ||||||||||||||||||||||||||
# path: C:\viewer-sikulix-main\regressionTest\test_results.html | ||||||||||||||||||||||||||
Comment on lines
+29
to
+168
Check warningCode scanning / CodeQL Workflow does not contain permissions Medium
Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {}
|
Check failure
Code scanning / CodeQL
Code injection Critical
Copilot Autofix
AI 12 days ago
To fix the issue, we will follow the recommended best practices for avoiding code injection in GitHub Actions. Specifically, we will:
${{ github.event.workflow_run.head_branch }}
to an environment variable.This change will be applied to all instances where untrusted input is directly interpolated into shell commands.