110 lines
3.8 KiB
YAML
110 lines
3.8 KiB
YAML
name: SSH copy screenshots
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
branches: ["feat/ssh-host-duplicate-menu"]
|
|
pull_request:
|
|
types: [opened, synchronize, reopened]
|
|
paths:
|
|
- "nebula_app/src/gpui_shell/ssh_settings/library.rs"
|
|
- "nebula_app/src/gpui_shell/ssh_settings/library/tests.rs"
|
|
- ".github/workflows/ssh-copy-screenshots.yml"
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
screenshot:
|
|
name: Windows UI screenshots
|
|
runs-on: windows-2022
|
|
timeout-minutes: 45
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
RUST_BACKTRACE: "1"
|
|
CARGO_TARGET_DIR: target/ci
|
|
RUST_TOOLCHAIN: "1.97.1"
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
persist-credentials: false
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
toolchain: "1.97.1"
|
|
- uses: ./.github/actions/rust-cache
|
|
with:
|
|
key: native
|
|
target: target/ci
|
|
legacy-key: windows
|
|
|
|
- name: Capture SSH copy states
|
|
shell: pwsh
|
|
run: |
|
|
$qa = Join-Path $env:RUNNER_TEMP 'ssh-copy-qa'
|
|
$config = Join-Path $qa 'config'
|
|
New-Item -ItemType Directory -Force -Path $qa, $config | Out-Null
|
|
@(
|
|
'language=en-US'
|
|
'theme=Nord'
|
|
'opacity=1'
|
|
'blur=off'
|
|
'restore_session=false'
|
|
'resume_ai=false'
|
|
'auto_check_updates=off'
|
|
) | Set-Content -Path (Join-Path $config 'pebrel_settings.txt') -Encoding ascii
|
|
|
|
$env:PEBREL_CONFIG_DIR = $config
|
|
$env:PEBREL_SSH_COPY_QA_DIR = $qa
|
|
$stdout = Join-Path $qa 'test.stdout.log'
|
|
$stderr = Join-Path $qa 'test.stderr.log'
|
|
$args = @(
|
|
'test', '-p', 'nebula', '--bin', 'pebrel',
|
|
'--features', 'gpui-test-support',
|
|
'native_ssh_copy_context_menu_preview',
|
|
'--', '--ignored', '--nocapture'
|
|
)
|
|
$cargo = Start-Process cargo -ArgumentList $args -PassThru -RedirectStandardOutput $stdout -RedirectStandardError $stderr
|
|
|
|
function Wait-ProbeFile([string]$path, [int]$seconds) {
|
|
$deadline = (Get-Date).AddSeconds($seconds)
|
|
while ((Get-Date) -lt $deadline) {
|
|
if (Test-Path $path) { return }
|
|
if ($cargo.HasExited) {
|
|
Get-Content $stdout -ErrorAction SilentlyContinue
|
|
Get-Content $stderr -ErrorAction SilentlyContinue
|
|
throw "Screenshot probe exited before $path was created."
|
|
}
|
|
Start-Sleep -Milliseconds 500
|
|
}
|
|
throw "Timed out waiting for $path."
|
|
}
|
|
|
|
$menuReady = Join-Path $qa 'menu-ready.json'
|
|
Wait-ProbeFile $menuReady 1500
|
|
$probePid = (Get-Content $menuReady -Raw | ConvertFrom-Json).pid
|
|
./scripts/ui_probe.ps1 -ProcId $probePid -RightClick '520,220' -Shot (Join-Path $qa '01-context-menu.png')
|
|
./scripts/ui_probe.ps1 -ProcId $probePid -Click '550,294'
|
|
Start-Sleep -Milliseconds 700
|
|
./scripts/ui_probe.ps1 -ProcId $probePid -Shot (Join-Path $qa '02-copy-editor.png')
|
|
New-Item -ItemType File -Path (Join-Path $qa 'capture-complete') | Out-Null
|
|
|
|
$cargo.WaitForExit()
|
|
Get-Content $stdout -ErrorAction SilentlyContinue
|
|
Get-Content $stderr -ErrorAction SilentlyContinue
|
|
if ($cargo.ExitCode -ne 0) {
|
|
throw "Native screenshot probe failed with exit code $($cargo.ExitCode)."
|
|
}
|
|
|
|
- name: Upload screenshots
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ssh-copy-screenshots
|
|
path: |
|
|
${{ runner.temp }}/ssh-copy-qa/*.png
|
|
${{ runner.temp }}/ssh-copy-qa/*.json
|
|
${{ runner.temp }}/ssh-copy-qa/*.log
|
|
if-no-files-found: warn
|
|
retention-days: 14
|
|
compression-level: 0
|