2024-02-21 22:54:31 +01:00
---
name : Build and Submit Android
on :
workflow_dispatch :
inputs :
profile :
type : choice
description : Build profile to use
options :
2024-04-04 03:04:48 +02:00
- testflight-android
2024-02-21 22:54:31 +01:00
- production
jobs :
build :
name : Build and Submit Android
runs-on : 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 : ⬇️ Checkout
uses : actions/checkout@v4
2024-05-07 05:13:12 +02:00
with :
fetch-depth : 5
2024-02-21 22:54:31 +01:00
- name : 🔧 Setup Node
2024-02-27 02:35:06 +01:00
uses : actions/setup-node@v4
2024-02-21 22:54:31 +01:00
with :
2024-02-27 02:35:06 +01:00
node-version-file : .nvmrc
2024-02-21 22:54:31 +01:00
cache : yarn
2024-06-05 03:55:18 +02:00
- name : 🪛 Setup jq
uses : dcarbone/install-jq-action@v2
2024-02-21 22:54:31 +01:00
- 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
2024-02-27 22:31:44 +01:00
- name : 🔤 Compile translations
run : yarn intl:build
2024-02-21 22:54:31 +01:00
- name : ✏️ Write environment variables
run : |
2024-02-27 22:31:44 +01:00
export json='${{ secrets.GOOGLE_SERVICES_TOKEN }}'
2024-02-21 22:54:31 +01:00
echo "${{ secrets.ENV_TOKEN }}" > .env
2024-05-05 01:33:10 +02:00
echo "EXPO_PUBLIC_BUNDLE_IDENTIFIER=$(git rev-parse --short HEAD)" >> .env
echo "EXPO_PUBLIC_BUNDLE_DATE=$(date -u +"%y%m%d%H")" >> .env
2024-02-27 22:31:44 +01:00
echo "$json" > google-services.json
2024-02-21 22:54:31 +01:00
- name : 🏗️ EAS Build
2024-04-04 03:04:48 +02:00
run : yarn use-build-number-with-bump eas build -p android --profile ${{ inputs.profile || 'testflight-android' }} --local --output build.aab --non-interactive
2024-02-21 22:54:31 +01:00
2024-04-10 02:00:14 +02:00
- name : ✍️ Rename Testflight bundle
2024-04-04 03:04:48 +02:00
if : ${{ inputs.profile != 'production' }}
run : mv build.aab build.apk
- name : ⏰ Get a timestamp
id : timestamp
uses : nanzm/get-time-action@master
with :
format : 'MM-DD-HH-mm-ss'
2024-04-10 02:00:14 +02:00
- name : 🚀 Upload Production Artifact
id : upload-artifact-production
if : ${{ inputs.profile == 'production' }}
uses : actions/upload-artifact@v4
with :
retention-days : 30
compression-level : 6
name : build-${{ steps.timestamp.outputs.time }}.aab
2024-04-10 02:25:59 +02:00
path : build.aab
2024-04-10 02:00:14 +02:00
- name : 🚀 Upload Testflight Artifact
id : upload-artifact-testflight
2024-04-04 03:04:48 +02:00
if : ${{ inputs.profile != 'production' }}
uses : actions/upload-artifact@v4
with :
retention-days : 30
2024-04-10 02:00:14 +02:00
compression-level : 6
2024-04-04 03:04:48 +02:00
name : build-${{ steps.timestamp.outputs.time }}.apk
path : build.apk
2024-06-05 03:55:18 +02:00
- name : 📚 Get version from package.json
id : get-build-info
run : bash scripts/setGitHubOutput.sh
2024-04-10 02:00:14 +02:00
- name : 🔔 Notify Slack of Production Build
if : ${{ inputs.profile == 'production' }}
uses : slackapi/slack-github-action@v1.25.0
with :
payload : |
{
2024-06-05 03:55:18 +02:00
"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 }}```"
2024-04-10 02:00:14 +02:00
}
env :
SLACK_WEBHOOK_URL : ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }}
SLACK_WEBHOOK_TYPE : INCOMING_WEBHOOK
- name : 🔔 Notify Slack of Testflight Build
2024-04-04 03:04:48 +02:00
if : ${{ inputs.profile != 'production' }}
uses : slackapi/slack-github-action@v1.25.0
with :
payload : |
{
2024-04-10 02:00:14 +02:00
"text": "Android build is ready for testing. Download the artifact here: ${{ steps.upload-artifact-testflight.outputs.artifact-url }}"
2024-04-04 03:04:48 +02:00
}
env :
SLACK_WEBHOOK_URL : ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }}
SLACK_WEBHOOK_TYPE : INCOMING_WEBHOOK
2024-05-29 01:38:24 +02:00
2024-06-04 02:32:58 +02:00
- name : 🏗️ Build Production APK
if : ${{ inputs.profile == 'production' }}
run : yarn use-build-number-with-bump eas build -p android --profile production-apk --local --output build.apk --non-interactive
- name : 🚀 Upload Production APK Artifact
id : upload-artifact-production-apk
if : ${{ inputs.profile == 'production' }}
uses : actions/upload-artifact@v4
with :
retention-days : 30
compression-level : 6
name : build-${{ steps.timestamp.outputs.time }}.apk
path : build.apk
- name : 🔔 Notify Slack of Production APK Build
if : ${{ inputs.profile == 'production' }}
uses : slackapi/slack-github-action@v1.25.0
with :
payload : |
{
2024-06-05 03:55:18 +02:00
"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 }}```"
2024-06-04 02:32:58 +02:00
}
env :
SLACK_WEBHOOK_URL : ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }}
SLACK_WEBHOOK_TYPE : INCOMING_WEBHOOK
2024-05-29 01:38:24 +02:00
- name : ⬇️ Restore Cache
id : get-base-commit
uses : actions/cache@v4
2024-05-29 10:50:06 +02:00
if : ${{ inputs.profile == 'testflight' }}
2024-05-29 01:38:24 +02:00
with :
path : most-recent-testflight-commit.txt
key : most-recent-testflight-commit
- name : ✏️ Write commit hash to cache
2024-05-29 10:50:06 +02:00
if : ${{ inputs.profile == 'testflight' }}
2024-05-29 01:38:24 +02:00
run : echo ${{ github.sha }} > most-recent-testflight-commit.txt