mirror of
https://github.com/servo/servo
synced 2026-05-12 09:56:50 +02:00
We have been having intermittent issues with sccache since around the recent v0.9 release of sccache which only appear when building mozjs from source. Due to recent changes with readablestreams, we are not using the prebuilt mozjs artifacts anymore and always building from source, causing these problems to regularly block the merge queue. Bumping SCCACHE_GHA_VERSION helps but has been observed to only be a temporary solution until the next breakage. Closes #34571 Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com>
140 lines
5.3 KiB
YAML
140 lines
5.3 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
|
|
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: Install crown
|
|
run: cargo install --path support/crown
|
|
- name: Setup Python
|
|
uses: ./.github/actions/setup-python
|
|
- 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 Gradle caches
|
|
uses: gradle/actions/setup-gradle@v4
|
|
- name: Trigger initial download of Gradle with retries
|
|
run: |
|
|
for i in {1..4}; do
|
|
./gradlew --version && break || { echo "Downloading Gradle failed (attempt $i)." && sleep $((3 ** $i)); };
|
|
done
|
|
working-directory: ./support/android/apk/
|
|
- 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
|