name: Tests on: push: branches: [master] pull_request: branches: [master] jobs: build: runs-on: ubuntu-latest outputs: cache-key: ${{ steps.cache-key-generator.outputs.key }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up JDK 21 uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '21' - name: Generate cache key id: cache-key-generator run: echo "key=gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}" >> $GITHUB_OUTPUT - name: Cache Gradle dependencies uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ steps.cache-key-generator.outputs.key }} restore-keys: | gradle-${{ runner.os }}- - name: Grant execute permission to Gradle wrapper run: chmod +x gradlew lint: needs: build runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up JDK 21 uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '21' - name: Restore Gradle cache uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ needs.build.outputs.cache-key }} restore-keys: | gradle-${{ runner.os }}- - name: Grant execute permission to Gradle wrapper run: chmod +x gradlew - name: Run lint run: ./gradlew ktlintCheck - name: Publish ktlint report uses: yutailang0119/action-ktlint@v4 if: always() with: report-path: build/reports/ktlint/**/*.xml # ignore-warnings: true # Ignore Lint Warnings continue-on-error: false test: needs: build runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up JDK 21 uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '21' - name: Restore Gradle cache uses: actions/cache@v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ needs.build.outputs.cache-key }} restore-keys: | gradle-${{ runner.os }}- - name: Grant execute permission to Gradle wrapper run: chmod +x gradlew - name: Start CI Docker Compose services run: ./gradlew composeUp -Pci - name: Run tests run: ./gradlew test -x composeUp --no-daemon - name: Upload test reports if: always() uses: actions/upload-artifact@v4 with: name: test-results path: build/reports/tests/test - name: Publish Test Report uses: dorny/test-reporter@v1 if: always() with: name: JUnit Tests path: build/test-results/test/TEST-*.xml reporter: java-junit