Go to: Actions → React Native CI/CD → Run workflow
| Build Type | Description | Platform |
|---|---|---|
dev |
Development Android APK | Android |
prod-apk |
Production Android APK | Android |
prod-aab |
Production Android AAB (for Play Store) | Android |
ios-dev |
Development iOS IPA | iOS |
ios-adhoc |
Ad-Hoc iOS IPA (for testing) | iOS |
ios-prod |
Production iOS IPA (for App Store) | iOS |
all |
All build types above | Both |
Note: Web, Docker, and Electron builds run automatically on push to main/master.
Triggered on push to main or master branch:
- ✅ Tests run first (lint, type-check, unit tests)
- ✅ Mobile Builds (Android & iOS)
- Development, Production APK/AAB/IPA
- Uploaded to Firebase App Distribution
- APK added to GitHub Release
- ✅ Web Build
- Static export for hosting
- Artifact uploaded to GitHub Actions
- ✅ Docker Build
- Multi-architecture (amd64, arm64)
- Published to GitHub Container Registry
- Published to Docker Hub (if configured)
- ✅ Electron Builds
- Windows: .exe, .msi
- macOS: .dmg, .zip (Universal)
- Linux: .AppImage, .deb, .rpm
- All added to GitHub Release
Add [skip ci] to commit message to skip all builds:
git commit -m "docs: update README [skip ci]"app-builds-android- Android APK/AAB filesapp-builds-ios- iOS IPA filesweb-build- Web dist folderelectron-windows- Windows installerselectron-macos- macOS packageselectron-linux- Linux packages
docker pull ghcr.io/resgrid/unit:latest
docker pull ghcr.io/resgrid/unit:7.{build-number}docker pull {username}/resgrid-unit:latestEach release includes:
- Android APK
- All Electron builds (Windows, macOS, Linux)
- Release notes from PR
- Android: Production APK → testers group
- iOS: Ad-Hoc IPA → testers group
Format: 7.{github.run_number}
Example: 7.123 where 123 is the GitHub Actions run number
Updated in:
- package.json (
versionandversionCode) - Docker image tags
- GitHub Release tag
- Electron app version
Use UNIT_* secrets from GitHub Secrets during build time.
Set UNIT_* variables at container runtime:
docker run \
-e UNIT_BASE_API_URL="https://api.resgrid.com" \
-e UNIT_APP_KEY="your-key" \
-e UNIT_MAPBOX_PUBKEY="your-key" \
ghcr.io/resgrid/unit:latestSee docker/README.md for complete Docker deployment guide.
- EXPO_TOKEN, FIREBASE_TOKEN
- UNIT_* environment variables
- Apple/Google signing credentials
- DOCKER_USERNAME
- DOCKER_PASSWORD
If not set, Docker images will only be pushed to GitHub Container Registry.
- Check GitHub Actions logs
- Look for error in specific build step
- Verify all required secrets are set
- Check GitHub Container Registry permissions
- Verify image was pushed:
docker pull ghcr.io/resgrid/unit:latest
- Ensure platform-specific dependencies installed
- Check
electron-builder.config.jsfor configuration
- Only created on Android build completion
- Updated by Electron Linux build
- Check build logs for errors
yarn web:build
# Output in dist/docker build -t resgrid-unit:test .
docker run -p 8080:80 \
-e UNIT_BASE_API_URL="https://api.resgrid.com" \
resgrid-unit:test
# Access at http://localhost:8080# macOS
yarn electron:build:mac
# Windows (on Windows)
yarn electron:build:win
# Linux
yarn electron:build:linux- Builds run in parallel where possible
- Caching enabled for yarn, EAS, and Docker
- Multi-stage Docker builds for smaller images
- Artifacts automatically cleaned up after 7 days
- Workflow file: .github/workflows/react-native-cicd.yml
- Full docs: docs/cicd-build-system.md
- Docker guide: docker/README.md