@Mobile • Build App triggered by Sheng-Long on ref develop #24
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "@Mobile • Build App" | |
run-name: "@Mobile • Build App triggered by ${{ github.event_name == 'workflow_dispatch' && inputs.login || github.actor }} ${{ format('on ref {0}', github.ref_name) }}" | |
on: | |
push: | |
branches: | |
- main | |
- develop | |
- release | |
- hotfix | |
workflow_dispatch: | |
inputs: | |
ref: | |
description: the branch which triggered this workflow | |
required: false | |
login: | |
description: The GitHub username that triggered the workflow | |
required: true | |
base_ref: | |
description: The base branch to merge the head into when checking out the code | |
required: false | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref_name != 'develop' && github.ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
build-mobile-app-android: | |
name: "Build Ledger Live Mobile (Android)" | |
runs-on: [ledger-live-4xlarge-linux] | |
env: | |
NODE_OPTIONS: "--max-old-space-size=7168" | |
steps: | |
- uses: LedgerHQ/ledger-live/tools/actions/composites/checkout-merge@develop | |
with: | |
ref: ${{ (github.event_name == 'workflow_dispatch' && (inputs.ref || github.ref_name)) || github.sha }} | |
base: ${{ inputs.base_ref }} | |
- name: set git user | |
run: | | |
git config user.email "105061298+live-github-bot[bot]@users.noreply.github.com" | |
git config user.name "live-github-bot[bot]" | |
- name: Setup the toolchain | |
uses: ./tools/actions/composites/setup-toolchain | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: 3.1.2 | |
env: | |
ImageOS: ubuntu20 | |
- uses: actions/setup-java@v3 | |
with: | |
distribution: "zulu" # See 'Supported distributions' for available options | |
java-version: "11" | |
- name: setup Android SDK | |
uses: android-actions/setup-android@v2.0.10 | |
- name: install dependencies | |
run: pnpm i --filter="live-mobile..." --filter="ledger-live" --no-frozen-lockfile --unsafe-perm | |
- uses: ./tools/actions/get-package-infos | |
id: version | |
with: | |
path: ${{ github.workspace }}/apps/ledger-live-mobile | |
- name: set beta name | |
uses: ./tools/actions/change-product-name | |
with: | |
path: ${{ github.workspace }}/apps/ledger-live-mobile | |
- name: Get short SHA | |
id: slug | |
run: echo "sha8=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT | |
- name: make local version | |
env: | |
VERSION: ${{ steps.version.outputs.clean }}-sha.${{ steps.slug.outputs.sha8 }} | |
run: cd apps/ledger-live-mobile && npm version $VERSION | |
- name: TurboRepo local caching server | |
id: turborepo-cache-server | |
uses: ./tools/actions/turborepo-s3-cache | |
with: | |
server-token: "yolo" | |
cleanup-cache-folder: "true" | |
aws-access-key: ${{ secrets.AWS_S3_CACHE_ACCESS_KEY }} | |
aws-secret-key: ${{ secrets.AWS_S3_CACHE_SECRET_KEY }} | |
- name: build the app | |
env: | |
ANDROID_KEYSTORE_PASS: staging | |
ANDROID_KEY_ALIAS: staging | |
ANDROID_KEY_PASS: staging | |
NODE_OPTIONS: "--max-old-space-size=7168" | |
ANDROID_KEYSTORE_FILE: ${{ github.workspace }}/apps/ledger-live-mobile/android/app/staging.kstr | |
run: pnpm build-ci:llm:android --api="http://127.0.0.1:${{ steps.turborepo-cache-server.outputs.port }}" --token="yolo" --team="foo" | |
- uses: ./tools/actions/get-package-infos | |
id: post-version | |
with: | |
path: ${{ github.workspace }}/apps/ledger-live-mobile | |
- name: upload Android app | |
uses: actions/upload-artifact@v3 | |
with: | |
name: ${{ steps.post-version.outputs.version }}-release | |
path: ${{ github.workspace }}/apps/ledger-live-mobile/android/app/build/outputs/apk/stagingRelease | |
build-mobile-app-ios: | |
runs-on: macos-latest | |
name: "Build Ledger Live Mobile (Mac OS X)" | |
env: | |
NODE_OPTIONS: "--max-old-space-size=7168" | |
steps: | |
- uses: LedgerHQ/ledger-live/tools/actions/composites/checkout-merge@develop | |
with: | |
ref: ${{ (github.event_name == 'workflow_dispatch' && (inputs.ref || github.ref_name)) || github.sha }} | |
base: ${{ inputs.base_ref }} | |
- name: set git user | |
run: | | |
git config user.email "105061298+live-github-bot[bot]@users.noreply.github.com" | |
git config user.name "live-github-bot[bot]" | |
- name: Setup the toolchain | |
uses: ./tools/actions/composites/setup-toolchain | |
- uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: 3.1.2 | |
- name: Cache LLM pods | |
uses: actions/cache@v3 | |
with: | |
path: | | |
apps/ledger-live-mobile/ios/Pods | |
~/Library/Caches/CocoaPods | |
~/.cocoapods | |
key: ${{ runner.os }}-pods-${{ hashFiles('apps/ledger-live-mobile/ios/Podfile.lock') }} | |
- name: install dependencies | |
run: pnpm i --filter="live-mobile..." --filter="ledger-live" --no-frozen-lockfile --unsafe-perm | |
report: | |
runs-on: ubuntu-latest | |
needs: [build-mobile-app-android, build-mobile-app-ios] | |
if: always() && !cancelled() && github.event_name == 'workflow_dispatch' | |
steps: | |
- uses: actions/github-script@v6 | |
name: get statuses of runs | |
id: status | |
with: | |
script: | | |
const fs = require("fs"); | |
const statuses = [ | |
"${{ needs.build-mobile-app-android.result }}", | |
"${{ needs.build-mobile-app-ios.result }}", | |
]; | |
const [ owner, repo ] = "${{ github.repository }}".split("/"); | |
const jobs = await github.paginate(github.rest.actions.listJobsForWorkflowRunAttempt, { | |
owner, | |
repo, | |
run_id: "${{ github.run_id }}", | |
attempt_number: "${{ github.run_attempt }}", | |
}); | |
const findJobUrl = os => | |
jobs.find(job => job.name == `Build Ledger Live Mobile (${os})`)?.html_url; | |
const keys = { | |
ios: { | |
symbol: "🍏", | |
name: "iOS", | |
jobUrl: findJobUrl("Mac OS X") | |
}, | |
android: { | |
symbol: "🤖", | |
name: "Android", | |
jobUrl: findJobUrl("Android") | |
}, | |
}; | |
const report = { | |
android: { | |
pass: ${{ needs.build-mobile-app-android.result == 'success' }}, | |
status: "${{ needs.build-mobile-app-android.result }}", | |
}, | |
ios: { | |
pass: ${{ needs.build-mobile-app-ios.result == 'success' }}, | |
status: "${{ needs.build-mobile-app-ios.result }}", | |
}, | |
}; | |
const isFailed = statuses.some(e => e === "failure"); | |
const isCancelled = statuses.some(e => e === "cancelled"); | |
const iosSuccess = report.ios.pass; | |
let summary = ``; | |
summary += `|` | |
const reportKeys = Object.keys(report); | |
reportKeys.forEach((k) => { | |
summary += ` [${keys[k].symbol} ${keys[k].name}](${keys[k].jobUrl}) |`; | |
}); | |
summary += ` | |
|`; | |
for (let i = 0; i < reportKeys.length; i++) { | |
summary += ` :--: |`; | |
} | |
summary += ` | |
|`; | |
Object.entries(report).forEach(([os, values]) => { | |
summary += ` ${values.pass ? "✅" : "❌"} (${values.status}) |`; | |
}); | |
summary += ` | |
[⚙️ Summary](https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${{ github.run_id }}) | |
`; | |
const output = { | |
summary, | |
actions: iosSuccess ? [] : [{ | |
// 20 chars max | |
label: "Regen. Pods", | |
// 20 chars max | |
identifier: "regen_pods", | |
// 40 chars max | |
description: "Will regenerate cocoapods lockfile", | |
}], | |
} | |
fs.writeFileSync("summary.json", JSON.stringify(output), "utf-8"); | |
- uses: actions/upload-artifact@v3 | |
name: upload output | |
with: | |
path: ${{ github.workspace }}/summary.json | |
name: summary.json |