Repository navigation
Publishing Docker Images
Index · Publishing to PyPI · Publishing to Artifactory
Three images are published to GitHub Container Registry (GHCR) via GitHub Actions, from one matrix job in docker-publish.yml: qasight-runner (Dockerfile.qasight-runner, the CLI for running cycles in CI, and the default image stages run in with TESTO_RUNNER=container), qasight-server (Dockerfile.qasight-server, the API with the web UI built in, used by the Team Server) and qasight-runner-service (Dockerfile.qasight-runner-service, the service that starts each stage in a throwaway container, Runs in throwaway containers). Images are built for linux/amd64 and linux/arm64 on the floating python:3.14-slim-trixie base (Debian 13; 3.15 waits for BehaveX's minify-html to ship wheels for it), so each build picks up current Debian security fixes, and are scanned with Trivy before they are pushed. Dependabot's docker ecosystem opens a PR when a newer base tag is out.
-
Registry:
ghcr.io -
Images:
ghcr.io/arieleven/qasight-runner,ghcr.io/arieleven/qasight-server,ghcr.io/arieleven/qasight-runner-service -
Auth: Uses
GITHUB_TOKEN(automatic for public repos, no additional secrets needed)
- Create a GitHub Release with a semver tag (e.g.
v1.0.0). - The
docker-publish.ymlworkflow triggers automatically:- Checks the tag matches the
pyproject.tomlversion. - For each image, scans its Dockerfile with Trivy for configuration issues.
- Builds the
linux/amd64image locally, scans it with Trivy for fixable critical vulnerabilities and checks it starts (qasight run --helpfor the runner; the API imports and the UI build is in place for the server). Nothing is pushed if either fails. - Builds the multi-arch image (
linux/amd64,linux/arm64) via Docker Buildx and pushes it to GHCR, tagged with semver (1.0.0), major.minor (1.0), major (1), commit SHA, andlatest.
- Checks the tag matches the
- To rebuild the image for an existing release (for example after a base-image fix), run the workflow by hand from the Actions tab with the tag as input. It builds the selected branch, so use it only when that branch carries the same package version.
- The first push of each image creates a private package (
qasight-serveris new as of 2026-10-22,qasight-runner-serviceas of the release after 1.2.0). Make it public once under the package's settings (Package settings → Danger Zone → Change visibility).
| Tag pattern | Example | When applied |
|---|---|---|
| Full semver | 1.0.0 |
Every release |
| Major.minor | 1.0 |
Every release (floating) |
| Major | 1 |
Every release (floating) |
| Commit SHA | 03043a2b |
Every release |
latest |
latest |
Default branch releases only |
docker pull ghcr.io/arieleven/qasight-runner:latest
docker run --rm ghcr.io/arieleven/qasight-runner:latest run --help# GitHub Actions
- name: Run tests
run: |
docker run --rm \
-v ${{ github.workspace }}:/workspace \
ghcr.io/arieleven/qasight-runner:1.0.0 \
run --cycle smoke --ci
# docker-compose.yml (override)
services:
runner:
image: ghcr.io/arieleven/qasight-runner:1.0.0-
Trivy blocks the build: Fix the reported vulnerabilities or update the base image. Critical and high severity issues block the Dockerfile scan; fixable critical issues block the image scan. The v1.1.1 release run failed this way on 2026-10-19 because the base was pinned to
python:3.11.9-slim-bookworm, after the vulnerable image had already been pushed; the scan now runs before the push. -
Multi-arch build fails: Ensure QEMU is set up correctly (the workflow handles this with
docker/setup-qemu-action). -
Image pull fails: For private repos, authenticate with
docker login ghcr.io -u <username> --password-stdinusing a PAT withread:packagesscope.
- Publishing to PyPI — Python package publishing
- CI-CD Pipeline Setup — CI workflow overview
- Workflow file:
.github/workflows/docker-publish.yml - Dockerfile:
Dockerfile.qasight-runner
Generated from docs/Processes & Guides/Publishing Docker Images.md. Edit it there; changes made in the wiki are overwritten.
Architecture
CLI Commands
Processes & Guides
- CI-CD Pipeline Setup
- E2E Harness Operations Guide
- GitLab Pages Demo
- Publishing Docker Images
- Publishing to Artifactory
- Publishing to PyPI
- Setup Snippets
- Shared Resource Pools
- Team Server
Prompts & Snippets
Roadmap & Strategy
- Feature Gaps and Quick Wins - 2026-10-31
- New User Journey Audit - 2026-11-01
- Paid Features to Offer Free - 2026-10-31
- Product Roadmap
Specs & ADRs
- Affected Test Selection - 2026-10-30
- Alerts Where Developers Look - 2026-10-22
- Architecture Consolidation - 2026-10-06
- Architecture Review - 2026-10-31
- BehaveX Reports - 2026-10-21
- Better Flaky Signal - 2026-11-01
- Command Adapter and JUnit Import - 2026-09-25
- Config JSON Schema - 2026-10-22
- Crash Detection - 2026-10-31
- Delta Comparison Policy
- Docs Site - 2026-10-19
- Docs Vault and Wiki Sync - 2026-10-07
- Easy Setup - 2026-11-01
- Engine Fixes - 2026-11-01
- Engineering Health Review - 2026-10-31
- Exporting Results - 2026-11-01
- Flaky Test Issues - 2026-11-01
- Flaky Test Quarantine - 2026-10-22
- Free Copies of Paid Features - 2026-11-01
- GitHub Action PR Comment - 2026-10-19
- Human-Run Resource Provider - 2026-10-30
- Importer and Integration Bug Hunt - 2026-10-31
- Ingest and Team Server - 2026-10-22
- Interview Readiness Fixes - 2026-10-07
- Library Packaging
- Lifecycle Fixes - 2026-11-02
- MCP Server - 2026-11-01
- New User Journey Automation - 2026-11-01
- Open Source Features - 2026-10-19
- OpenTelemetry Export - 2026-10-30
- Phase 3 Delta Comparison Engine Plan
- Phase 3 Unified Dashboard Plan
- Phase 4 BYOK and Failure Analysis
- Phase 5 UI Redesign - Cycles-First Navigation
- Playwright Adapter - 2026-10-19
- Playwright JSON Import - 2026-10-22
- Plugin API - 2026-10-19
- Product Roadmap Work - 2026-10-25
- Product to Ten - 2026-10-25
- Project Health - 2026-10-26
- QASight Logo - 2026-11-05
- Qualflare Follow-ups - 2026-10-26
- Quarantine From the UI - 2026-11-01
- Specs & ADRs
- Rename to QASight - 2026-11-04
- Repository Pattern - Database-Agnostic Refactor
- Resource Lifecycle Hooks - 2026-10-26
- Resource Pools and Leases - 2026-10-26
- Run Deletion and Stop - 2026-11-02
- Runner Coverage - 2026-10-26
- Scale Runs and Stages - 2026-10-24
- Security and Install Review - 2026-10-31
- Switchable Team Features - 2026-10-24
- Test Delivery Metrics - 2026-11-02
- Test Labels, Environments and Releases - 2026-11-02
- Test Source in AI Summaries - 2026-11-01
- Throwaway Stage Containers - 2026-10-24
- Tidy Cards and Demo Examples - 2026-11-05
- UI Design Review - 2026-10-31
- UI Polish - 2026-11-08
- UI Restyle - 2026-10-19
- UI Review Fixes - 2026-11-01
Testing Workflows
Vault