Files
timmy-config/.gitea/workflows/playwright-install.yml

181 lines
5.4 KiB
YAML

# playwright-install.yml — Install Playwright for visual smoke tests
# Refs: Issue #561, PR #558 (nexus_smoke_test.py)
#
# Installs Playwright and Chromium for visual smoke tests.
# Can be reused by other workflows that need browser automation.
name: Install Playwright
on:
# Run when called by other workflows
workflow_call:
inputs:
install_chromium:
description: 'Install Chromium browser'
required: false
default: true
type: boolean
install_deps:
description: 'Install system dependencies'
required: false
default: true
type: boolean
# Run on push to main when Playwright files change
push:
branches: [main]
paths:
- 'scripts/**/nexus_smoke_test.py'
- 'scripts/**/*playwright*'
- '.gitea/workflows/playwright-install.yml'
# Run on PRs that touch Playwright files
pull_request:
paths:
- 'scripts/**/nexus_smoke_test.py'
- 'scripts/**/*playwright*'
- '.gitea/workflows/playwright-install.yml'
jobs:
install-playwright:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: 'pip'
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
pip install playwright
- name: Install Playwright browsers
if: inputs.install_chromium
run: |
playwright install chromium
playwright install-deps chromium
- name: Install system dependencies
if: inputs.install_deps
run: |
sudo apt-get update
sudo apt-get install -y \
libnss3 \
libnspr4 \
libatk1.0-0 \
libatk-bridge2.0-0 \
libcups2 \
libdrm2 \
libxkbcommon0 \
libxcomposite1 \
libxdamage1 \
libxfixes3 \
libxrandr2 \
libgbm1 \
libpango-1.0-0 \
libcairo2 \
libasound2 \
libatspi2.0-0 \
libwayland-client0
- name: Verify Playwright installation
run: |
python -c "import playwright; print(f'Playwright version: {playwright.__version__}')"
python -c "from playwright.sync_api import sync_playwright; print('Playwright API imported successfully')"
playwright --version
- name: Test Chromium launch
if: inputs.install_chromium
run: |
python -c "
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto('data:text/html,<h1>Test</h1>')
print(f'Page title: {page.title()}')
browser.close()
print('Chromium launched and closed successfully')
"
- name: Cache Playwright browsers
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: ${{ runner.os }}-playwright-${{ hashFiles('**/playwright-install.yml') }}
restore-keys: |
${{ runner.os }}-playwright-
- name: Output installation info
run: |
echo "Playwright installation completed"
echo "Python version: $(python --version)"
echo "Playwright version: $(playwright --version)"
echo "Cache directory: ~/.cache/ms-playwright"
if [ -d ~/.cache/ms-playwright ]; then
echo "Cached browsers:"
ls -la ~/.cache/ms-playwright
fi
# Job to test Nexus smoke test with Playwright
test-nexus-smoke:
needs: install-playwright
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: 'pip'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install playwright Pillow
playwright install chromium
playwright install-deps chromium
- name: Test Nexus smoke test script
run: |
if [ -f "scripts/nexus_smoke_test.py" ]; then
echo "Testing nexus_smoke_test.py..."
python scripts/nexus_smoke_test.py --help
echo "Script is executable"
else
echo "nexus_smoke_test.py not found, skipping test"
fi
- name: Test Playwright integration
run: |
python -c "
import sys
sys.path.insert(0, 'scripts')
try:
# Try to import the smoke test module
from nexus_smoke_test import NexusSmokeTest
print('Successfully imported NexusSmokeTest')
# Test Playwright initialization
test = NexusSmokeTest()
print('NexusSmokeTest initialized successfully')
except ImportError as e:
print(f'Import error: {e}')
print('This is expected if nexus_smoke_test.py does not exist yet')
except Exception as e:
print(f'Error: {e}')
"