Skip to content

Inline single-name profile name fix #277

Inline single-name profile name fix

Inline single-name profile name fix #277

Workflow file for this run

name: Build Mobile
on:
workflow_dispatch:
workflow_call:
inputs:
ref:
required: false
type: string
release:
required: false
type: boolean
pull_request:
push:
branches: [main]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build-sign-android:
name: Build and sign Android
# Fork PRs build an unsigned debug APK (secrets aren't available to forks);
# internal PRs / pushes build the signed release artifacts.
if: ${{ github.actor != 'dependabot[bot]' }}
runs-on: ubuntu-latest
steps:
- name: Determine ref
id: get-ref
run: |
input_ref="${{ inputs.ref }}"
github_ref="${{ github.sha }}"
ref="${input_ref:-$github_ref}"
echo "ref=$ref" >> $GITHUB_OUTPUT
- uses: actions/checkout@v4
with:
ref: ${{ steps.get-ref.outputs.ref }}
- uses: actions/setup-java@v4
with:
distribution: "zulu"
java-version: "21.x"
cache: "gradle"
- name: Create the Keystore
if: ${{ !github.event.pull_request.head.repo.fork }}
env:
KEYSTORE_B64: ${{ secrets.KEYSTORE_B64 }}
run: echo "$KEYSTORE_B64" | base64 -d > android/key.keystore
- uses: oven-sh/setup-bun@v1
- run: bun install
- run: bun run build
- run: bunx cap sync android
- name: Build signed Android App Bundle
if: ${{ !github.event.pull_request.head.repo.fork }}
env:
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }}
run: ./gradlew assembleRelease bundleRelease
working-directory: android
- name: Build debug APK (fork PRs)
if: ${{ github.event.pull_request.head.repo.fork }}
run: ./gradlew assembleDebug
working-directory: android
- name: Publish Android APK
if: ${{ !github.event.pull_request.head.repo.fork }}
uses: actions/upload-artifact@v4
with:
name: release-apk-signed
path: android/app/build/outputs/apk/release/*.apk
- name: Publish Android AAB
if: ${{ !github.event.pull_request.head.repo.fork }}
uses: actions/upload-artifact@v4
with:
name: release-aab-signed
path: android/app/build/outputs/bundle/release/*.aab
- name: Publish debug APK (fork PRs)
if: ${{ github.event.pull_request.head.repo.fork }}
uses: actions/upload-artifact@v4
with:
name: debug-apk
path: android/app/build/outputs/apk/debug/*.apk
build:
runs-on: macos-latest
name: Build iOS app
# Fork PRs do a no-codesign compile check (secrets aren't available to forks);
# internal PRs / pushes archive and export a signed IPA.
if: ${{ github.actor != 'dependabot[bot]' }}
steps:
- name: Determine ref
id: get-ref
run: |
input_ref="${{ inputs.ref }}"
github_ref="${{ github.sha }}"
ref="${input_ref:-$github_ref}"
echo "ref=$ref" >> $GITHUB_OUTPUT
- name: Checkout source
uses: actions/checkout@v4
with:
ref: ${{ steps.get-ref.outputs.ref }}
- name: Install the Apple certificate and provisioning profile
if: ${{ !github.event.pull_request.head.repo.fork }}
env:
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
run: |
# create variables
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
# import certificate and provisioning profile from secrets
echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH
echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o $PP_PATH
# create temporary keychain
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
# import certificate to keychain
security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security list-keychain -d user -s $KEYCHAIN_PATH
# apply provisioning profile
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles
- name: Set up XCode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: latest-stable
- uses: oven-sh/setup-bun@v1
- run: bun install
- run: bun --bun run build
- run: bunx cap sync ios
- name: Build project
if: ${{ !github.event.pull_request.head.repo.fork }}
run: xcodebuild -workspace './ios/App/App.xcworkspace' -scheme GiraMais -destination generic/platform=iOS -archivePath App.xcarchive archive
- name: 🍻 Assemble IPA
if: ${{ !github.event.pull_request.head.repo.fork }}
run: xcodebuild archive -archivePath App.xcarchive -exportArchive -exportOptionsPlist ./archive.plist -exportPath output -allowProvisioningUpdates
- name: Build project (compile check, fork PRs)
if: ${{ github.event.pull_request.head.repo.fork }}
run: xcodebuild build -workspace './ios/App/App.xcworkspace' -scheme GiraMais -destination generic/platform=iOS CODE_SIGNING_ALLOWED=NO
- name: Upload release bundle
if: ${{ !github.event.pull_request.head.repo.fork }}
uses: actions/upload-artifact@v4
with:
name: app-ios
path: output/
retention-days: 60