Post a deploy marker to Litmus after a successful deploy. The dashboard renders markers as vertical dashed lines on the behavioral-rate charts, so a shift in abandon, edit, or regen rate lines up with the exact release that caused it.
- uses: trylitmus/deploy-marker-action@v1
continue-on-error: true
env:
LITMUS_AUTH_TOKEN: ${{ secrets.LITMUS_AUTH_TOKEN }}
LITMUS_SERVICE: my-service
with:
environment: ${{ github.ref_name }}- In the Litmus dashboard, create a secret key (
ltm_sk_live_*) with thedeploys:writescope. - Add it to your repo as the
LITMUS_AUTH_TOKENsecret. - Drop the action into your deploy workflow after the deploy step succeeds.
Your SDK key is a publishable key (ltm_pk_*) and cannot create markers. This is intentional — publishable keys are shipped in bundles.
| Variable | Required | Description |
|---|---|---|
LITMUS_AUTH_TOKEN |
yes | Litmus secret key (ltm_sk_*) with deploys:write scope |
LITMUS_SERVICE |
yes | Service name, written to metadata.service so multiple services on one project can be distinguished |
LITMUS_URL |
no | Override the ingest URL. Defaults to https://ingest.trylitmus.app |
| Input | Required | Default | Description |
|---|---|---|---|
environment |
no | production |
Deploy environment |
version |
no | github.sha[:7] |
Version string shown on the chart |
description |
no | <service> <environment> deploy |
Human-readable label |
One repo, two services sharing a Litmus project — tell them apart via LITMUS_SERVICE:
- uses: trylitmus/deploy-marker-action@v1
continue-on-error: true
env:
LITMUS_AUTH_TOKEN: ${{ secrets.LITMUS_AUTH_TOKEN }}
LITMUS_SERVICE: api
with:
environment: ${{ github.ref_name }}
- uses: trylitmus/deploy-marker-action@v1
continue-on-error: true
env:
LITMUS_AUTH_TOKEN: ${{ secrets.LITMUS_AUTH_TOKEN }}
LITMUS_SERVICE: worker
with:
environment: ${{ github.ref_name }}- Skips quietly (warning annotation, exit 0) when
LITMUS_AUTH_TOKENis empty — safe to merge before the secret is wired up. curl --connect-timeout 10 --max-time 30 --retry 2so a flaky endpoint never blocks your deploy.- Pair with
continue-on-error: trueif you want marker failures to never fail the job. - Payload built with
jq --argjsonsometadata.run_numberis a real JSON number, and commit messages / refs can't inject into the body.
@v1tracks the latestv1.x.xrelease (recommended)@v1.0.0pins to an exact release@maintracks the latest commit (not recommended for prod)
MIT