.github/workflows/build.yml #159
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
# build | |
on: | |
workflow_dispatch: | |
inputs: | |
repository: | |
default: viamrobotics/rdk | |
ref: | |
default: main | |
schedule: | |
- cron: '0 15 * * 1-5' | |
jobs: | |
daily: | |
runs-on: buildjet-8vcpu-ubuntu-2204 | |
container: ghcr.io/${{ github.repository }} | |
steps: | |
- name: sentry begin | |
run: curl ${{ secrets.SENTRY_CRONS }}?status=in_progress | |
- uses: actions/checkout@v4 | |
with: | |
path: rdk-apk | |
- uses: actions/checkout@v4 | |
with: | |
repository: ${{ inputs.repository || 'viamrobotics/rdk' }} | |
ref: ${{ inputs.ref }} | |
path: rdk | |
fetch-depth: 1000 # this is to make `git describe` work | |
fetch-tags: true | |
- name: extract keystore | |
# we do this so CI builds have consistent signing. otherwise you cannot `adb install` without uninstalling first | |
env: | |
DEBUG_KEYSTORE: ${{ secrets.DEBUG_KEYSTORE }} | |
run: | | |
mkdir -p ~/.android | |
[ -n "$DEBUG_KEYSTORE" ] && echo "$DEBUG_KEYSTORE" | base64 > ~/.android/debug.keystore | |
# todo: put x264 in same etc/android/prefix, then try pkgconfig | |
# todo: look at short-lived cache of etc/android/prefix | |
- name: build x264 | |
if: hashFiles('rdk/etc/android/build-x264.sh') != '' | |
working-directory: rdk | |
run: | | |
make etc/android/prefix/aarch64 | |
make etc/android/prefix/x86_64 | |
- name: build AAR | |
working-directory: rdk | |
run: PLATFORM_NDK_ROOT=$NDK_ROOT NDK_ROOT=$NDK_ROOT make droid-rdk.aar | |
# todo: pass down APK + RDK version information | |
- name: build APKs | |
working-directory: rdk-apk | |
shell: bash | |
run: | | |
mkdir ../dist | |
source $SDKMAN_DIR/bin/sdkman-init.sh | |
export APK_VERSION_SUFFIX=-$(date +%y%m%d)-$(cd ../rdk && git describe --tags)-$(git rev-parse --short HEAD) | |
# todo(review): is it safe to use gradle in path instead of gradlew? or way to make gradlew use system gradle? | |
RDK_PATH=$(realpath ../rdk/droid-rdk.arm64.aar) gradle --no-daemon assembleDebug | |
mv app/build/outputs/apk/debug/app-debug.apk \ | |
../dist/rdk$APK_VERSION_SUFFIX.aarch64.apk | |
RDK_PATH=$(realpath ../rdk/droid-rdk.amd64.aar) gradle --no-daemon assembleDebug | |
mv app/build/outputs/apk/debug/app-debug.apk \ | |
../dist/rdk$APK_VERSION_SUFFIX.x86_64.apk | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: Arm APK | |
path: dist/*.aarch64.apk | |
if-no-files-found: error | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: x86 APK | |
path: dist/*.x86_64.apk | |
if-no-files-found: error | |
# next few steps only run on event_name == 'schedule' | |
- name: rename to latest | |
if: github.event_name == 'schedule' | |
working-directory: dist | |
shell: bash | |
run: | | |
for arch in aarch64 x86_64; do | |
mv *.$arch.apk rdk-apk-latest.$arch.apk | |
done | |
- uses: google-github-actions/auth@v2 | |
if: github.event_name == 'schedule' | |
with: | |
credentials_json: '${{ secrets.GCP_CREDENTIALS }}' | |
- uses: google-github-actions/upload-cloud-storage@v2 | |
if: github.event_name == 'schedule' | |
with: | |
headers: "cache-control: no-cache" | |
path: dist/ | |
glob: rdk-apk-latest.*.apk | |
destination: packages.viam.com/apps/rdk-apk | |
parent: false | |
- name: sentry ok | |
if: success() | |
run: curl ${{ secrets.SENTRY_CRONS }}?status=ok | |
- name: sentry error | |
if: failure() | |
run: curl ${{ secrets.SENTRY_CRONS }}?status=error | |
# todo: get a working token and re-enable this | |
# - uses: slackapi/slack-github-action@v1 | |
# # todo: switch to slack integration when https://github.com/integrations/slack/issues/1563 is resolved (only report errors) | |
# if: github.event_name == 'schedule' && failure() | |
# with: | |
# payload: | | |
# { | |
# "text": "android daily build failed", | |
# "blocks": [ | |
# { | |
# "type": "section", | |
# "text": { | |
# "type": "mrkdwn", | |
# "text": "${{ github.workflow }} [run ${{ github.run_number }}](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})" | |
# } | |
# } | |
# ] | |
# } | |
# env: | |
# SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} |