Skip to content

Build & Deploy

Build & Deploy #32

Workflow file for this run

# 🔗 Links:
# Source file: https://github.com/rootstrap/react-native-template/blob/master/.github/workflows/eas-build.yml
# EAS Build docs: https://docs.expo.dev/eas-update/github-actions/
# ✍️ Description:
# This workflow is used to trigger a build on EAS.
# Can be triggered manually from the actions tab.
# This action accepts those inputs:
# `environment`, which is used to generate a build for a specific environment (development, staging, QA, production). We use staging by default.
# `android`, true by default, set to true if you don't want to trigger build for Android.
# `ios`, false by default, set to true if you want to trigger build for IOS.
# Before triggering the build, we run a pre-build script to generate the necessary native folders based on the APP_ENV.
# Based on the ANDROID and IOS inputs, we trigger the build for the corresponding platform with the corresponding flags.
# 🚨 GITHUB SECRETS REQUIRED:
# - EXPO_TOKEN: Expo token to authenticate with EAS
# - You can get it from https://expo.dev/settings/access-tokens
name: 'EAS Build (Android & IOS) (EAS)'
on:
workflow_dispatch:
inputs:
environment:
type: choice
description: 'Environment'
required: true
default: 'staging'
options:
- development
- staging
- qa
- production
new-version:
type: string
description: 'New version (e.g. 1.0.0)'
android:
type: boolean
description: 'Build for Android'
required: true
default: true
ios:
type: boolean
description: 'Build for iOS'
required: true
default: true
jobs:
Build:
runs-on: ${{ matrix.os }}
environment: app-${{ inputs.environment }}
strategy:
fail-fast: false
matrix:
platform: [ios, android]
include:
- platform: ios
os: macos-latest
- platform: android
os: ubuntu-latest
steps:
- name: Check for EXPO_TOKEN
run: |
if [ -z "${{ secrets.EXPO_TOKEN }}" ]; then
echo "You must provide an EXPO_TOKEN secret linked to this project's Expo account in this repo's secrets. Learn more: https://docs.expo.dev/eas-update/github-actions"
exit 1
fi
- name: 📦 Setup Expo and EAS
uses: expo/expo-github-action@v8
with:
eas-version: latest
token: ${{ secrets.EXPO_TOKEN }}
- name: 📦 Checkout project repo
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: 📦 Setup Node + PNPM + install deps
uses: ./.github/actions/setup-node-pnpm-install
- name: Create environment file
run: echo "${{ secrets.ENVIRONMENT_FILE }}" > .env.${{ inputs.environment }}
- name: Update version in package.json
if: inputs.new-version
run: |
pnpm version ${{ inputs.new-version }} -m "chore: set app version to ${{ inputs.new-version }}"
# - name: ⚙️ Run Prebuild
# run: pnpm prebuild:${{ inputs.environment }}
# - name: 📱 Run Build for ${{ matrix.platform }}
# run: pnpm build:${{ inputs.environment }}:${{ matrix.platform }} --non-interactive --no-wait --message "Build ${{ inputs.environment }} for ${{ matrix.platform }}" --local
- name: 📦 Push changes to repository
if: inputs.new-version
run: |
git push
- name: Upload ${{ matrix.platform }} Build
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.platform }}-build-${{ inputs.environment }}
path: |
*.apk
*.aab
*.ipa