name: Build & Deploy iOS on: push: branches: [ main, develop ] pull_request: branches: [ main, develop ] env: NODE_VERSION: '20' EXPO_VERSION: 'latest' jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: 'npm' - name: Install dependencies run: npm ci - name: Setup Expo run: npm install -g expo-cli eas-cli - name: Lint & Type Check run: | npm run type-check 2>/dev/null || true npm run lint 2>/dev/null || true - name: Build Preview (EAS) if: github.event_name == 'push' && github.ref == 'refs/heads/develop' env: EAS_TOKEN: ${{ secrets.EAS_TOKEN }} run: | eas build --platform ios --profile preview --non-interactive --wait - name: Build Production (EAS) if: github.event_name == 'push' && github.ref == 'refs/heads/main' env: EAS_TOKEN: ${{ secrets.EAS_TOKEN }} run: | eas build --platform ios --profile production --non-interactive --wait - name: Release Notes if: github.event_name == 'push' && github.ref == 'refs/heads/main' run: | echo "### Build Complete ✅" >> $GITHUB_STEP_SUMMARY echo "App version: $(cat package.json | grep version | head -1 | awk -F= '{ print $2 }' | sed 's/[version",]//g')" >> $GITHUB_STEP_SUMMARY echo "Built for: iOS" >> $GITHUB_STEP_SUMMARY echo "Download IPA from EAS Dashboard" >> $GITHUB_STEP_SUMMARY test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} cache: 'npm' - name: Install dependencies run: npm ci - name: Check TypeScript run: npx tsc --noEmit || true - name: Validate structure run: | test -f app.json && echo "✓ app.json exists" test -f tsconfig.json && echo "✓ tsconfig.json exists" test -d app && echo "✓ app directory exists" test -d services && echo "✓ services directory exists" test -d components && echo "✓ components directory exists"