73df7e53b3
* some progress
another adjustment, testing
another adjustment, testing
fix again
fix again
set default runtime version
fix
test this script
test this script
test this script
add build numbers to the deployment url
clean
give script access to build number
add `useBuildNumberEnv` without a bump
new line
fix missing async
add channel name to deployment url
add updates check on launch for testflight users
ver bump
init updates on launch for native
add `testflight` as default in build submit
add is_testflight check
* disable inline predictions to prevent ios composer jank
* temp bump
* Revert "temp bump"
This reverts commit 44c51134a3.
* adjustments
version bump
adjust
fixes
test
* cleanup and finalize
drop check down to every 15 minutes
adjustments
change to 15 mins
use jq to get version if necessary
rm test on push
figured it out
remove nightly testflight releases
test again again again again again AGAIN ONCE MORE
test again again again again again AGAIN
test again again again again again AGAIN
test again again again again again
test again again again again
test again again again
test again again
test again
test
test
test
run deploy if necessary
run deploy if necessary
run deploy if necessary
run deploy if necessary
run deploy if necessary
remove test message
fix environment
oops
cleanup
merge in changes
* remove unnecessary `workflow_call`
* remove changes that have been merged into main now
* finalize android
update git ignore
rm test stuff from the bundle action
remove test message
test message
fix
test message
test message
few android fixes
few android fixes
fix jq
add a test message
fix slack webhook
create android deployments test 2
create android deployments
add `testflight-android` profile to eas.json
more cleanup
some more cleanup
simplify some logic
remove unnecessary channel
rename to `useOTAUpdates`
* rm test portion
271 lines
9.2 KiB
YAML
271 lines
9.2 KiB
YAML
---
|
|
name: Bundle and Deploy EAS Update
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
channel:
|
|
type: choice
|
|
description: Deployment channel to use
|
|
options:
|
|
- testflight
|
|
- production
|
|
runtimeVersion:
|
|
type: string
|
|
description: Runtime version (in x.x.x format) that this update is for
|
|
required: true
|
|
|
|
jobs:
|
|
bundleDeploy:
|
|
name: Bundle and Deploy EAS Update
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
fingerprint-diff: ${{ steps.fingerprint.outputs.fingerprint-diff }}
|
|
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
|
|
|
|
# Validate the version if one is supplied. This should generally happen if the update is for a production client
|
|
- name: 🧐 Validate version
|
|
if: ${{ inputs.runtimeVersion }}
|
|
run: |
|
|
if [ -z "${{ inputs.runtimeVersion }}" ]; then
|
|
[[ "${{ inputs.runtimeVersion }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && echo "Version is valid" || exit 1
|
|
fi
|
|
|
|
- name: ⬇️ Checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 100
|
|
|
|
- name: ⬇️ Fetch commits from base branch
|
|
run: git fetch origin main:main --depth 100
|
|
|
|
# This should get the current production release's commit's hash to see if the update is compatible
|
|
- name: 🕵️ Get the base commit
|
|
id: base-commit
|
|
run: |
|
|
if [ -z "${{ inputs.channel == 'production' }}" ]; then
|
|
echo base-commit=$(git show-ref -s ${{ inputs.runtimeVersion }}) >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo base-commit=$(git log -n 1 --skip 1 main --pretty=format:'%H') >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: ✓ Make sure we found a base commit
|
|
run: |
|
|
if [ -z "${{ steps.base-commit.outputs.base-commit }}" ]; then
|
|
echo "Could not find a base commit for this release. Exiting."
|
|
exit 1
|
|
fi
|
|
|
|
- name: 🔧 Setup Node
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version-file: .nvmrc
|
|
cache: yarn
|
|
|
|
- name: ⚙️ Install Dependencies
|
|
run: yarn install
|
|
|
|
# Run the fingerprint
|
|
- name: 📷 Check fingerprint
|
|
id: fingerprint
|
|
uses: expo/expo-github-action/fingerprint@main
|
|
with:
|
|
previous-git-commit: ${{ steps.base-commit.outputs.base-commit }}
|
|
|
|
- name: 👀 Debug fingerprint
|
|
run: |
|
|
echo "previousGitCommit=${{ steps.fingerprint.outputs.previous-git-commit }} currentGitCommit=${{ steps.fingerprint.outputs.current-git-commit }}"
|
|
echo "isPreviousFingerprintEmpty=${{ steps.fingerprint.outputs.previous-fingerprint == '' }}"
|
|
|
|
- name: 🔨 Setup EAS
|
|
uses: expo/expo-github-action@v8
|
|
if: ${{ steps.fingerprint.outputs.fingerprint-diff == '[]' }}
|
|
with:
|
|
expo-version: latest
|
|
eas-version: latest
|
|
token: ${{ secrets.EXPO_TOKEN }}
|
|
|
|
- name: ⛏️ Setup Expo
|
|
if: ${{ steps.fingerprint.outputs.fingerprint-diff == '[]' }}
|
|
run: yarn global add eas-cli-local-build-plugin
|
|
|
|
- name: 🪛 Setup jq
|
|
if: ${{ steps.fingerprint.outputs.fingerprint-diff == '[]' }}
|
|
uses: dcarbone/install-jq-action@v2
|
|
|
|
- name: 🔤 Compile Translations
|
|
if: ${{ steps.fingerprint.outputs.fingerprint-diff == '[]' }}
|
|
run: yarn intl:build
|
|
|
|
- name: ✏️ Write environment variables
|
|
if: ${{ steps.fingerprint.outputs.fingerprint-diff == '[]' }}
|
|
run: |
|
|
export json='${{ secrets.GOOGLE_SERVICES_TOKEN }}'
|
|
echo "${{ secrets.ENV_TOKEN }}" > .env
|
|
echo "$json" > google-services.json
|
|
|
|
- name: 🏗️ Create Bundle
|
|
if: ${{ steps.fingerprint.outputs.fingerprint-diff == '[]' }}
|
|
run: EXPO_PUBLIC_ENV="${{ inputs.channel || 'testflight' }}" yarn export
|
|
|
|
- name: 📦 Package Bundle and 🚀 Deploy
|
|
if: ${{ steps.fingerprint.outputs.fingerprint-diff == '[]' }}
|
|
run: yarn use-build-number bash scripts/bundleUpdate.sh
|
|
env:
|
|
DENIS_API_KEY: ${{ secrets.DENIS_API_KEY }}
|
|
RUNTIME_VERSION: ${{ inputs.runtimeVersion }}
|
|
CHANNEL_NAME: ${{ inputs.channel || 'testflight' }}
|
|
|
|
# GitHub actions are horrible so let's just copy paste this in
|
|
buildIfNecessaryIOS:
|
|
name: Build and Submit iOS
|
|
runs-on: macos-14
|
|
needs: [bundleDeploy]
|
|
# Gotta check if its NOT '[]' because any md5 hash in the outputs is detected as a possible secret and won't be
|
|
# available here
|
|
if: ${{ inputs.channel != 'production' && needs.bundleDeploy.outputs.fingerprint-diff != '[]' }}
|
|
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: ⬇️ Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: 🔧 Setup Node
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version-file: .nvmrc
|
|
cache: yarn
|
|
|
|
- name: 🔨 Setup EAS
|
|
uses: expo/expo-github-action@v8
|
|
with:
|
|
expo-version: latest
|
|
eas-version: latest
|
|
token: ${{ secrets.EXPO_TOKEN }}
|
|
|
|
- name: ⛏️ Setup EAS local builds
|
|
run: yarn global add eas-cli-local-build-plugin
|
|
|
|
- name: ⚙️ Install dependencies
|
|
run: yarn install
|
|
|
|
- name: ☕️ Setup Cocoapods
|
|
uses: maxim-lobanov/setup-cocoapods@v1
|
|
with:
|
|
version: 1.14.3
|
|
|
|
- name: 💾 Cache Pods
|
|
uses: actions/cache@v3
|
|
id: pods-cache
|
|
with:
|
|
path: ./ios/Pods
|
|
# We'll use the yarn.lock for our hash since we don't yet have a Podfile.lock. Pod versions will not
|
|
# change unless the yarn version changes as well.
|
|
key: ${{ runner.os }}-pods-${{ hashFiles('yarn.lock') }}
|
|
|
|
- name: 🔤 Compile translations
|
|
run: yarn intl:build
|
|
|
|
- name: ✏️ Write environment variables
|
|
run: |
|
|
echo "${{ secrets.ENV_TOKEN }}" > .env
|
|
echo "${{ secrets.GOOGLE_SERVICES_TOKEN }}" > google-services.json
|
|
|
|
- name: 🏗️ EAS Build
|
|
run: yarn use-build-number-with-bump eas build -p ios --profile testflight --local --output build.ipa --non-interactive
|
|
|
|
- name: 🚀 Deploy
|
|
run: eas submit -p ios --non-interactive --path build.ipa
|
|
|
|
buildIfNecessaryAndroid:
|
|
name: Build and Submit Android
|
|
runs-on: ubuntu-latest
|
|
needs: [ bundleDeploy ]
|
|
# Gotta check if its NOT '[]' because any md5 hash in the outputs is detected as a possible secret and won't be
|
|
# available here
|
|
if: ${{ inputs.channel != 'production' && needs.bundleDeploy.outputs.fingerprint-diff != '[]' }}
|
|
|
|
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: ⬇️ Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: 🔧 Setup Node
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version-file: .nvmrc
|
|
cache: yarn
|
|
|
|
- name: 🔨 Setup EAS
|
|
uses: expo/expo-github-action@v8
|
|
with:
|
|
expo-version: latest
|
|
eas-version: latest
|
|
token: ${{ secrets.EXPO_TOKEN }}
|
|
|
|
- name: ⛏️ Setup EAS local builds
|
|
run: yarn global add eas-cli-local-build-plugin
|
|
|
|
- uses: actions/setup-java@v4
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: '17'
|
|
|
|
- name: ⚙️ Install dependencies
|
|
run: yarn install
|
|
|
|
- name: 🔤 Compile translations
|
|
run: yarn intl:build
|
|
|
|
- name: ✏️ Write environment variables
|
|
run: |
|
|
export json='${{ secrets.GOOGLE_SERVICES_TOKEN }}'
|
|
echo "${{ secrets.ENV_TOKEN }}" > .env
|
|
echo "$json" > google-services.json
|
|
|
|
- name: 🏗️ EAS Build
|
|
run: yarn use-build-number-with-bump eas build -p android --profile testflight-android --local --output build.apk --non-interactive
|
|
|
|
- name: ⏰ Get a timestamp
|
|
id: timestamp
|
|
uses: nanzm/get-time-action@master
|
|
with:
|
|
format: 'MM-DD-HH-mm-ss'
|
|
|
|
- name: 🚀 Upload Artifact
|
|
id: upload-artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
retention-days: 30
|
|
compression-level: 0
|
|
name: build-${{ steps.timestamp.outputs.time }}.apk
|
|
path: build.apk
|
|
|
|
- name: 🔔 Notify Slack
|
|
uses: slackapi/slack-github-action@v1.25.0
|
|
with:
|
|
payload: |
|
|
{
|
|
"text": "Android build is ready for testing. Download the artifact here: ${{ steps.upload-artifact.outputs.artifact-url }}"
|
|
}
|
|
env:
|
|
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }}
|
|
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK
|