Integrations
GitHub Action
bitgate/ship-page-action@v1 is the official action — it wraps POST /deploy and adds the CI plumbing: auto-detecting common test/build reports, zipping directories, chunked uploads for huge drops, and an optional sticky PR comment with the live URL.
Usage
- uses: bitgate/ship-page-action@v1
id: deploy
with:
path: dist
- run: echo "Live at ${{ steps.deploy.outputs.url }}"That’s a complete deploy step — no credentials needed for anonymous drops.
Inputs & outputs
path- What to deploy: a single
.htmlfile, a.zip, or a directory (zipped for you). api-key- Optional. An
sp_…key from the dashboard (store it as a repo secret; falls back to theSHIP_API_KEYenv var) — deploys land on your account instead of anonymously. Required fornameand for drops above the per-request file cap (chunked upload, needs an active subscription). name- Optional. Named drop — the URL stays stable across runs and each run replaces the content, e.g.
pr-${{ github.event.number }}. Requiresapi-keyon a paid plan. ttl- Optional. Drop lifetime in seconds (min 60). Anonymous drops default to 30 days, signed-in free accounts to 90; paid accounts can set any value or keep drops forever.
comment- Optional, default
false. Settrueto post one PR comment with the live URL and update that same comment on re-runs. github-token- Optional, default
${{ github.token }}. Token used for the PR comment; the workflow needspull-requests: write. base-url- Optional. Override the ship.page endpoint for staging or self-hosted setups (defaults to https://ship.page; the
SHIP_PAGE_BASE_URLenv var works too). engine- Optional. Report auto-detect instead of a manual
path:autoprobes every known report (1 match deploys directly, multiple get a multi-report shell), or name one —playwright,jacoco,gradle-test,coverage-py,storybook,allure. include/exclude- Optional. Newline-separated glob filters for directory/zip deploys;
excludewins,.gitis always skipped. working-directory- Optional. Scope detection and paths to a subdirectory — for monorepos.
root-file- Optional. Entry file the URL should open when it isn’t
index.html— a tiny redirect index is injected. url- Output — the live drop URL, straight from the deploy response.
slug- Output — the drop’s slug, if you need to construct paths or delete it later.
expires_at- Output — ISO timestamp of expiry, empty when the drop never expires.
replaced- Output —
truewhen a named-drop redeploy replaced existing content.
Engine presets
engine tells the action where your tool writes its report, so you don’t pass path at all. auto (or leaving both empty) probes every preset below — one match deploys directly, two or more are bundled behind a single URL with a built-in report switcher. A comma list like playwright,jacoco forces exactly that set.
| Preset | Report and detected paths |
|---|---|
playwright | Playwright HTML report — playwright-report/. Recipe |
jacoco | JaCoCo coverage — build/reports/jacoco/test/html/ (Gradle) or target/site/jacoco/ (Maven). Recipe |
gradle-test | Gradle test report — build/reports/tests/test/. Recipe |
coverage-py | coverage.py / pytest-cov — htmlcov/. Recipe |
storybook | Storybook static build — storybook-static/. Recipe |
allure | Allure report — allure-report/. Recipe |
Every preset serves the report’s index.html. Reports without a fixed output path (self-contained pytest-html, go cover, Robot Framework, Lighthouse) take an explicit path — add root-file when the entry file isn’t index.html.
Static-site builds work the same way — build first, then point path at the output folder: Vite, Astro and Vue CLI (dist/), Hugo (public/), Docusaurus, Create React App and SvelteKit (build/), MkDocs (site/), Next.js static export (out/), Nuxt (.output/public/) and Jekyll (_site/). No build at all? Upload a zip or a single HTML file.
Things people build with it
Visual-diff reports on every PR, Storybook builds for designers, coverage reports linked from the job summary, lighthouse runs — anything that produces HTML and dies in an artifacts tab otherwise. Add name for a stable per-PR URL and the action posts it as a PR comment for you. Full recipes in Test & build reports in CI; prefer no action at all? See CI with plain curl. Sharing a run with someone who has no GitHub account? How to share a GitHub Actions artifact without a login covers why artifact links fail and the two-line fix.
Last updated Jun 12, 2026