diff options
| author | Andrey Lihatskiy <alihatskiy@productengine.com> | 2025-05-28 21:11:23 +0300 |
|---|---|---|
| committer | Andrey Lihatskiy <alihatskiy@productengine.com> | 2025-05-28 21:11:23 +0300 |
| commit | d3bd73ab923b8010bb395505b95bcc38b661162e (patch) | |
| tree | 56b5fadba1f247fc42b6d3a3062154d61a43abac /.github/workflows | |
| parent | 3af711e6da9d0004ce1b565bfadee634f087b89a (diff) | |
| parent | de8275b14b30bf754cdba1da867cb2e6c2783639 (diff) | |
Merge branch 'main' into marchcat/slua-editor-merge
# Conflicts:
# .github/workflows/build.yaml
# indra/newview/llmeshrepository.cpp
# indra/newview/llmeshrepository.h
# indra/newview/llpreviewscript.h
Diffstat (limited to '.github/workflows')
| -rw-r--r-- | .github/workflows/.gitattributes | 1 | ||||
| -rw-r--r-- | .github/workflows/build.yaml | 4 | ||||
| -rw-r--r-- | .github/workflows/cla.yaml | 2 | ||||
| -rw-r--r-- | .github/workflows/qatest.yaml | 174 | ||||
| -rw-r--r-- | .github/workflows/tag-release.yaml | 7 |
5 files changed, 184 insertions, 4 deletions
diff --git a/.github/workflows/.gitattributes b/.github/workflows/.gitattributes new file mode 100644 index 0000000000..6dc1cca42a --- /dev/null +++ b/.github/workflows/.gitattributes @@ -0,0 +1 @@ +qatest.yaml -text eol=crlf diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 60ad7e8fe5..50b0cf02bc 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -42,8 +42,8 @@ jobs: needs: setup strategy: matrix: - runner: [windows-large, macos-15-xlarge] - configuration: ${{ fromJSON(needs.setup.outputs.configurations) }} + runner: ${{ fromJson((github.ref_type == 'tag' && startsWith(github.ref, 'refs/tags/Second_Life')) && '["windows-large","macos-15-xlarge"]' || '["windows-latest","macos-15"]') }} + configuration: ${{ fromJson(needs.setup.outputs.configurations) }} runs-on: ${{ matrix.runner }} outputs: viewer_channel: ${{ steps.build.outputs.viewer_channel }} diff --git a/.github/workflows/cla.yaml b/.github/workflows/cla.yaml index 013adc9ca8..7866f943b5 100644 --- a/.github/workflows/cla.yaml +++ b/.github/workflows/cla.yaml @@ -23,4 +23,4 @@ jobs: path-to-signatures: signatures.json remote-organization-name: secondlife remote-repository-name: cla-signatures - allowlist: callum@mbp.localdomain + allowlist: callum@mbp.localdomain,rye@lindenlab.com diff --git a/.github/workflows/qatest.yaml b/.github/workflows/qatest.yaml new file mode 100644 index 0000000000..4892cfaae3 --- /dev/null +++ b/.github/workflows/qatest.yaml @@ -0,0 +1,174 @@ +name: Run QA Test # Runs automated tests on a self-hosted QA machine
+permissions:
+ contents: read
+ #pull-requests: write # maybe need to re-add this later
+
+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
+ env:
+ HEAD_BRANCH: ${{ github.event.workflow_run.head_branch }}
+ HEAD_COMMIT_MSG: ${{ github.event.workflow_run.head_commit.message }}
+ run: |
+ echo "Workflow Conclusion: ${{ github.event.workflow_run.conclusion }}"
+ echo "Workflow Head Branch: $HEAD_BRANCH"
+ echo "Workflow Run ID: ${{ github.event.workflow_run.id }}"
+ echo "Head Commit Message: $HEAD_COMMIT_MSG"
+ 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:
+ 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
diff --git a/.github/workflows/tag-release.yaml b/.github/workflows/tag-release.yaml index 65d1d43a83..24ee2de794 100644 --- a/.github/workflows/tag-release.yaml +++ b/.github/workflows/tag-release.yaml @@ -37,7 +37,12 @@ jobs: - name: Update Tag uses: actions/github-script@v7.0.1 with: - github-token: ${{ secrets.GITHUB_TOKEN }} + # use a real access token instead of GITHUB_TOKEN default. + # required so that the results of this tag creation can trigger the build workflow + # https://stackoverflow.com/a/71372524 + # https://docs.github.com/en/actions/using-workflows/triggering-a-workflow#triggering-a-workflow-from-a-workflow + # this token will need to be renewed anually in January + github-token: ${{ secrets.LL_TAG_RELEASE_TOKEN }} script: | github.rest.git.createRef({ owner: context.repo.owner, |
