Email verification for CI — generates an isolated inbox per run. OTPs and magic links auto-extracted at Cloudflare's edge. No Docker, no SMTP, no signup.
- uses: zerodrop-dev/setup-zerodrop@v1
id: mail
- run: npx playwright test
env:
TEST_INBOX: ${{ steps.mail.outputs.inbox }}That's it. Every workflow run gets a fresh, isolated inbox. Parallel jobs never collide.
setup-zerodropgenerates a unique inbox — locally, no network request- Your app sends real verification emails to it
- ZeroDrop catches them at Cloudflare's edge — OTPs and magic links auto-extracted
- Your tests read them via any ZeroDrop SDK:
email.otp,email.magicLink
steps:
- uses: actions/checkout@v4
- uses: zerodrop-dev/setup-zerodrop@v1
id: mail
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npx playwright install --with-deps chromium
- run: npx playwright test
env:
TEST_INBOX: ${{ steps.mail.outputs.inbox }}Tag inboxes by app or job for easier debugging:
- uses: zerodrop-dev/setup-zerodrop@v1
id: mail
with:
prefix: myapp
# → myapp-swift-x7k29ab@zerodrop-sandbox.onlineThe action also exports env vars — no steps.<id>.outputs wiring needed:
- uses: zerodrop-dev/setup-zerodrop@v1
- run: npx playwright test
# $ZERODROP_INBOX and $ZERODROP_INBOX_NAME are already set- uses: zerodrop-dev/setup-zerodrop@v1
with:
api-key: ${{ secrets.ZERODROP_API_KEY }}
# Exports ZERODROP_API_KEY for your test stepsFree sandbox mode needs no key. Workspaces add custom domains and extended retention.
| Input | Required | Default | Description |
|---|---|---|---|
prefix |
No | — | Prefix for the inbox name (e.g. your app name) |
api-key |
No | — | Workspace API key. Omit for free sandbox mode. |
base-url |
No | https://zerodrop.dev |
Self-hosted instance URL |
| Output | Example |
|---|---|
inbox |
swift-x7k29ab@zerodrop-sandbox.online |
name |
swift-x7k29ab |
| Variable | Value |
|---|---|
ZERODROP_INBOX |
Full inbox address |
ZERODROP_INBOX_NAME |
Inbox name without domain |
ZERODROP_API_KEY |
Only if api-key input was provided |
Use any ZeroDrop SDK inside the test step:
import { ZeroDrop } from "zerodrop-client";
const mail = new ZeroDrop();
const inbox = process.env.TEST_INBOX!;
const email = await mail.waitForLatest(inbox, { timeout: 15000 });
email.otp // "847291" — auto-extracted, no regex
email.magicLink // "https://..." — auto-extractedSDKs: npm · PyPI · Go · RubyGems · Packagist · JitPack
Pin to a commit SHA instead of a tag:
- uses: zerodrop-dev/setup-zerodrop@<commit-sha> # v1The action is a single dependency-free dist/index.js — auditable in one read. Inbox generation is fully local; the action makes no network requests.
This action was previously published as zerodrop-dev/create-inbox. That path was retired by GitHub during an account migration. Update your workflows:
- - uses: zerodrop-dev/create-inbox@v1
+ - uses: zerodrop-dev/setup-zerodrop@v1Inputs and outputs are unchanged, plus new api-key and base-url inputs.
MIT — zerodrop.dev