name: Build on: workflow_call: inputs: instrumentation: description: 'run with instrumentation tests' default: false required: false type: boolean jobs: BuildAndTestAndCoverage: runs-on: ubuntu-latest steps: - name: Check out repository code uses: actions/checkout@v4 with: fetch-depth: 0 - name: "Check android app changes" id: check-android-changes uses: tj-actions/changed-files@v45 with: files: | androidApp/src/** shared/src/commonMain/** shared/src/androidMain/** shared/src/commonTest/** - name: Fetch tags if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} run: git fetch --tags -p - uses: actions/setup-java@v4 if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} with: distribution: 'temurin' java-version: '17' - uses: gradle/actions/setup-gradle@v3 if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} - uses: android-actions/setup-android@v3 if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} - name: Configure gradle... if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} run: mkdir -p ~/.gradle && echo "org.gradle.daemon=false\nignoreGitVersion=true" >> ~/.gradle/gradle.properties - name: Change url until I find a better way to do it if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} && ${{ inputs.instrumentation }} run: | sed -i "s/const DEFAULT_URL = \"http:\/\/10\.0\.2\.2\:8888\"/const DEFAULT_URL = \"http:\/\/172\.17\.0\.1\:8888\"/g" ./androidApp/src/androidTest/kotlin/bou/amine/apps/readerforselfossv2/android/CommonTests.kt - name: Build and test if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} run: ./gradlew build -x testReleaseUnitTest -x testDebugUnitTest -x testGithubConfigReleaseUnitTest -x testGithubConfigDebugUnitTest - name: coverage if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} run: | ./gradlew :koverHtmlReport - uses: actions/upload-artifact@v3 if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} with: name: coverage path: build/reports/kover/html retention-days: 1 overwrite: true include-hidden-files: true - uses: KengoTODA/actions-setup-docker-compose@v1 if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} && ${{ inputs.instrumentation }} with: version: "2.23.3" - name: run selfoss if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} && ${{ inputs.instrumentation }} run: | docker compose -f .gitea/workflows/assets/docker-compose.yml up -d - name: Tests if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} && ${{ inputs.instrumentation }} uses: reactivecircus/android-emulator-runner@v2 with: api-level: 29 profile: pixel_2 script: | ./gradlew androidApp:clearScreenshotsTask || true ./gradlew androidApp:createScreenshotDirectory adb logcat -G 16M ./gradlew JacocoDebugCodeCoverage || (./gradlew androidApp:fetchScreenshots && adb logcat 'InputReader:S' 'chatty:S' 'audio_hw_generic:S' 'LogApiCalls:D' '*:I' -d > ./androidApp/build/reports/androidTests/connected/screenshots/logs.txt) - uses: actions/upload-artifact@v3 if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} && ${{ inputs.instrumentation }} with: name: screenshot-espresso path: androidApp/build/reports/androidTests/connected/screenshots retention-days: 2 overwrite: true include-hidden-files: true - uses: actions/upload-artifact@v3 if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} && ${{ inputs.instrumentation }} with: path: androidApp/build/reports/androidTests/connected/debug/flavors/githubConfig retention-days: 1 overwrite: true include-hidden-files: true - uses: actions/upload-artifact@v3 if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} && ${{ inputs.instrumentation }} with: name: coverage-espresso path: androidApp/build/reports/jacoco/JacocoDebugCodeCoverage retention-days: 1 overwrite: true include-hidden-files: true - name: Clean if: ${{ steps.check-android-changes.outputs.any_modified == 'true' }} && ${{ inputs.instrumentation }} || failure() run: | docker compose -f .gitea/workflows/assets/docker-compose.yml stop