forked from github/wulkanowy-mirror
142 lines
4.7 KiB
YAML
142 lines
4.7 KiB
YAML
name: Test and deploy
|
|
|
|
on:
|
|
push:
|
|
branches: [ develop ]
|
|
tags: [ '*' ]
|
|
pull_request:
|
|
branches: [ develop ]
|
|
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
build:
|
|
name: Pre-build
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: fkirc/skip-duplicate-actions@master
|
|
- uses: actions/checkout@v2
|
|
- uses: gradle/wrapper-validation-action@v1
|
|
- uses: actions/setup-java@v1
|
|
with:
|
|
java-version: 11
|
|
- uses: actions/cache@v2
|
|
with:
|
|
path: |
|
|
~/.gradle/caches
|
|
~/.gradle/wrapper
|
|
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*') }}
|
|
- name: Build
|
|
run: ./gradlew --build-cache compileFdroidDebugUnitTestKotlin preFdroidDebugAndroidTestBuild dexBuilderFdroidDebugAndroidTest packageFdroidDebug packageFdroidDebugAndroidTest
|
|
- name: Prepare build cache
|
|
run: tar -cf prebuild.tar .build-cache .gradle app/build
|
|
- uses: actions/upload-artifact@v2
|
|
with:
|
|
name: prebuild.tar
|
|
path: prebuild.tar
|
|
|
|
unit-tests:
|
|
name: Unit tests
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
needs: [ build ]
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions/setup-java@v1
|
|
with:
|
|
java-version: 11
|
|
- uses: actions/cache@v2
|
|
with:
|
|
path: |
|
|
~/.gradle/caches
|
|
~/.gradle/wrapper
|
|
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*') }}
|
|
- uses: actions/download-artifact@v2
|
|
with:
|
|
name: prebuild.tar
|
|
- name: Extract build cache
|
|
run: tar -xf prebuild.tar
|
|
- name: Unit tests
|
|
run: |
|
|
./gradlew --build-cache -Pcoverage testFdroidDebugUnitTest --stacktrace
|
|
./gradlew --build-cache -Pcoverage jacocoTestReport --stacktrace
|
|
- uses: codecov/codecov-action@v1
|
|
with:
|
|
flags: unit
|
|
|
|
instrumentation-tests:
|
|
name: Instrumentation tests
|
|
runs-on: macOS-latest
|
|
timeout-minutes: 15
|
|
needs: [ build ]
|
|
strategy:
|
|
fail-fast: true
|
|
matrix:
|
|
api-level: [21, 29]
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions/setup-java@v1
|
|
with:
|
|
java-version: 11
|
|
- uses: actions/cache@v2
|
|
with:
|
|
path: |
|
|
~/.gradle/caches
|
|
~/.gradle/wrapper
|
|
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*') }}
|
|
- uses: actions/download-artifact@v2
|
|
with:
|
|
name: prebuild.tar
|
|
- name: Extract build cache
|
|
run: tar -xf prebuild.tar
|
|
- name: Instrumentation tests
|
|
uses: reactivecircus/android-emulator-runner@v2.13.0
|
|
with:
|
|
api-level: ${{ matrix.api-level }}
|
|
arch: x86
|
|
script: |
|
|
./gradlew --build-cache -Pcoverage connectedFdroidDebugAndroidTest --stacktrace
|
|
./gradlew --build-cache -Pcoverage jacocoTestReport --stacktrace
|
|
- uses: codecov/codecov-action@v1
|
|
with:
|
|
flags: instrumented,api-${{ matrix.api-level }}
|
|
|
|
deploy-google-play:
|
|
name: Deploy to google play
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
environment: google-play
|
|
needs: [ build, unit-tests, instrumentation-tests ]
|
|
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions/setup-java@v1
|
|
with:
|
|
java-version: 11
|
|
- uses: actions/cache@v2
|
|
with:
|
|
path: |
|
|
~/.gradle/caches
|
|
~/.gradle/wrapper
|
|
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*') }}
|
|
- uses: actions/download-artifact@v2
|
|
with:
|
|
name: prebuild.tar
|
|
- name: Extract build cache
|
|
run: tar -xf prebuild.tar
|
|
- name: Decrypt keys
|
|
env:
|
|
ENCRYPT_KEY: ${{ secrets.ENCRYPT_KEY }}
|
|
SERVICES_ENCRYPT_KEY: ${{ secrets.SERVICES_ENCRYPT_KEY }}
|
|
run: |
|
|
gpg --yes --batch --passphrase=$SERVICES_ENCRYPT_KEY ./app/src/release/google-services.json.gpg
|
|
gpg --yes --batch --passphrase=$ENCRYPT_KEY ./app/key.p12.gpg
|
|
gpg --yes --batch --passphrase=$ENCRYPT_KEY ./app/upload-key.jks.gpg
|
|
- name: Upload apk to google play
|
|
env:
|
|
PLAY_KEY_PASSWORD: ${{ secrets.PLAY_KEY_PASSWORD }}
|
|
PLAY_SERVICE_ACCOUNT_EMAIL: ${{ secrets.PLAY_SERVICE_ACCOUNT_EMAIL }}
|
|
PLAY_STORE_PASSWORD: ${{ secrets.PLAY_STORE_PASSWORD }}
|
|
run: ./gradlew publishPlayRelease -PenableFirebase --stacktrace;
|