Sign inSign up

phenx/piwitests-server

By phenx

โ€ขUpdated about 9 hours ago

A permanent, self-hosted home for your Playwright test results โ€” clustering & AI diagnosis

Image
Developer tools
Monitoring & observability
0

7.0K

phenx/piwitests-server repository overview

โ Piwi Dashboard

Your Playwright results, kept and explained. CI throws away every report it makes. Piwi keeps them โ€” then groups the failures by root cause, scores the flaky tests, and finds the locator you should have used. Self-hosted, MIT, zero telemetry.

๐Ÿ“– Full documentationโ  ยท ๐ŸŽฎ Live demoโ  ยท ๐Ÿ’ฌ GitHubโ 

Disclaimer: Piwi Dashboard is not affiliated with, endorsed by, or connected to Microsoft Corporation.


โ Quick start

# Linux / macOS
mkdir -p .data && chown -R 1001:1001 .data # the container runs as non-root UID 1001
docker run -d --name piwi-dashboard -p 3000:3000 -v $(pwd)/.data:/app/.data phenx/piwitests-server:latest
# Windows (PowerShell)
docker run -d --name piwi-dashboard -p 3000:3000 -v ${PWD}/.data:/app/.data phenx/piwitests-server:latest

Open http://localhost:3000. The SQLite database and file storage are created automatically inside .data/.

Linux hosts: without the chown, Docker auto-creates .data owned by root and the container (non-root UID 1001) can't write to it. Docker Desktop on Windows and macOS handles this for you.

Then point the Playwright reporterโ  at it โ€” one npm install and four lines in playwright.config.ts, covered in the getting started guideโ .


โ Image details

PropertyValue
Base imagenode:24-alpine
Platformslinux/amd64, linux/arm64
Image size~400 MB
Run asNon-root (nodejs, UID/GID 1001)
Data/app/.data โ€” mount a volume here

/app/.data holds piwi.db (the SQLite database, skipped when PIWI_DATABASE_URL is set) and storage/ (HTML reports and trace files, skipped when S3 is configured). Mount it, or the container loses everything on restart.

โ Tags
TagDescription
latestLatest stable release
MAJOR.MINOR.PATCHOne exact release โ€” pin this in production
MAJOR.MINORLatest patch of that minor
MAJORLatest release of that major

The same multi-arch image is mirrored to the GitHub Container Registry as ghcr.io/piwitests/platform, which additionally carries an edge tag built from main (no release testing โ€” not for production).

Read Upgradingโ  before bumping a tag: migrations run automatically on startup and are forward-only, so rolling back means restoring a backup.


โ Configuration

Piwi runs with zero configuration โ€” set variables only to change a default. The full list, with defaults and which ones the Settings UI can override, is the configuration referenceโ ; the configuration generatorโ  builds a ready-to-paste .env, Compose, Kubernetes or systemd block in your browser.

The three worth knowing before you expose the container to a network:

VariableWhy
PIWI_AUTH_ENABLEDAuthentication is off by default. Set to true for anything beyond localhost โ€” see Authenticationโ .
PIWI_AUTH_SECRETSigns session cookies. Required when auth is enabled.
PIWI_SECRET_KEYEncrypts secrets stored in the database (AI keys, SCM tokens). Recommended in every deployment.

Generate a value for the latter two with node -e "console.log(require('node:crypto').randomBytes(32).toString('hex'))".

Beyond those: PIWI_DATABASE_URL switches to PostgreSQL, PIWI_STORAGE_TYPE=s3 plus the PIWI_S3_* variables switch artifact storage to any S3-compatible service, and PIWI_RETENTION_DAYS turns on nightly pruning of old runs.


โ Docker Compose

services:
  piwi-dashboard:
    image: phenx/piwitests-server:latest
    ports:
      - "3000:3000"
    volumes:
      - ./.data:/app/.data
    environment:
      PIWI_SECRET_KEY: "replace-with-a-32-byte-hex-string"
      PIWI_AUTH_ENABLED: "true"
      PIWI_AUTH_SECRET: "replace-with-a-different-32-byte-hex-string"
    restart: unless-stopped

PostgreSQL, S3 and MinIO variants are in the deployment guideโ , alongside Kubernetes manifests, reverse-proxy configuration and backups.


โ Troubleshooting

Volume permission error (Linux hosts only) โ€” mkdir -p .data && chown -R 1001:1001 .data, then recreate the container.

Container exits immediately โ€” docker logs piwi-dashboard.

Data not persisted after restart โ€” the -v volume mount is missing.

SQLite locked / concurrent write errors โ€” SQLite allows one writer at a time; set PIWI_DATABASE_URL to switch to PostgreSQL.

More, including port conflicts and reverse-proxy issues: deployment troubleshootingโ .


โ License

MIT โ€” source code on GitHubโ 

Tag summary

Content type

Image

Digest

sha256:b91a8f4e6โ€ฆ

Size

89.6 MB

Last updated

about 9 hours ago

docker pull phenx/piwitests-server