diff options
| -rw-r--r-- | .github/workflows/qatest.yaml | 172 | 
1 files changed, 172 insertions, 0 deletions
diff --git a/.github/workflows/qatest.yaml b/.github/workflows/qatest.yaml new file mode 100644 index 0000000000..8709ca0cd4 --- /dev/null +++ b/.github/workflows/qatest.yaml @@ -0,0 +1,172 @@ +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 }}"
 +          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 develop or Second_Life_X branches
 +    if: >
 +      github.event.workflow_run.conclusion == 'success' &&
 +      (
 +        startsWith(github.ref, 'refs/tags/Second_Life')
 +
 +        # For now this will only run on Second_Life_X tagged builds
 +        # || startsWith(github.event.workflow_run.head_branch, 'release')
 +        # || github.event.workflow_run.head_branch == 'develop'
 +      )
 +
 +    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
\ No newline at end of file  | 
