name: Build & test on: push: branches: - main - compose-1.0 - compose-1.0 - compose-1.1 - compose-1.2 - compose-1.3 - compose-1.4 - compose-1.5 paths-ignore: - '**.md' pull_request: jobs: build: # Skip build if head commit contains 'skip ci' if: "!contains(github.event.head_commit.message, 'skip ci')" runs-on: ubuntu-latest timeout-minutes: 45 steps: - uses: actions/checkout@v2 with: # Fetch expanded history, which is needed for affected module detection fetch-depth: '500' - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Setup java uses: actions/setup-java@v3 with: distribution: temurin java-version: 17 - name: Decrypt secrets run: release/signing-setup.sh ${{ secrets.ENCRYPT_KEY }} - name: Setup Gradle uses: gradle/gradle-build-action@v2 - name: Build run: | ./gradlew --scan --stacktrace \ spotlessCheck \ assemble \ metalavaCheckCompatibilityRelease \ lintDebug - name: Unit Tests run: | ./scripts/run-tests.sh \ --unit-tests \ --run-affected \ --affected-base-ref=$BASE_REF - name: Upload test results if: always() uses: actions/upload-artifact@v2 with: name: test-results-robolectric path: | **/build/test-results/* **/build/reports/* - name: Clean secrets if: always() run: release/signing-cleanup.sh test: runs-on: macos-latest needs: build timeout-minutes: 70 strategy: # Allow tests to continue on other devices if they fail on one device. fail-fast: false matrix: api-level: [ 22, 26, 29 ] shard: [ 0, 1 ] # Need to update shard-count below if this changes env: TERM: dumb steps: - uses: actions/checkout@v3 with: # Fetch expanded history, which is needed for affected module detection fetch-depth: '500' - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Setup java uses: actions/setup-java@v3 with: distribution: temurin java-version: 17 - name: Decrypt secrets run: release/signing-setup.sh ${{ secrets.ENCRYPT_KEY }} - name: Setup Gradle uses: gradle/gradle-build-action@v2 # Determine what emulator image to use. We run all API 28+ emulators using # the google_apis image - name: Determine emulator target id: determine-target env: API_LEVEL: ${{ matrix.api-level }} run: | TARGET="default" if [ "$API_LEVEL" -ge "28" ]; then TARGET="google_apis" fi echo "TARGET=$TARGET" >> $GITHUB_OUTPUT - name: Determine emulator arch id: determine-arch env: API_LEVEL: ${{ matrix.api-level }} run: | ARCH="x86" if [ "$API_LEVEL" -ge "31" ]; then ARCH="x86_64" fi echo "ARCH=$ARCH" >> $GITHUB_OUTPUT - name: Run tests uses: reactivecircus/android-emulator-runner@v2 with: api-level: ${{ matrix.api-level }} arch: ${{ steps.determine-arch.outputs.ARCH }} target: ${{ steps.determine-target.outputs.TARGET }} profile: Galaxy Nexus script: ./scripts/run-tests.sh --log-file=logcat.txt --run-affected --affected-base-ref=$BASE_REF --shard-index=${{ matrix.shard }} --shard-count=2 - name: Clean secrets if: always() run: release/signing-cleanup.sh - name: Upload logs if: always() uses: actions/upload-artifact@v2 with: name: logs-${{ matrix.api-level }}-${{ steps.determine-target.outputs.TARGET }}-${{ matrix.shard }} path: logcat.txt - name: Upload test results if: always() uses: actions/upload-artifact@v2 with: name: test-results-${{ matrix.api-level }}-${{ steps.determine-target.outputs.TARGET }}-${{ matrix.shard }} path: | **/build/reports/* **/build/outputs/*/connected/* deploy: if: github.event_name == 'push' # only deploy for pushed commits (not PRs) runs-on: ubuntu-latest needs: [ build, test ] timeout-minutes: 30 env: TERM: dumb steps: - uses: actions/checkout@v2 - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Setup java uses: actions/setup-java@v3 with: distribution: temurin java-version: 17 - name: Decrypt secrets run: release/signing-setup.sh ${{ secrets.ENCRYPT_KEY }} - name: Setup Gradle uses: gradle/gradle-build-action@v2 - name: Deploy to Sonatype run: ./gradlew publish --no-parallel --stacktrace --no-configuration-cache env: ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME }} ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_NEXUS_PASSWORD }} - name: Clean secrets if: always() run: release/signing-cleanup.sh