A working template for building GitHub Marketplace actions on the @effected Effect v4 kit, bundled by @savvy-web/github-action-builder.
The shipped action is a small, fully-tested demo — it greets, appends a job summary panel, publishes typed outputs, and reports its duration from the post phase. Its point is the structure: schema-mirrored inputs and outputs, one module per step with a decided failure posture, a single rendering surface, cross-phase state that provably survives the runner boundary, committed bundles with a freshness gate, and a test suite that asserts on the log stream and on the repo's own structure.
Use this repository as a template, then:
pnpm install
pnpm test
pnpm buildRead docs/01-getting-started.md for the skeleton tour and the growth path, docs/02-github-app-auth.md when your action needs GitHub App credentials, and docs/03-bundler-notes.md before touching the bundler options.
- uses: savvy-web/github-action-template@main
id: greet
with:
name: world
emphatic: "true"
- run: |
echo "${{ steps.greet.outputs.greeting }}"
echo '${{ steps.greet.outputs.result }}' | jq -r .summaryWrittenOnce you have made this template your own, that uses: becomes your repository and your release tag.
Inputs: name, emphatic, write-summary, dry-run. Outputs: greeting (a scalar) and result (a structured JSON payload). All declared — with their defaults — in action.yml, which the code mirrors under test.
The result payload is a published contract, not an ad-hoc blob: it is generated from an Effect Schema into a committed, versioned JSON Schema document under schemas/, and a drift test fails the build if the two ever disagree. See docs/04-output-schema.md.
Claude Code users get the effected plugin enabled by default; its skills carry the kit's API depth and the action-building playbook. CLAUDE.md, src/CLAUDE.md and __test__/CLAUDE.md document this repo's own conventions.