diff --git a/.github/workflows/android-shopping-ci.yml b/.github/workflows/android-shopping-ci.yml new file mode 100644 index 0000000..99ec56e --- /dev/null +++ b/.github/workflows/android-shopping-ci.yml @@ -0,0 +1,114 @@ +name: Android Shopping App CI +on: + push: + branches: [ main, develop, master, 'feature/**' ] + pull_request: + branches: [ main, develop ] + +jobs: + code-quality: + name: Code Quality Checks + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: 'gradle' + - name: Grant execute permission + run: chmod +x gradlew + - name: Run Lint + run: ./gradlew lintDebug + - name: Upload lint report + if: always() + uses: actions/upload-artifact@v3 + with: + name: lint-results + path: app/build/reports/lint-results-debug.html + - name: Run Detekt + run: ./gradlew detekt + - name: Upload detekt report + if: always() + uses: actions/upload-artifact@v3 + with: + name: detekt-results + path: app/build/reports/detekt/detekt.html + + unit-tests: + name: Unit Tests + needs: code-quality + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: 'gradle' + - name: Run unit tests + run: ./gradlew testDebugUnitTest --stacktrace + - name: Generate coverage report + run: ./gradlew jacocoTestReport + - name: Upload test results + if: always() + uses: actions/upload-artifact@v3 + with: + name: unit-test-results + path: app/build/reports/tests/testDebugUnitTest/ + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + with: + files: app/build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml + flags: unittests + + instrumented-tests: + name: Instrumented Tests + needs: code-quality + runs-on: macos-latest + strategy: + matrix: + api-level: [28, 30, 33] + steps: + - uses: actions/checkout@v3 + - name: Setup JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + - name: Run instrumented tests + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: ${{ matrix.api-level }} + target: google_apis + arch: x86_64 + profile: Nexus 6 + script: ./gradlew connectedDebugAndroidTest + - name: Upload test results + if: always() + uses: actions/upload-artifact@v3 + with: + name: instrumented-test-results-api-${{ matrix.api-level }} + path: app/build/reports/androidTests/connected/ + + build-debug: + name: Build Debug APK + needs: [unit-tests] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: 'gradle' + - name: Build debug APK + run: ./gradlew assembleDebug + - name: Upload debug APK + uses: actions/upload-artifact@v3 + with: + name: app-debug + path: app/build/outputs/apk/debug/app-debug.apk diff --git a/.github/workflows/android-shopping-ci2.yml b/.github/workflows/android-shopping-ci2.yml new file mode 100644 index 0000000..1ff5841 --- /dev/null +++ b/.github/workflows/android-shopping-ci2.yml @@ -0,0 +1,76 @@ +name: Android CI Lite + +on: + push: + branches: [ main, develop, master, 'feature/**' ] + pull_request: + branches: [ main, develop ] + +jobs: + code-quality: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: 'gradle' + - name: Grant execute permission + run: chmod +x gradlew + - name: Run Lint + run: ./gradlew lintDebug + - name: Upload Lint report + if: always() + uses: actions/upload-artifact@v3 + with: + name: lint-results + path: app/build/reports/lint-results-debug.html + - name: Run Detekt + run: ./gradlew detekt + - name: Upload Detekt report + if: always() + uses: actions/upload-artifact@v3 + with: + name: detekt-results + path: app/build/reports/detekt/detekt.html + + unit-tests: + needs: code-quality + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: 'gradle' + - name: Run Unit Tests + run: ./gradlew testDebugUnitTest --stacktrace + - name: Upload Unit Test Results + if: always() + uses: actions/upload-artifact@v3 + with: + name: unit-test-results + path: app/build/reports/tests/testDebugUnitTest/ + + build-debug: + needs: unit-tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: 'gradle' + - name: Build Debug APK + run: ./gradlew assembleDebug + - name: Upload Debug APK + uses: actions/upload-artifact@v3 + with: + name: app-debug + path: app/build/outputs/apk/debug/app-debug.apk diff --git a/.github/workflows/android-shopping-ci3.yml b/.github/workflows/android-shopping-ci3.yml new file mode 100644 index 0000000..99ec56e --- /dev/null +++ b/.github/workflows/android-shopping-ci3.yml @@ -0,0 +1,114 @@ +name: Android Shopping App CI +on: + push: + branches: [ main, develop, master, 'feature/**' ] + pull_request: + branches: [ main, develop ] + +jobs: + code-quality: + name: Code Quality Checks + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: 'gradle' + - name: Grant execute permission + run: chmod +x gradlew + - name: Run Lint + run: ./gradlew lintDebug + - name: Upload lint report + if: always() + uses: actions/upload-artifact@v3 + with: + name: lint-results + path: app/build/reports/lint-results-debug.html + - name: Run Detekt + run: ./gradlew detekt + - name: Upload detekt report + if: always() + uses: actions/upload-artifact@v3 + with: + name: detekt-results + path: app/build/reports/detekt/detekt.html + + unit-tests: + name: Unit Tests + needs: code-quality + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: 'gradle' + - name: Run unit tests + run: ./gradlew testDebugUnitTest --stacktrace + - name: Generate coverage report + run: ./gradlew jacocoTestReport + - name: Upload test results + if: always() + uses: actions/upload-artifact@v3 + with: + name: unit-test-results + path: app/build/reports/tests/testDebugUnitTest/ + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + with: + files: app/build/reports/jacoco/jacocoTestReport/jacocoTestReport.xml + flags: unittests + + instrumented-tests: + name: Instrumented Tests + needs: code-quality + runs-on: macos-latest + strategy: + matrix: + api-level: [28, 30, 33] + steps: + - uses: actions/checkout@v3 + - name: Setup JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + - name: Run instrumented tests + uses: reactivecircus/android-emulator-runner@v2 + with: + api-level: ${{ matrix.api-level }} + target: google_apis + arch: x86_64 + profile: Nexus 6 + script: ./gradlew connectedDebugAndroidTest + - name: Upload test results + if: always() + uses: actions/upload-artifact@v3 + with: + name: instrumented-test-results-api-${{ matrix.api-level }} + path: app/build/reports/androidTests/connected/ + + build-debug: + name: Build Debug APK + needs: [unit-tests] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + cache: 'gradle' + - name: Build debug APK + run: ./gradlew assembleDebug + - name: Upload debug APK + uses: actions/upload-artifact@v3 + with: + name: app-debug + path: app/build/outputs/apk/debug/app-debug.apk