mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
* android: publish nightly builds for aarch64 Publish the aarch64 apk and aar packages to both Github Releases and S3 so that it can be linked from servo.org. The focus is on getting a working version of the APK on the homepage, so few issues are resolved with temporary solutions: 1) We publish the "release" profile instead of "production" since the latter will need changes in the gradle configuration (the changes required was previously blocked on #32720 which is now closed). 2) The scheme for the version code is simple and doesn't consider other factors such as API level and product variants discussed in the Android docs (https://developer.android.com/google/play/publishing/multiple-apks#VersionCodes) This should be fine for now as we don't publish to any store yet. The change also makes it so that the 'Release nightly' workflow will endup building all 4 variants for the Android target, but only aarch64 is uploaded. This is because GH Actions doesn't have a good way to skip a specific job in a matrix and the additionally code complexity needed to acheive it (either generating a JSON dynamically in a new job and using `fromJSON` in the matrix definition or skipping each individual step based on matrix.target and `inputs.upload`) didn't seem worth the cost saved (this is executed only once a day). Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com> * android: add attestation for nightly build artifacts Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com> --------- Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
136 lines
5.1 KiB
YAML
136 lines
5.1 KiB
YAML
name: Android
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
profile:
|
|
required: false
|
|
default: "release"
|
|
type: string
|
|
upload:
|
|
required: false
|
|
default: false
|
|
type: boolean
|
|
github-release-id:
|
|
required: false
|
|
type: string
|
|
workflow_dispatch:
|
|
inputs:
|
|
profile:
|
|
required: false
|
|
default: "release"
|
|
type: choice
|
|
options: ["release", "debug", "production"]
|
|
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
SHELL: /bin/bash
|
|
SCCACHE_GHA_ENABLED: "true"
|
|
RUSTC_WRAPPER: "sccache"
|
|
CCACHE: "sccache"
|
|
CARGO_INCREMENTAL: 0
|
|
|
|
jobs:
|
|
build:
|
|
name: Android Build
|
|
runs-on: ubuntu-22.04
|
|
strategy:
|
|
matrix:
|
|
target: ['aarch64-linux-android', 'armv7-linux-androideabi', 'i686-linux-android', 'x86_64-linux-android']
|
|
steps:
|
|
- name: Free Disk Space (Ubuntu)
|
|
uses: jlumbroso/free-disk-space@main
|
|
with:
|
|
tool-cache: false
|
|
android: false
|
|
large-packages: false
|
|
swap-storage: false
|
|
- uses: actions/checkout@v4
|
|
if: github.event_name != 'pull_request_target'
|
|
with:
|
|
fetch-depth: 2
|
|
# This is necessary to checkout the pull request if this run was triggered via a
|
|
# `pull_request_target` event.
|
|
- uses: actions/checkout@v4
|
|
if: github.event_name == 'pull_request_target'
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
fetch-depth: 2
|
|
- name: Run sccache-cache
|
|
uses: mozilla-actions/sccache-action@v0.0.4
|
|
- name: Install crown
|
|
run: cargo install --path support/crown
|
|
- name: Bootstrap Python
|
|
run: python3 -m pip install --upgrade pip virtualenv
|
|
- name: Bootstrap dependencies
|
|
run: sudo apt update && python3 ./mach bootstrap --skip-lints
|
|
- name: Set up JDK 17
|
|
uses: actions/setup-java@v4
|
|
with:
|
|
java-version: '17'
|
|
distribution: 'temurin'
|
|
- name: Setup Android SDK
|
|
uses: android-actions/setup-android@v3
|
|
with:
|
|
packages: 'tools platform-tools platforms;android-33'
|
|
- name: Install Android NDK
|
|
uses: nttld/setup-ndk@v1
|
|
id: setup-ndk
|
|
with:
|
|
ndk-version: r26c
|
|
- name: Setup Key Store for APK Signing
|
|
env:
|
|
KEYSTORE_BASE64: ${{ secrets.APK_KEYSTORE_BASE64 }}
|
|
if: ${{ env.KEYSTORE_BASE64 != '' }}
|
|
run: |
|
|
APK_SIGNING_KEY_STORE_PATH="${PWD}/servo_keystore.jks"
|
|
echo "${KEYSTORE_BASE64}" | base64 -d > "${APK_SIGNING_KEY_STORE_PATH}"
|
|
echo "APK_SIGNING_KEY_STORE_PATH=${APK_SIGNING_KEY_STORE_PATH}" >> ${GITHUB_ENV}
|
|
- name: Build (arch ${{ matrix.target }} profile ${{ inputs.profile }})
|
|
env:
|
|
ANDROID_NDK_ROOT: ${{ steps.setup-ndk.outputs.ndk-path }}
|
|
APK_SIGNING_KEY_STORE_PASS: ${{ secrets.APK_SIGNING_KEY_STORE_PASS }}
|
|
APK_SIGNING_KEY_ALIAS: ${{ secrets.APK_SIGNING_KEY_ALIAS }}
|
|
APK_SIGNING_KEY_PASS: ${{ secrets.APK_SIGNING_KEY_PASS }}
|
|
run: |
|
|
python3 ./mach build --use-crown --locked --target ${{ matrix.target }} --${{ inputs.profile }}
|
|
cp -r target/cargo-timings target/cargo-timings-android-${{ matrix.target }}
|
|
# TODO: This is disabled since APK crashes during startup.
|
|
# See https://github.com/servo/servo/issues/31134
|
|
# - name: Script tests
|
|
# run: ./mach test-android-startup
|
|
- name: Archive build timing
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: cargo-timings-android-${{ matrix.target }}
|
|
# Using a wildcard here ensures that the archive includes the path.
|
|
path: target/cargo-timings-*
|
|
- name: Upload nightly
|
|
if: ${{ inputs.upload && contains(matrix.target, 'aarch64') }}
|
|
run: |
|
|
python3 ./mach upload-nightly android \
|
|
--secret-from-environment \
|
|
--github-release-id ${{ inputs.github-release-id }}
|
|
env:
|
|
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
|
|
NIGHTLY_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
|
|
NIGHTLY_REPO: ${{ github.repository_owner }}/servo-nightly-builds
|
|
- name: Generate artifact attestation for APK
|
|
if: ${{ inputs.upload }}
|
|
uses: actions/attest-build-provenance@v1
|
|
with:
|
|
subject-path: target/android/${{ matrix.target }}/${{ inputs.profile }}/servoapp.apk
|
|
- name: Upload APK artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ inputs.profile }}-binary-android-${{ matrix.target }}
|
|
path: target/android/${{ matrix.target }}/${{ inputs.profile }}/servoapp.apk
|
|
- name: Generate artifact attestation for AAR
|
|
if: ${{ inputs.upload }}
|
|
uses: actions/attest-build-provenance@v1
|
|
with:
|
|
subject-path: target/android/${{ matrix.target }}/${{ inputs.profile }}/servoview.aar
|
|
- name: Upload AAR artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ inputs.profile }}-library-android-${{ matrix.target }}
|
|
path: target/android/${{ matrix.target }}/${{ inputs.profile }}/servoview.aar
|