plugins/smedjen/skills/expo-cicd/SKILL.md
CI/CD with EAS, GitHub Actions, app distribution, and automated build/deploy pipelines for Expo.
npx skillsauth add hjemmesidekongen/ai expo-cicdInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
EAS + GitHub Actions is the standard Expo CI/CD stack. The split is clear: GitHub Actions handles the workflow orchestration; EAS handles the actual build and update infrastructure.
Three workflows cover the full lifecycle:
PR workflow — triggers on pull_request. Runs lint, type-check, and tests. Triggers a preview EAS Build (internal distribution). Posts build URL or QR as a PR comment via expo-github-action.
Main branch workflow — triggers on push to main. Runs tests, then publishes an OTA update to the staging channel via eas update. Optionally triggers a production build if native changes are detected.
Release workflow — triggers on version tag or manual dispatch. Runs a production EAS Build and submits to stores via eas submit.
EXPO_TOKEN goes in GitHub Secrets — never in YAML. The token is account-scoped and rotatable.node_modules keyed on package-lock.json hash. EAS also has its own remote build cache — enable it in eas.json with "cache": { "disabled": false }."buildArtifactPaths" and point workingDirectory in eas.json profiles to the app package.git diff --name-only HEAD~1 HEAD piped through a path filter — only trigger full native builds when ios/, android/, package.json, or app.json change.eas update) are fast (under 2 min). Native builds take 10-20 min. Avoid triggering native builds unnecessarily.Run unit tests before any build step. For E2E: Maestro runs on real devices via EAS; Detox runs on simulators and is harder to configure in CI. Prefer Maestro for Expo E2E in CI.
--profile preview with "distribution": "internal" — no store review.--platform ios after a production iOS build.--platform android submits an AAB.Expo can auto-increment buildNumber (iOS) and versionCode (Android) in EAS by setting "autoIncrement": true in the eas.json build profile. Keep version in app.json as the human-readable semver; let EAS manage the store integers.
See references/process.md for full workflow YAML examples, EAS config snippets, monorepo CI setup, secrets management, Detox/Maestro CI setup, and anti-patterns.
development
Creates a brand from scratch through market research and interactive sparring. Runs competitive research via Perplexity, then guides the user through positioning, audience, voice, values, and content pillars. Produces the full brand guideline set at .ai/brand/{name}/. Use when building a new brand, defining brand strategy for a product, or when /våbenskjold:create is invoked.
testing
Loads brand guidelines from .ai/brand/{name}/ and makes them available to the current context. Progressive disclosure: L1 confirms brand exists, L2 loads summary, L3 loads specific files on demand. Use when a downstream skill or user needs brand context, or when /våbenskjold:apply is invoked.
documentation
Guided reinvention of an existing brand guideline. Loads current brand from .ai/brand/{name}/, identifies what to keep vs change, and walks the user through targeted evolution. Preserves brand equity while updating positioning, voice, or values. Use when refreshing a brand or when /våbenskjold:evolve is invoked.
development
Codifies an existing brand from materials, samples, and references. Analyzes provided content to extract voice patterns, values, and positioning. Produces the same guideline format as brand-strategy. Use when a brand already exists but isn't documented, or when /våbenskjold:audit is invoked.