Dummy Run
Free scan

You can install Dummy Run as a binary, as a container image or from Go source. Every release is signed, so check what you download before you run it. The first release isn’t published yet. For now, use Go install.

Binaries

Each release on GitHub Releases has two commands for Linux, macOS and Windows on amd64 and arm64.

CommandWhat it does
dummyrunPlays personas in a browser, sweeps pages for accessibility problems and reports coverage
dummyrun-otelSends run records to an OpenTelemetry backend. See the Grafana guide

The archives are dummyrun_<version>_<os>_<arch>.tar.gz, or .zip on Windows. Each holds the command, LICENSE, NOTICE and README.md. checksums.txt lists the SHA-256 of every archive and SBOM, and each archive has an SPDX SBOM next to it. The engine needs a browser, so read ENGINE.md for Chrome for Testing and Firefox. The container image already has both.

Verify a download

Set the version and download the archive, checksums.txt and checksums.txt.sigstore.json.

VERSION=0.1.0
cosign verify-blob checksums.txt \
  --bundle checksums.txt.sigstore.json \
  --certificate-identity "https://github.com/dummy-run/dummy-run/.github/workflows/release.yml@refs/tags/v${VERSION}" \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com
sha256sum --ignore-missing -c checksums.txt

The first command proves that the release workflow of this repository signed the checksums for that tag. The second proves that your archive is one of the files listed. On macOS use shasum -a 256 --ignore-missing -c checksums.txt.

The archives also carry SLSA build provenance from GitHub. With the GitHub CLI:

gh attestation verify dummyrun_${VERSION}_linux_amd64.tar.gz --repo dummy-run/dummy-run

This proves which workflow run, commit and tag built the file. The builds are reproducible. Building the same commit with the same Go version gives the same binaries, since the build uses -trimpath and takes its timestamp from the commit.

Container image

The image is ghcr.io/dummy-run/dummyrun. It is built for linux/amd64 and linux/arm64. Both have the dummyrun command and Chrome for Testing with its chromedriver. They also have Firefox, fonts for screenshots and tini as the init process. The versions of both browsers match the ones CI tests.

TagMeaning
0.1.0That release. Use this one for anything repeatable
0.1The newest patch release of that minor version
latestThe newest release that is not a pre-release

The image digest is the safest reference. docker buildx imagetools inspect ghcr.io/dummy-run/dummyrun:0.1.0 prints it.

docker run --rm ghcr.io/dummy-run/dummyrun:0.1.0 version
docker run --rm ghcr.io/dummy-run/dummyrun:0.1.0 a11y https://example.com

Verify the image

cosign verify ghcr.io/dummy-run/dummyrun:${VERSION} \
  --certificate-identity "https://github.com/dummy-run/dummy-run/.github/workflows/release.yml@refs/tags/v${VERSION}" \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com
gh attestation verify oci://ghcr.io/dummy-run/dummyrun:${VERSION} --repo dummy-run/dummy-run

The second command checks the SLSA provenance. The release also attaches an SBOM attestation, which gh attestation verify --predicate-type https://spdx.dev/Document/v2.3 checks. The SBOM describes the linux/amd64 image.

Run a persona in the container

DEPLOYMENT=my-deployment
docker run --rm \
  -v "$PWD/casts:/cast:ro" \
  -v "$PWD/results:/data" \
  -e DUMMYRUN_AZURE_ENDPOINT -e AZURE_CLIENT_ID -e AZURE_TENANT_ID -e AZURE_CLIENT_SECRET \
  ghcr.io/dummy-run/dummyrun:${VERSION} run \
  --cast /cast/dummyrun-dev --persona tom-developer --scenario find-the-quickstart \
  --target /cast/target.json --out /data/runs --browser firefox \
  --provider azure --model "$DEPLOYMENT" --region uksouth

What the image contains

ItemValue
Userdummyrun, uid and gid 10001, home /home/dummyrun. The image never runs as root
Entrypointtini -- dummyrun, so the arguments are a dummyrun command. With none it prints the help
Working directory/data, declared as a volume
CommandsOnly dummyrun. Use the binary release for dummyrun-otel
FontsLiberation, DejaVu and Noto Color Emoji. Pages in Chinese, Japanese or Korean show boxes in screenshots
HealthcheckNone. The container runs one command and exits

Environment variables

VariableSet by the imageMeaning
DUMMYRUN_CHROME/opt/chrome/chromeChrome for Testing
DUMMYRUN_CHROMEDRIVER/opt/chromedriver/chromedriverThe matching chromedriver
DUMMYRUN_FIREFOX/opt/firefox/firefoxFirefox
DUMMYRUN_NO_SANDBOX1Switches off the browsers’ own sandboxes, since the container is the sandbox. Unset it only where the container allows user namespaces
DUMMYRUN_AZURE_ENDPOINTThe Azure OpenAI endpoint, such as https://<resource>.openai.azure.com
AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRETA service principal for Azure. With a managed identity or workload identity, set only the variables that identity needs. PROVIDERS.md lists the sign-in routes
ANTHROPIC_API_KEY, GEMINI_API_KEYKeys for those providers, or the variable named by --api-key-env
GOOGLE_CLOUD_PROJECTThe Google Cloud project for the vertex provider

Pass secrets as environment variables from your platform’s secret store. Never bake them into an image or put them on a command line. A key is read when the run starts and never written to a run record.

Volumes and write access

PathUseAccess
/dataRun records, screenshots and reports. Pass --out /data/runs. Mount a volume here to keep themRead and write for uid 10001
/castA cast directory and target configuration. The image holds none, so mount yoursRead only is enough
/tmpBrowser profiles, removed when a run endsRead and write

With a bind mount, make the host directory writable for uid 10001, or pass --user with a uid that owns it. The container can run with --read-only when /tmp and /data are writable, for example with --tmpfs /tmp.

Hosted runs

You can also run the image as a job on a hosted platform, such as an Azure Container Apps job. Pass the command in the job’s arguments, for example a11y --json /data/report.json <url>. Mount storage at /data. On Azure, a managed identity saves you a secret, and DUMMYRUN_AZURE_ENDPOINT can be a plain variable. Give the job at least 2 vCPU and 4 GiB of memory, because Chrome needs room. Reference the image by digest, so the job only changes when you update it.

Go install

You’ll need Go 1.27.1 or later.

go install github.com/dummy-run/dummy-run/cmd/dummyrun@latest
go install github.com/dummy-run/dummy-run/integrations/grafana/exporter/cmd/dummyrun-otel@latest

A build made this way reports the version 0.1.0-dev for dummyrun and dev for dummyrun-otel. Use a release binary when you need to know which release you run.

This page is rendered from docs/INSTALL.md in the repository. Edit it there and the site follows.