-
-
Notifications
You must be signed in to change notification settings - Fork 61
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #653 from lihenggui/feature/nightly_build
Nightly builds with baseline profiles
- Loading branch information
Showing
2 changed files
with
239 additions
and
28,818 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,239 @@ | ||
name: Nightly | ||
|
||
on: | ||
schedule: | ||
- cron: '0 5 * * *' | ||
|
||
concurrency: | ||
group: build-${{ github.ref }} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
test_and_apk: | ||
name: "Local tests and APKs" | ||
runs-on: ubuntu-latest | ||
|
||
permissions: | ||
contents: write | ||
security-events: write | ||
|
||
timeout-minutes: 60 | ||
|
||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
with: | ||
submodules: 'true' | ||
fetch-depth: 0 | ||
|
||
- name: Validate Gradle Wrapper | ||
uses: gradle/wrapper-validation-action@v1 | ||
|
||
# Consider using a scheduled job to clean up the runner disk space, and not on every build | ||
- name: Free Up GitHub Actions Ubuntu Runner Disk Space 🔧 | ||
uses: jlumbroso/free-disk-space@main | ||
with: | ||
tool-cache: false | ||
android: false | ||
dotnet: true | ||
haskell: true | ||
large-packages: true | ||
swap-storage: true | ||
|
||
- name: Write sign info | ||
if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main' && github.repository == 'lihenggui/Blocker' | ||
run: | | ||
if [ ! -z "${{ secrets.KEYSTORE }}" ]; then | ||
echo releaseStorePassword='${{ secrets.SIGNING_STORE_PASSWORD }}' >> gradle.properties | ||
echo releaseKeyAlias='${{ secrets.SIGNING_KEY_ALIAS }}' >> gradle.properties | ||
echo releaseKeyPassword='${{ secrets.SIGNING_KEY_PASSWORD }}' >> gradle.properties | ||
echo releaseStoreFile='${{ github.workspace }}/key.jks' >> gradle.properties | ||
echo ${{ secrets.KEYSTORE }} | base64 --decode > ${{ github.workspace }}/key.jks | ||
fi | ||
- name: Copy CI gradle.properties | ||
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties | ||
|
||
- name: Set up JDK 17 | ||
uses: actions/setup-java@v4 | ||
with: | ||
distribution: 'zulu' | ||
java-version: 17 | ||
|
||
- name: Setup Gradle | ||
uses: gradle/gradle-build-action@v2.11.1 | ||
|
||
- name: Accept Android licenses | ||
run: yes | "$ANDROID_HOME"/cmdline-tools/latest/bin/sdkmanager --licenses || true | ||
|
||
- name: Check build-logic | ||
run: ./gradlew check -p build-logic | ||
|
||
- name: Check spotless | ||
run: ./gradlew spotlessCheck --init-script gradle/init.gradle.kts --no-configuration-cache | ||
|
||
- name: Run all local screenshot tests (Roborazzi) | ||
id: screenshotsverify | ||
continue-on-error: true | ||
run: ./gradlew verifyRoborazziFossDebug | ||
|
||
- name: Prevent pushing new screenshots if this is a fork | ||
id: checkfork | ||
continue-on-error: false | ||
if: steps.screenshotsverify.outcome == 'failure' && github.event.pull_request.head.repo.full_name != github.repository | ||
run: | | ||
echo "::error::Screenshot tests failed, please create a PR in your fork first." && exit 1 | ||
# Runs if previous job failed | ||
- name: Generate new screenshots if verification failed and it's a PR | ||
id: screenshotsrecord | ||
if: steps.screenshotsverify.outcome == 'failure' && github.event_name == 'pull_request' | ||
run: | | ||
./gradlew recordRoborazziFossDebug | ||
- name: Push new screenshots if available | ||
uses: stefanzweifel/git-auto-commit-action@v5 | ||
if: steps.screenshotsrecord.outcome == 'success' | ||
with: | ||
file_pattern: '*/*.png' | ||
disable_globbing: true | ||
commit_message: "🤖 Updates screenshots" | ||
|
||
# Run local tests after screenshot tests to avoid wrong UP-TO-DATE. TODO: Ignore screenshots. | ||
- name: Run local tests | ||
if: always() | ||
run: ./gradlew testFossDebug :lint:test | ||
|
||
# Replace task exclusions with `-Pandroidx.baselineprofile.skipgeneration` when | ||
# https://android-review.googlesource.com/c/platform/frameworks/support/+/2602790 landed in a | ||
# release build | ||
- name: Build all build type and flavor permutations including baseline profiles | ||
run: ./gradlew :app-compose:assemble | ||
-Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=baselineprofile | ||
-Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" | ||
-Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true | ||
|
||
- name: Upload Market apk | ||
if: success() && github.event_name != 'pull_request' && github.repository == 'lihenggui/Blocker' | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: Market-APK | ||
path: ${{ github.workspace }}/app-compose/build/outputs/apk/market/release | ||
|
||
- name: Upload build outputs (APKs) | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: APKs | ||
path: '**/build/outputs/apk/**/*.apk' | ||
|
||
- name: Upload mappings | ||
if: success() && github.event_name != 'pull_request' && github.ref == 'refs/heads/main' | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: mappings | ||
path: "app-compose/build/outputs/mapping/marketRelease" | ||
|
||
- name: Set apk path | ||
id: apk-path | ||
run: | | ||
foss_path=$(find **/build/outputs/apk/foss -name '*.apk' -type f | head -1) | ||
echo "foss_path=$foss_path" >> $GITHUB_OUTPUT | ||
market_path=$(find **/build/outputs/apk/market -name '*.apk' -type f | head -1) | ||
echo "market_path=$market_path" >> $GITHUB_OUTPUT | ||
- name: Get apk info | ||
if: success() && github.event_name != 'pull_request' && github.repository == 'lihenggui/Blocker' | ||
id: apk-info | ||
uses: zhaobozhen/apk-info-action@1.1.2 | ||
with: | ||
apk-path: ${{ steps.apk-path.outputs.foss_path }} | ||
|
||
- name: Upload test results (XML) | ||
if: always() | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: test-results | ||
path: '**/build/test-results/test*UnitTest/**.xml' | ||
|
||
- name: Check lint | ||
run: ./gradlew :app-compose:lintMarketRelease :lint:lint | ||
|
||
- name: Upload lint reports (HTML) | ||
if: always() | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: lint-reports | ||
path: '**/build/reports/lint-results-*.html' | ||
|
||
- name: Upload lint reports (SARIF) | ||
if: success() | ||
uses: github/codeql-action/upload-sarif@v3 | ||
with: | ||
sarif_file: './' | ||
|
||
- name: Check badging | ||
run: ./gradlew :app-compose:checkMarketReleaseBadging | ||
|
||
androidTest: | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 90 | ||
strategy: | ||
matrix: | ||
api-level: [ 26, 30 ] | ||
|
||
steps: | ||
- name: Enable KVM group perms | ||
run: | | ||
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules | ||
sudo udevadm control --reload-rules | ||
sudo udevadm trigger --name-match=kvm | ||
ls /dev/kvm | ||
# Consider using a scheduled job to clean up the runner disk space, and not on every build | ||
- name: Free Up GitHub Actions Ubuntu Runner Disk Space 🔧 | ||
uses: jlumbroso/free-disk-space@main | ||
with: | ||
tool-cache: false | ||
android: false | ||
dotnet: true | ||
haskell: true | ||
large-packages: true | ||
swap-storage: true | ||
|
||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
with: | ||
submodules: 'true' | ||
fetch-depth: 0 | ||
|
||
- name: Copy CI gradle.properties | ||
run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties | ||
|
||
- name: Set up JDK 17 | ||
uses: actions/setup-java@v4 | ||
with: | ||
distribution: 'zulu' | ||
java-version: 17 | ||
|
||
- name: Setup Gradle | ||
uses: gradle/gradle-build-action@v2.11.1 | ||
|
||
- name: Build projects before running emulator | ||
run: ./gradlew packageFossDebug packageFossDebugAndroidTest | ||
|
||
- name: Run instrumentation tests | ||
uses: reactivecircus/android-emulator-runner@v2 | ||
with: | ||
api-level: ${{ matrix.api-level }} | ||
arch: x86_64 | ||
disable-animations: true | ||
disk-size: 6000M | ||
heap-size: 600M | ||
script: ./gradlew connectedMarketDebugAndroidTest --daemon | ||
|
||
- name: Upload test reports | ||
if: always() | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: test-reports-${{ matrix.api-level }} | ||
path: '**/build/reports/androidTests' |
Oops, something went wrong.