Skip to content

0.25.0

0.25.0 #375

Workflow file for this run

name: ci
on:
pull_request:
types:
- opened
- synchronize
permissions:
contents: read
jobs:
classify:
runs-on: ubuntu-latest
name: Classify pull request
permissions:
pull-requests: read
outputs:
run_checks: ${{ steps.classify.outputs.other }}
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2
with:
repository: ${{ github.event.pull_request.base.repo.full_name }}
ref: ${{ github.event.pull_request.base.ref }}
persist-credentials: false
- name: Classify pull request
id: classify
uses: ./.github/actions/classify-pr
build:
runs-on: ubuntu-latest
name: Build Ackpine
needs: [ classify ]
if: needs.classify.outputs.run_checks == 'true'
permissions:
checks: write
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2
with:
persist-credentials: false
- name: Setup environment
uses: ./.github/actions/setup-gradle-environment-action
with:
gradle-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
- name: Validate binary compatibility
run: |
./gradlew :checkAckpineAbi || { exit_code=$?; printf "*** This PR changes Ackpine's public ABI. If this is intentional, run './gradlew :updateAckpineAbi' and commit the new ABI dumps. ***"; exit $exit_code; }
- name: Build
run: |
./gradlew :buildAckpine --stacktrace
unit-tests:
runs-on: ubuntu-latest
name: Unit tests
needs: [ classify, build ]
if: github.event.pull_request.merged != true && needs.classify.outputs.run_checks == 'true'
permissions:
checks: write
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2
with:
persist-credentials: false
- name: Setup environment
uses: ./.github/actions/setup-gradle-environment-action
with:
gradle-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
- name: Copy debug.keystore
run: |
mkdir -p /home/runner/.config/.android/
cp .github/debug.keystore /home/runner/.config/.android/debug.keystore
- name: Run unit tests
run: |
./gradlew test --stacktrace
- name: Publish test report
uses: mikepenz/action-junit-report@49b2ca06f62aa7ef83ae6769a2179271e160d8e4 # 6.3.1
if: success() || failure()
with:
report_paths: '**/build/**/TEST-*.xml'
- name: Upload coverage
uses: codecov/codecov-action@1af58845a975a7985b0beb0cbe6fbbb71a41dbad # 5.5.3
with:
token: ${{ secrets.CODECOV_TOKEN }}
device-tests:
runs-on: ubuntu-latest
name: Device tests (API ${{ matrix.api-level }})
needs: [ classify, build ]
if: github.event.pull_request.merged != true && needs.classify.outputs.run_checks == 'true'
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
api-level: [ 30, 31, 34 ] # https://issuetracker.google.com/issues/377321470
permissions:
checks: write
steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2
with:
persist-credentials: false
- name: Enable KVM
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
- name: Setup environment
uses: ./.github/actions/setup-gradle-environment-action
with:
gradle-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
- name: Copy debug.keystore
run: |
mkdir -p /home/runner/.config/.android/
cp .github/debug.keystore /home/runner/.config/.android/debug.keystore
- name: Accept Android licenses
run: |
yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses
- name: Cache AVD
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # 5.0.3
with:
path: /home/runner/.config/.android/avd
key: >-
avd-api${{ matrix.api-level }}-aosp-x86_64-${{ hashFiles(
'build-logic/src/main/kotlin/ru/solrudev/ackpine/gradle/testing/ManagedDevicesConventionPlugin.kt'
) }}
- name: Run device tests
run: |
./gradlew api${{ matrix.api-level }}DebugAndroidTest \
-Pandroid.testoptions.manageddevices.emulator.gpu=swiftshader_indirect \
--stacktrace
- name: Publish test report
uses: mikepenz/action-junit-report@49b2ca06f62aa7ef83ae6769a2179271e160d8e4 # 6.3.1
if: success() || failure()
with:
report_paths: '**/build/**/TEST-*.xml'
status-check:
runs-on: ubuntu-latest
if: always()
needs: [ classify, build, unit-tests, device-tests ]
steps:
- name: Check
run: |
results=$(tr -d '\n' <<< '${{ toJSON(needs.*.result) }}')
if ! grep -q -v -E '(failure|cancelled)' <<< "$results"; then
echo "One or more required jobs failed"
exit 1
fi