Run a PlainTake demo scenario in CI.
mode: check(default) records the scenario against your app and runs its assertions, without rendering. No FFmpeg, no Docker, about a minute: a gate for every pull request.mode: renderbuilds the release's Docker recipe on your runner and records and renders the full video, then uploads it as a workflow artifact.
on: pull_request
jobs:
demo:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- run: npm ci && (npm start &) && npx wait-on http://localhost:3000
- uses: plaintake/action@v1
with:
version: 1.24.0
scenario: demos/create-api-key.demo.ts
base-url: http://localhost:3000If an assertion fails, the job fails and the diagnostic bundle is uploaded as an artifact.
- uses: plaintake/action@v1
id: demo
with:
version: 1.24.0
mode: render
scenario: demos/create-api-key.demo.ts
base-url: http://localhost:3000
args: --camera zoom --subtitles hard # --camera zoom is Pro
license-key: ${{ secrets.PLAINTAKE_LICENSE_KEY }} # optional, Pro features
- run: echo "video at ${{ steps.demo.outputs.video }}"The container uses the host network, so localhost is your runner, not the container.
| Input | Default | |
|---|---|---|
version |
required | Exact release, e.g. 1.24.0. Pinned on purpose: a new release never changes a green build. |
mode |
check |
check or render. |
scenario |
required | *.demo.ts path, relative to the workspace. |
base-url |
Your running app. Set exactly one of base-url or fixture. |
|
fixture |
false |
Record against PlainTake's bundled fixture app. |
output |
plaintake-out |
Bundle directory. A failed run leaves its bundle at <output>.failed. |
args |
Extra flags for plaintake check / plaintake run. |
|
speech |
off |
render only: off, on or file. on bakes in the voices (~93 MB) and needs Pro. |
license-key |
render only: a Pro licence key, from a secret. Activated on every job, so each run increments the key's use count at Gumroad. No seat limit is enforced. | |
verify |
true |
render only: run plaintake verify on the bundle. |
upload |
auto |
auto (check: on failure; render: always), always, failure, never. |
artifact-name |
plaintake |
Outputs: bundle-dir and, after a render, video.
| check | render | |
|---|---|---|
ubuntu-latest, ubuntu-24.04-arm |
yes | yes |
macos-latest (Apple Silicon) |
yes | no (no Docker) |
| Windows, Intel macOS | no | no |
Self-hosted runners need Actions Runner 2.327.1 or later (the actions it uses run on Node 24).
PlainTake needs an FFmpeg built with libass, and those builds are GPL (libx264). PlainTake
never redistributes FFmpeg, so there is no published image. Instead the action downloads the
release's plaintake.Dockerfile, checks it against the release's SHA256SUMS, and builds it
on your runner. The recipe checks the tarballs it installs against the checksums stamped into it.
The first build for a version takes a few minutes; after that it comes from the GitHub Actions cache.
It doesn't use the runner's own FFmpeg because Ubuntu 24.04's FFmpeg 6.1.1 renders
--camera zoom as a pan without reporting any error. The recipe pins 8.0.1 and asserts the
behaviour at build time.
MIT — see LICENSE. PlainTake itself is licensed separately.