diff --git a/.github/workflows/build-submit-android.yml b/.github/workflows/build-submit-android.yml index ec9e0d32..6914b636 100644 --- a/.github/workflows/build-submit-android.yml +++ b/.github/workflows/build-submit-android.yml @@ -34,6 +34,9 @@ jobs: node-version-file: .nvmrc cache: yarn + - name: 🪛 Setup jq + uses: dcarbone/install-jq-action@v2 + - name: 🔨 Setup EAS uses: expo/expo-github-action@v8 with: @@ -96,13 +99,17 @@ jobs: name: build-${{ steps.timestamp.outputs.time }}.apk path: build.apk + - name: 📚 Get version from package.json + id: get-build-info + run: bash scripts/setGitHubOutput.sh + - name: 🔔 Notify Slack of Production Build if: ${{ inputs.profile == 'production' }} uses: slackapi/slack-github-action@v1.25.0 with: payload: | { - "text": "Android build is ready for submission. This is a production build! Download the artifact here: ${{ steps.upload-artifact-production.outputs.artifact-url }}" + "text": "Android production build for Google Play Store submission is ready!\n```Artifact: ${{ steps.upload-artifact-production.outputs.artifact-url }}\nVersion Number: ${{ steps.get-build-info.outputs.PACKAGE_VERSION }}\nBuild Number: ${{ steps.get-build-info.outputs.BSKY_ANDROID_VERSION_CODE }}```" } env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }} @@ -140,7 +147,7 @@ jobs: with: payload: | { - "text": "Android production APK build is ready for download. This is a production build, and you should add it to the GitHub release! Download the artifact here: ${{ steps.upload-artifact-production-apk.outputs.artifact-url }}" + "text": "Android production build for GitHub/Obtanium is ready!\n```Artifact: ${{ steps.upload-artifact-production-apk.outputs.artifact-url }}\nVersion Number: ${{ steps.get-build-info.outputs.PACKAGE_VERSION }}\nBuild Number: ${{ steps.get-build-info.outputs.BSKY_ANDROID_VERSION_CODE }}```" } env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }} diff --git a/.github/workflows/build-submit-ios.yml b/.github/workflows/build-submit-ios.yml index c1693b81..284e666d 100644 --- a/.github/workflows/build-submit-ios.yml +++ b/.github/workflows/build-submit-ios.yml @@ -34,6 +34,9 @@ jobs: node-version-file: .nvmrc cache: yarn + - name: 🪛 Setup jq + uses: dcarbone/install-jq-action@v2 + - name: 🔨 Setup EAS uses: expo/expo-github-action@v8 with: @@ -81,6 +84,22 @@ jobs: - name: 🚀 Deploy run: eas submit -p ios --non-interactive --path build.ipa + - name: 📚 Get version from package.json + id: get-build-info + run: bash scripts/setGitHubOutput.sh + + - name: 🔔 Notify Slack of Production Build + if: ${{ inputs.profile == 'production' }} + uses: slackapi/slack-github-action@v1.25.0 + with: + payload: | + { + "text": "iOS production build for App Store submission is ready!\n```Artifact: Check TestFlight to know when it is available\nVersion Number: ${{ steps.get-build-info.outputs.PACKAGE_VERSION }}\nBuild Number: ${{ steps.get-build-info.outputs.BSKY_IOS_BUILD_NUMBER }}```" + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK + - name: ⬇️ Restore Cache id: get-base-commit uses: actions/cache@v4 diff --git a/docs/deploy-ota.md b/docs/deploy-ota.md index e92aebd3..391a6bf6 100644 --- a/docs/deploy-ota.md +++ b/docs/deploy-ota.md @@ -14,15 +14,20 @@ diff results in incompatible native changes, a new client build will automatical ### Prerequisites -- Remove any internal client from your device and download the client from the App Store/Google Play. This will help for -testing as well as retrieving the build number. -- You should have signed in to EAS locally through npx eas login. You will need to modify the build number in a -subsequent step. -- Identify the build number of the production app you want to deploy an update for. iOS and Android build numbers are -divergent, so you will need to find both +- Find the latest production build number for both iOS and Android in Slack. These are listed in #client-builds + - Production builds always send the Version Number and Build Number in the Slack message. Search for the latest + production version number, and you should find the correct information. + + ![slack-build-info](./img/slack-build-info.png) + +- It may also be useful to check the current production clients for these values. This will also help for testing. Note +that you will need to _fully_ remove the existing internal client build from your device, otherwise the given values in +the app may differ from the actual production values. ![app-build-number](./img/app-build-number.png) +- You should have signed in to EAS locally through npx eas login. You will need to modify the build number in a +subsequent step. - Ensure that the commit the initial client was cut from is properly tagged in git. The tag should be in the format of 1.X.0 - Note: If the commit is not properly tagged, then the OTA deployment will simply fail since the GitHub Action will not be able to find a commit to fingerprint and diff against. @@ -38,14 +43,17 @@ to create your branch from, this should be properly set. ### Deployment -- Update the build number through EAS +- Update the build number through EAS to match the build numbers of the + production iOS/Android apps - Note: This isn’t strictly necessary, but having a step that takes you off of GitHub and into the terminal provides a little “friction” to avoid fat fingering a release. Since there are legitimate reasons to just “click and deploy” for internal builds, I felt it useful to make sure it doesn’t accidentally become a prod deployment. - - Set the build number to the appropriate build number found in the prerequisite steps. Again, this should be the + - Set the build numbers to the values found in the prerequisite steps. Again, this should be the build number for the current production release you want to deploy for. - `npx eas build:version:set -p ios` - `npx eas build:version:set -p android` + - These steps should spit out what the current build number is, save those values + for later too - Run the deployment - Navigate to https://github.com/bluesky-social/social-app/actions/workflows/bundle-deploy-eas-update.yml - Select the “Run Workflow” dropdown @@ -79,3 +87,9 @@ In about five minutes, the new deployment should be available for download. To t - Launch the app once and wait approximately 15 seconds - Relaunch the app - Check the Settings page and scroll to the bottom. The commit hash should now be the latest commit on your deployed branch. + +### Post Deployment + +- Reset both platforms build numbers to what they were before the OTA + deployment. These values should have been logged by the EAS CLI when you + reset them to the production values prior to OTA. diff --git a/docs/img/slack-build-info.png b/docs/img/slack-build-info.png new file mode 100644 index 00000000..1f69518c Binary files /dev/null and b/docs/img/slack-build-info.png differ diff --git a/scripts/setGitHubOutput.sh b/scripts/setGitHubOutput.sh new file mode 100755 index 00000000..e8ecfcda --- /dev/null +++ b/scripts/setGitHubOutput.sh @@ -0,0 +1,9 @@ +#!/bin/bash +outputIos=$(eas build:version:get -p ios) +outputAndroid=$(eas build:version:get -p android) +BSKY_IOS_BUILD_NUMBER=${outputIos#*buildNumber - } +BSKY_ANDROID_VERSION_CODE=${outputAndroid#*versionCode - } + +echo PACKAGE_VERSION="$(jq -r '.version' package.json)" > "$GITHUB_OUTPUT" +echo BSKY_IOS_BUILD_NUMBER=$BSKY_IOS_BUILD_NUMBER >> "$GITHUB_OUTPUT" +echo BSKY_ANDROID_VERSION_CODE=$BSKY_ANDROID_VERSION_CODE >> "$GITHUB_OUTPUT"