Reusable GitHub Actions used across Variable Land projects.
| Action | Description |
|---|---|
monorepo-preview-release |
Publish a per-PR preview release of changed packages in a pnpm monorepo to npm (OIDC-first, with optional NPM_TOKEN fallback) and notify vland-bot so it can comment on the PR. |
railway-redeploy |
Trigger a redeploy of a Railway service via the Railway GraphQL API. Resolves the target service from project_id + environment + service_name, so no service ID lookup is needed. |
setup-pnpm |
Install pnpm, upgrade npm, cache the pnpm store, and install dependencies. |
setup-bun |
Install Bun pinned to the version in .bun-version. |
setup-pnpm-bun |
Combined setup-pnpm + setup-bun for workflows that need both runtimes. |
Pin actions to a tag or commit SHA when you need stability:
uses: variableland/gh-actions/actions/<action-name>@<tag-or-sha>@main tracks the latest changes on the default branch.
Every Node-based action in this monorepo follows the same shape:
action.ymldeclaresruns.using: node24andmain: dist/index.js.- Source lives in
src/. The bundled output (dist/index.js) is committed to the repo and runs directly on the GitHub Actions runner โ no Docker build, no install at runtime. mise.tomldeclares abuildtask that runsncc build src/index.ts -o dist. Mise's incrementalsources/outputstracking skips the rebuild when nothing has changed.- The lefthook
pre-pushhook runsmise run buildfor any push that touchesactions/*/src/**and blocks the push ifdist/is out of sync withsrc/. - The CI workflow
Check actions dist syncenforces the same invariant on every PR and is required by branch protection. Anyone who bypasses the local hook still gets caught here.
To add a new Node action, copy the structure of monorepo-preview-release or railway-redeploy, adjust inputs and logic, and run mise run build (or just git push โ the hook will do it for you and tell you to commit the dist change).