Skip to main content

Generate daily CI dashboards for any QE repo on LooperPro (Karate, Playwright, Monocart)

Project description

looper-dashboard

Generate daily CI dashboards for any QE repository on the LooperPro CI platform.

Supports three test suite types:

Suite Report format Default history
karate karate-summary-json.txt + per-feature detail 14 days
playwright pw-summary-report.json 14 days
playwright-monocart monocart-report/index.html (zlib-compressed) 30 days

Requirements

Requirement Why
Python 3.11+ Runtime
mcp-cli (optional) Auto-refreshes LooperPro auth tokens
code-puppy (optional) Powers the AI failure analysis step

Authentication is read from ~/.mcp-cli/tokens.json or ~/.code_puppy/puppy.cfg automatically — no extra config needed.


Installation

pip install looper-dashboard

Or from the repo:

pip install ./looper-dashboard

Quick Start

1. Scaffold a config

# Creates daily_flows.yml in the current directory
looper-dashboard --init karate
looper-dashboard --init playwright
looper-dashboard --init playwright-monocart

Edit the generated file to add your LooperPro job names and flow names.

2. Generate the dashboard

looper-dashboard --suite karate --config daily_flows.yml --open
looper-dashboard --suite playwright --config daily_flows.yml --open
looper-dashboard --suite playwright-monocart --config daily_flows.yml --open

3. Override the repo SCM URL

looper-dashboard --suite karate \
  --config daily_flows.yml \
  --scm-url https://gecgithub01.walmart.com/my-org/my-repo.git \
  --open

daily_flows.yml format

Karate / Playwright

# SCM URL of the repository being monitored
scm_url: https://gecgithub01.walmart.com/my-org/my-repo.git

jobs:

  # LooperPro job name → list of flow names to monitor
  my-org/my-repo-tests:
    - my-flow-dev
    - my-flow-stage
    - my-flow-prod

  my-org/my-repo-health-checks:
    - health-dev
    - health-stage

Playwright-Monocart (with explicit job_ids)

Some repos' jobs cannot be discovered by SCM URL in LooperPro. Add a job_ids section with the UUIDs from the LooperPro UI:

scm_url: https://gecgithub01.walmart.com/my-org/my-repo.git

# Explicit job IDs (look these up in the LooperPro UI)
job_ids:
  my-monocart-job: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

jobs:

  my-monocart-job:
    - e2e-flow-dev
    - e2e-flow-stage

CLI Reference

looper-dashboard [OPTIONS]

Options:
  --suite SUITE           Test suite type: karate, playwright, playwright-monocart  [required]
  --config PATH           Path to daily_flows.yml  [required]
  --scm-url URL           Override scm_url from daily_flows.yml
  --output PATH           Output HTML file path (default varies by suite)
  --days N                Days of build history to fetch (default: 14 or 30)
  --open                  Auto-open dashboard in browser when done
  --no-ai                 Skip the AI failure analysis step
  --no-details            Skip fetching test summary details (faster, status only)
  --save-failures PATH    Path to save failures JSON
  --analysis-json PATH    Use a pre-computed AI analysis JSON instead of running live AI
  --init SUITE            Scaffold a starter daily_flows.yml and exit

  -h, --help              Show help and exit

AI Analysis

When --no-ai is not set, the orchestrator:

  1. Saves a *-failures.json summary of all failing flows
  2. Invokes code-puppy to classify each failure as one of:
    • service_regression — likely a code regression in the app
    • environment_issue — infra/network/auth failure
    • test_issue — stale selector or bad test data
    • flaky — intermittent, no clear pattern
  3. Regenerates the dashboard HTML with an AI analysis panel embedded

If code-puppy is not installed, the AI step is skipped gracefully.


Publishing a new version

1. Bump the version

Edit pyproject.toml:

[project]
version = "0.1.2"   # increment as needed

2. Build the wheel

cd looper-dashboard

# Clean any previous build artifacts
rm -rf dist/ build/ looper_dashboard.egg-info/

# Build (requires setuptools + wheel in the active Python env)
pip install setuptools wheel build   # one-time setup
python -m build --wheel --no-isolation

This produces dist/looper_dashboard-<version>-py3-none-any.whl.

3. Upload to PyPI

Prerequisite: You must be off the corporate VPN (or on a personal hotspot) for upload.pypi.org to be reachable.

pip install twine

# Upload only the new version's wheel (never re-upload an existing filename)
twine upload dist/looper_dashboard-<version>-py3-none-any.whl

When prompted:

Or pass credentials inline to skip the prompt entirely:

.venv/bin/twine upload \
  -u __token__ \
  -p pypi-<your-token-here> \
  dist/looper_dashboard-<version>-py3-none-any.whl \
  --verbose

Skip the prompt with ~/.pypirc

[pypi]
username = __token__
password = pypi-xxxxxxxxxxxxxxxxxxxx

Then just run:

twine upload dist/looper_dashboard-<version>-py3-none-any.whl

4. Verify

pip install --upgrade looper-dashboard
looper-dashboard --version

Or check pypi.org/project/looper-dashboard/ directly.

5. Reinstall locally from the new wheel

# In the project venv
.venv/bin/pip install --force-reinstall dist/looper_dashboard-<version>-py3-none-any.whl

Note: PyPI does not allow re-uploading a file with the same name as an existing release. Always increment the version in pyproject.toml before building.


Onboarding a new repo

  1. Create a daily_flows.yml for the target repo (use --init to scaffold)
  2. Add job and flow names (find them in LooperPro or via mcp-cli)
  3. Run looper-dashboard --suite <type> --config daily_flows.yml --open

No code changes required — the package is entirely configuration-driven.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

looper_dashboard-0.1.3-py3-none-any.whl (67.9 kB view details)

Uploaded Python 3

File details

Details for the file looper_dashboard-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for looper_dashboard-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 ecd09a975be945dbcc78630ef9a0f4ababe180baf153df082aa1af2a903e1ab2
MD5 00d5d608801a2b6b069c942b49165098
BLAKE2b-256 af238cacd0d9607f56dc40fca10304dc27b28fd4bc2630b48f2fe90e621f4c2b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page