diff --git a/.github/workflows/mobile.apps.android.yml b/.github/workflows/mobile.apps.android.yml index 4269fba01..9a5dfea93 100644 --- a/.github/workflows/mobile.apps.android.yml +++ b/.github/workflows/mobile.apps.android.yml @@ -74,7 +74,7 @@ jobs: EXPO_PROJECT_IOS_BUNDLE_IDENTIFIER: ${{ secrets.EXPO_PROJECT_IOS_BUNDLE_IDENTIFIER }} - name: Build on EAS - run: cd apps/mobile && eas build --platform android --non-interactive + run: cd apps/mobile && eas build --profile production --platform android --non-interactive - name: Publish update run: cd apps/mobile && eas update --auto --platform android --non-interactive @@ -91,4 +91,4 @@ jobs: project_id: 'ever-teams-399720' - name: Upload to Play Store Console - run: cd apps/mobile && eas submit --platform android --latest --non-interactive + run: cd apps/mobile && eas submit --profile production --platform android --latest --non-interactive diff --git a/.github/workflows/mobile.apps.ios.yml b/.github/workflows/mobile.apps.ios.yml index 579a36f12..421783069 100644 --- a/.github/workflows/mobile.apps.ios.yml +++ b/.github/workflows/mobile.apps.ios.yml @@ -80,10 +80,10 @@ jobs: EXPO_PROJECT_IOS_BUNDLE_IDENTIFIER: ${{ secrets.EXPO_PROJECT_IOS_BUNDLE_IDENTIFIER }} - name: Build on EAS - run: cd apps/mobile && eas build --platform ios --non-interactive + run: cd apps/mobile && eas build --profile production --platform ios --non-interactive - name: Publish update - run: cd apps/mobile && eas update --auto --platform ios --non-interactive + run: cd apps/mobile && eas update --auto --profile production --platform ios --non-interactive - name: Upload App build to App store - run: cd apps/mobile && eas submit --platform ios --latest --non-interactive + run: cd apps/mobile && eas submit --profile production --platform ios --latest --non-interactive diff --git a/.github/workflows/mobile.apps.stage.android.yml b/.github/workflows/mobile.apps.stage.android.yml new file mode 100644 index 000000000..03c6e7f3f --- /dev/null +++ b/.github/workflows/mobile.apps.stage.android.yml @@ -0,0 +1,94 @@ +name: Mobile Build, Deploy and Publish Apps Android +on: + push: + branches: + - apps-stage + paths: + - '.github/workflows/mobile.apps.stage.yml' + - 'apps/mobile/**' + - 'package.json' + - 'yarn.lock' + +concurrency: + group: ${{ github.ref }}-${{ github.workflow }} + cancel-in-progress: true + +jobs: + deploy: + runs-on: ubuntu-latest + + environment: prod + + permissions: + contents: read + + 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 + + - uses: actions/checkout@v4 + + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.11.1' + cache: 'yarn' + + - name: Setup EAS + uses: expo/expo-github-action@v8 + with: + eas-version: latest + token: ${{ secrets.EXPO_TOKEN }} + + - name: Decode Google Credentials + run: | + DECODED_GOOGLE_CREDENTIALS=$(echo '${{ secrets.GOOGLE_CREDENTIALS }}' | base64 --decode) + echo "DECODED_GOOGLE_CREDENTIALS=$DECODED_GOOGLE_CREDENTIALS" >> $GITHUB_ENV + echo "::add-mask::$DECODED_GOOGLE_CREDENTIALS" + ESCAPED_GOOGLE_CREDENTIALS=$(echo "$DECODED_GOOGLE_CREDENTIALS" | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/"/\\"/g') + ESCAPED_GOOGLE_CREDENTIALS=$(echo $ESCAPED_GOOGLE_CREDENTIALS | sed 's/\\n/\\\\n/g') + echo "ESCAPED_GOOGLE_CREDENTIALS=$ESCAPED_GOOGLE_CREDENTIALS" >> $GITHUB_ENV + echo "::add-mask::$ESCAPED_GOOGLE_CREDENTIALS" + + - name: Install Packages + run: | + yarn install --frozen-lockfile + + - name: Build Mobile + run: | + yarn build:mobile + + - name: Generate app.json and replace placeholders + run: | + cd apps/mobile && yarn config:mobile + env: + EXPO_PROJECT_SLUG: ${{ secrets.EXPO_PROJECT_SLUG }} + EXPO_PROJECT_NAME: ${{ secrets.EXPO_PROJECT_NAME }} + EXPO_PROJECT_OWNER: ${{ secrets.EXPO_PROJECT_OWNER }} + EXPO_PROJECT_ID: ${{ secrets.EXPO_PROJECT_ID }} + EXPO_PROJECT_PACKAGE_NAME: ${{ secrets.EXPO_PROJECT_PACKAGE_NAME }} + EXPO_PROJECT_IOS_BUNDLE_IDENTIFIER: ${{ secrets.EXPO_PROJECT_IOS_BUNDLE_IDENTIFIER }} + + - name: Build on EAS + run: cd apps/mobile && eas build --profile internal --platform android --non-interactive + + - name: Publish update + run: cd apps/mobile && eas update --auto --profile internal --platform android --non-interactive + + - name: 'Authenticate to Google Cloud' + uses: 'google-github-actions/auth@v1' + with: + credentials_json: ${{ env.DECODED_GOOGLE_CREDENTIALS }} + + # Install gcloud, `setup-gcloud` automatically picks up authentication from `auth`. + - name: 'Set up Cloud SDK' + uses: 'google-github-actions/setup-gcloud@v1' + with: + project_id: 'ever-teams-399720' + + - name: Upload to Play Store Console + run: cd apps/mobile && eas submit --platform android --profile internal --latest --non-interactive diff --git a/.github/workflows/mobile.apps.stage.ios.yml b/.github/workflows/mobile.apps.stage.ios.yml new file mode 100644 index 000000000..31e345f3e --- /dev/null +++ b/.github/workflows/mobile.apps.stage.ios.yml @@ -0,0 +1,89 @@ +name: Mobile Build, Deploy and Publish Apps iOS +on: + push: + branches: + - apps-stage + paths: + - '.github/workflows/mobile.apps.stage.yml' + - 'apps/mobile/**' + - 'package.json' + - 'yarn.lock' + +concurrency: + group: ${{ github.ref }}-${{ github.workflow }} + cancel-in-progress: true + +jobs: + deploy: + runs-on: ubuntu-latest + + environment: prod + + permissions: + contents: read + + 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 + + - uses: actions/checkout@v4 + + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: '20.11.1' + cache: 'yarn' + + - name: Setup EAS + uses: expo/expo-github-action@v8 + with: + eas-version: latest + token: ${{ secrets.EXPO_TOKEN }} + + - name: Set Apple Store Credentials + run: | + echo "APPLE_ID=${{ secrets.APPLE_ID }}" >> $GITHUB_ENV + echo "APPSTORE_ISSUER_ID=${{ secrets.APPSTORE_ISSUER_ID }}" >> $GITHUB_ENV + echo "APPSTORE_API_KEY_ID=${{ secrets.APPSTORE_API_KEY_ID }}" >> $GITHUB_ENV + + - name: Replace Secrets in eas.json + run: | + sed -i 's/APPLE_ID_PLACEHOLDER/${{ secrets.APPLE_ID }}/' ./apps/mobile/eas.json + sed -i 's/APPSTORE_ISSUER_ID_PLACEHOLDER/${{ secrets.APPSTORE_ISSUER_ID }}/' ./apps/mobile/eas.json + sed -i 's/APPSTORE_API_KEY_ID_PLACEHOLDER/${{ secrets.APPSTORE_API_KEY_ID }}/' ./apps/mobile/eas.json + + - name: Create Apple API Key File + run: | + echo "${{ secrets.APPSTORE_API_PRIVATE_KEY }}" > ./apps/mobile/AuthKey_R9QZ5LP8NK.p8 + + - name: Install Packages + run: | + yarn install --frozen-lockfile + + - name: Build Mobile + run: | + yarn build:mobile + + - name: Generate app.json and replace placeholders + run: | + cd apps/mobile && yarn config:mobile + env: + EXPO_PROJECT_SLUG: ${{ secrets.EXPO_PROJECT_SLUG }} + EXPO_PROJECT_NAME: ${{ secrets.EXPO_PROJECT_NAME }} + EXPO_PROJECT_OWNER: ${{ secrets.EXPO_PROJECT_OWNER }} + EXPO_PROJECT_ID: ${{ secrets.EXPO_PROJECT_ID }} + EXPO_PROJECT_PACKAGE_NAME: ${{ secrets.EXPO_PROJECT_PACKAGE_NAME }} + EXPO_PROJECT_IOS_BUNDLE_IDENTIFIER: ${{ secrets.EXPO_PROJECT_IOS_BUNDLE_IDENTIFIER }} + + - name: Build on EAS + run: cd apps/mobile && eas build --profile internal --platform ios --non-interactive + + - name: Publish update + run: cd apps/mobile && eas update --auto --profile internal --platform ios --non-interactive + + - name: Upload App build to App store + run: cd apps/mobile && eas submit --profile internal --platform ios --latest --non-interactive diff --git a/.github/workflows/release.stage.yml b/.github/workflows/release.stage.yml index 8538e8c89..239573145 100644 --- a/.github/workflows/release.stage.yml +++ b/.github/workflows/release.stage.yml @@ -21,7 +21,7 @@ jobs: id: tag_version with: github_token: ${{ secrets.GITHUB_TOKEN }} - release_branches: apps,master,main,develop,stage + release_branches: apps,master,main,develop,stage,apps-stage pre_release_branches: something_to_possible_use_later - name: Create a GitHub release diff --git a/apps/mobile/eas.json b/apps/mobile/eas.json index 866d70a6f..eef5c22f4 100644 --- a/apps/mobile/eas.json +++ b/apps/mobile/eas.json @@ -13,6 +13,9 @@ }, "production": { "autoIncrement": true + }, + "internal": { + "distribution": "internal" } }, "submit": { @@ -28,6 +31,19 @@ "ascApiKeyId": "APPSTORE_API_KEY_ID_PLACEHOLDER", "ascApiKeyPath": "./AuthKey_8A3H79GTF8.p8" } + }, + "internal": { + "android": { + "track": "internal", + "releaseStatus": "draft", + "changesNotSentForReview": false + }, + "ios": { + "ascAppId": "APPLE_ID_PLACEHOLDER", + "ascApiKeyIssuerId": "APPSTORE_ISSUER_ID_PLACEHOLDER", + "ascApiKeyId": "APPSTORE_API_KEY_ID_PLACEHOLDER", + "ascApiKeyPath": "./AuthKey_8A3H79GTF8.p8" + } } } }