Build apps with GitHub Actions
Every Goodspeed app ships with 10 GitHub Actions workflows covering CI, E2E, security, visual regression, i18n, and crash-free rate monitoring. Goodspeed generates GitHub Actions as a standard part of every app, so the output is a working codebase from day one, not a scaffold you have to finish yourself.
WHAT GETS GENERATED
Built into every GitHub Actions build
Every app Goodspeed generates with GitHub Actions includes these production-ready patterns, wired together from the first build.
| Item | Description | Strength |
|---|---|---|
| ci.yml: type check, tests, lint | Runs tsc --noEmit, Jest unit tests, and ESLint on every PR. Blocks merge if any step fails so type regressions are caught before EAS Build. | Quality |
| e2e.yml: Maestro end-to-end tests | Runs the Maestro E2E test suite against a development build on every PR targeting main, covering the core user flows defined in the .maestro/ directory. | Testing |
| security.yml: dependency audit | Runs npm audit and a Semgrep scan on PRs. Fails on high-severity vulnerabilities in the generated app's dependency tree. | Security |
| visual.yml: screenshot regression | Captures screenshots of key screens with Maestro and compares them to baselines stored in the repo. Flags visual regressions as PR checks. | Visual |
| crash-free.yml: crash-free rate gate | After production EAS Submit, a scheduled workflow queries Sentry for the crash-free session rate. Alerts the team if it drops below the configured threshold. | Monitoring |
| i18n.yml: translation completeness | Checks that every key in en.json is present in all declared locale files. PRs that add keys without translations fail before merge. | i18n |
Source: the Goodspeed generation pipeline · CI / CD
REAL GENERATED CODE
A snippet from a GitHub Actions app the studio shipped
This pattern comes straight out of the production groundwork every Goodspeed app is generated on. The studio generates GitHub Actions code like this for every app in the pipeline, not a hello-world sample you have to grow into a real app.
CI workflow
# .github/workflows/ci.yml name: CI on: push: { branches: [main] } pull_request: jobs: type-check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: '22' } - run: npm ci - run: npx tsc --noEmit test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: npm ci && npm test
Today's log
START WITH GITHUB ACTIONS