Skip to content
Dashboard
Menu Integrations · GitHub Action

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

yaml
- 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 .html file, 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 the SHIP_API_KEY env var) — deploys land on your account instead of anonymously. Required for name and 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 }}. Requires api-key on 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. Set true to 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 needs pull-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_URL env var works too).
engine
Optional. Report auto-detect instead of a manual path: auto probes 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; exclude wins, .git is 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 — true when 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.

PresetReport and detected paths
playwrightPlaywright HTML report — playwright-report/. Recipe
jacocoJaCoCo coverage — build/reports/jacoco/test/html/ (Gradle) or target/site/jacoco/ (Maven). Recipe
gradle-testGradle test report — build/reports/tests/test/. Recipe
coverage-pycoverage.py / pytest-cov — htmlcov/. Recipe
storybookStorybook static build — storybook-static/. Recipe
allureAllure 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