ci: Windows smoke test on the windows runner (#19)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PPmy3tPq869XDW4njjVaKA
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
ea69cd770e
commit
0d86f19935
@@ -0,0 +1,120 @@
|
||||
# cinny-desktop #19: smoke-test the Windows app on the `windows` runner.
|
||||
#
|
||||
# Installs the NSIS bundle silently, starts the installed app with WebView2's
|
||||
# DevTools port open, and drives its real page with scripts/windows-smoke.mjs
|
||||
# (playwright-core over CDP): boots to the login screen, local server address,
|
||||
# microphone permission for the app and not for a foreign page, the call page's
|
||||
# own origin + isolation, the Credential Manager round trip. Features a build
|
||||
# doesn't have are reported "n/a".
|
||||
#
|
||||
# Run it from the Actions tab (workflow_dispatch):
|
||||
# - no `ref`: tests the published nightly installer (a couple of minutes);
|
||||
# - `ref` = a branch (e.g. a PR branch): builds that branch, then tests it.
|
||||
name: Windows smoke
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
ref:
|
||||
description: 'Branch to build and test (empty: test the published nightly)'
|
||||
required: false
|
||||
default: ''
|
||||
|
||||
env:
|
||||
GITEA_URL: ${{ github.server_url }}
|
||||
REPO: ${{ github.repository }}
|
||||
|
||||
jobs:
|
||||
smoke:
|
||||
runs-on: windows
|
||||
timeout-minutes: 90
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: .node-version
|
||||
|
||||
- name: Download the published nightly installer
|
||||
if: ${{ inputs.ref == '' }}
|
||||
shell: powershell
|
||||
run: |
|
||||
New-Item -ItemType Directory -Force -Path smoke-installer | Out-Null
|
||||
Invoke-WebRequest -Uri "$env:GITEA_URL/$env:REPO/releases/download/latest/LotusChat-x86_64-setup.exe" -OutFile smoke-installer\setup.exe
|
||||
Get-Item smoke-installer\setup.exe | Select-Object Name, Length
|
||||
|
||||
- name: Check out the branch to build
|
||||
if: ${{ inputs.ref != '' }}
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ inputs.ref }}
|
||||
path: build-src
|
||||
|
||||
- name: Build the branch
|
||||
if: ${{ inputs.ref != '' }}
|
||||
shell: powershell
|
||||
env:
|
||||
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
||||
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ''
|
||||
NODE_OPTIONS: '--max_old_space_size=4096'
|
||||
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
|
||||
CARGO_HTTP_MULTIPLEXING: 'false'
|
||||
CARGO_NET_RETRY: '5'
|
||||
run: |
|
||||
cd build-src
|
||||
git submodule update --init --depth=1
|
||||
cd cinny; npm ci; cd ..
|
||||
node scripts/sync-web-config.mjs
|
||||
npm ci
|
||||
$env:PATH = "$env:USERPROFILE\.cargo\bin;$env:PATH"
|
||||
$toolchain = Get-ChildItem "$env:USERPROFILE\.rustup\toolchains" -Directory -ErrorAction SilentlyContinue |
|
||||
Where-Object { $_.Name -match 'stable' } | Select-Object -First 1
|
||||
if ($toolchain) { $env:PATH = "$($toolchain.FullName)\bin;$env:PATH" }
|
||||
npm run tauri -- build --bundles nsis
|
||||
New-Item -ItemType Directory -Force -Path ..\smoke-installer | Out-Null
|
||||
$exe = Get-ChildItem src-tauri\target\release\bundle\nsis\*-setup.exe | Select-Object -First 1
|
||||
Copy-Item $exe.FullName ..\smoke-installer\setup.exe
|
||||
|
||||
- name: Install silently
|
||||
shell: powershell
|
||||
run: |
|
||||
Get-Process cinny -ErrorAction SilentlyContinue | Stop-Process -Force
|
||||
Start-Process smoke-installer\setup.exe -ArgumentList '/S' -Wait
|
||||
$app = Join-Path $env:LOCALAPPDATA 'Lotus Chat\cinny.exe'
|
||||
if (-not (Test-Path $app)) { Write-Error "not installed at $app"; exit 1 }
|
||||
(Get-Item $app).VersionInfo | Select-Object ProductVersion, FileVersion
|
||||
|
||||
- name: Start the app with the WebView2 DevTools port open
|
||||
shell: powershell
|
||||
run: |
|
||||
$env:WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS = '--remote-debugging-port=9222 --use-fake-device-for-media-stream'
|
||||
$app = Join-Path $env:LOCALAPPDATA 'Lotus Chat\cinny.exe'
|
||||
Start-Process $app
|
||||
Start-Sleep -Seconds 5
|
||||
Get-Process cinny | Select-Object Id, SessionId, MainWindowTitle
|
||||
|
||||
- name: Smoke test
|
||||
shell: powershell
|
||||
run: |
|
||||
New-Item -ItemType Directory -Force -Path smoke-deps | Out-Null
|
||||
Push-Location smoke-deps
|
||||
npm init -y | Out-Null
|
||||
npm install --no-audit --no-fund playwright-core@1 | Out-Null
|
||||
Pop-Location
|
||||
$env:NODE_PATH = (Resolve-Path smoke-deps\node_modules).Path
|
||||
Copy-Item scripts\windows-smoke.mjs smoke-deps\windows-smoke.mjs
|
||||
node smoke-deps\windows-smoke.mjs smoke-out
|
||||
|
||||
- name: Stop the app
|
||||
if: ${{ always() }}
|
||||
shell: powershell
|
||||
run: |
|
||||
Get-Process cinny -ErrorAction SilentlyContinue | Stop-Process -Force
|
||||
if (Test-Path smoke-out\results.json) { Get-Content smoke-out\results.json }
|
||||
|
||||
- name: Upload results and screenshots
|
||||
if: ${{ always() }}
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: windows-smoke
|
||||
path: smoke-out
|
||||
Reference in New Issue
Block a user