name: CI on: push: branches: - master pull_request: branches: - master env: USE_JAVA_DISTRIBUTION: 'zulu' USE_JAVA_VERSION: '11' # This is required by Gradle 8.0+. USE_JAVA_VERSION_FOR_GRADLE_PLUGIN: '17' # Required by JDK Toolchain Configuration USE_JAVA_VERSION_FOR_GRADLE: '18' # The default Maven 3.9.0 has a regression so we manually install 3.8.7. # https://issues.apache.org/jira/browse/MNG-7679 USE_MAVEN_VERSION: '3.8.7' jobs: validate-latest-dagger-version: name: 'Validate Dagger version' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: ./.github/actions/prechecks bazel-build: name: 'Bazel build' needs: validate-latest-dagger-version runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: ./.github/actions/bazel-build bazel-test: name: 'Bazel tests' needs: validate-latest-dagger-version runs-on: group: large-runner-group labels: ubuntu-22.04-16core steps: - uses: actions/checkout@v4 - uses: ./.github/actions/bazel-test gradle-build: name: 'Gradle build' runs-on: group: large-runner-group labels: ubuntu-22.04-16core steps: - uses: actions/checkout@v4 - uses: ./.github/actions/gradle-build artifact-verification-tests: name: 'Artifact verification tests' needs: bazel-build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: ./.github/actions/artifact-verification-tests artifact-java-local-tests: name: 'Artifact Java local tests' needs: bazel-build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: ./.github/actions/artifact-java-local-tests test-gradle-plugin: name: 'Test Hilt Gradle plugin' needs: bazel-build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: ./.github/actions/test-gradle-plugin artifact-android-local-tests: name: 'Artifact Android local tests (AGP ${{ matrix.agp }})' needs: bazel-build runs-on: ubuntu-latest strategy: matrix: include: - agp: '8.1.1' jdk: '17' steps: - uses: actions/checkout@v4 - uses: ./.github/actions/artifact-android-local-tests with: agp: '${{ matrix.agp }}' jdk: '${{ matrix.jdk }}' artifact-android-emulator-legacy-api-tests: name: 'Artifact Android emulator tests (API ${{ matrix.api-level }})' # We only run this on master push (essentially a postsubmit) since these # can take a while to run if: github.event_name == 'push' && github.repository == 'google/dagger' && github.ref == 'refs/heads/master' needs: bazel-build # It's recommended to run emulator tests on macOS # See https://github.com/marketplace/actions/android-emulator-runner runs-on: macos-latest strategy: matrix: # Run on 16 (PreL), 21 (L), and 26 (O). api-level: [16, 21, 26, 30] steps: - uses: actions/checkout@v4 - uses: ./.github/actions/artifact-android-emulator-tests timeout-minutes: 35 with: api-level: '${{ matrix.api-level }}' publish-snapshot: name: 'Publish snapshot' # TODO(bcorso): Consider also waiting on artifact-android-emulator-tests # and artifact-android-emulator-legacy-api-tests after checking flakiness. needs: [ bazel-test, artifact-verification-tests, artifact-java-local-tests, artifact-android-local-tests, test-gradle-plugin ] if: github.event_name == 'push' && github.repository == 'google/dagger' && github.ref == 'refs/heads/master' runs-on: ubuntu-latest steps: - name: 'Install Java ${{ env.USE_JAVA_VERSION }}' uses: actions/setup-java@v4 with: distribution: '${{ env.USE_JAVA_DISTRIBUTION }}' java-version: '${{ env.USE_JAVA_VERSION }}' server-id: sonatype-nexus-snapshots server-username: CI_DEPLOY_USERNAME server-password: CI_DEPLOY_PASSWORD - name: 'Check out repository' uses: actions/checkout@v4 - name: 'Cache local Maven repository' uses: actions/cache@v4 with: path: | ~/.m2/repository !~/.m2/repository/com/google/dagger key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} restore-keys: | ${{ runner.os }}-maven- - name: 'Cache Bazel files' uses: actions/cache@v4 with: path: ~/.cache/bazel key: ${{ runner.os }}-bazel-build-${{ github.sha }} restore-keys: | ${{ runner.os }}-bazel-build- - name: 'Cache Gradle files' uses: actions/cache@v4 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle- - name: 'Publish latest docs' run: ./util/generate-latest-docs.sh shell: bash env: GH_TOKEN: ${{ github.token }} - name: 'Publish latest snapshot' run: | util/deploy-all.sh \ "deploy:deploy-file" \ "HEAD-SNAPSHOT" \ "-DrepositoryId=sonatype-nexus-snapshots" \ "-Durl=https://oss.sonatype.org/content/repositories/snapshots" shell: bash env: CI_DEPLOY_USERNAME: ${{ secrets.CI_DEPLOY_USERNAME }} CI_DEPLOY_PASSWORD: ${{ secrets.CI_DEPLOY_PASSWORD }} - name: 'Clean bazel cache' # According to the documentation, we should be able to exclude these via # the actions/cache path, e.g. "!~/.cache/bazel/*/*/external/" but that # doesn't seem to work. run: | rm -rf $(bazel info repository_cache) rm -rf ~/.cache/bazel/*/*/external/ shell: bash build-gradle-plugin-latest-agp: name: 'Build Hilt Gradle plugin against latest AGP version' # We only run this on master push (essentially a postsubmit) since we # don't want this job to prevent merges if: github.event_name == 'push' && github.repository == 'google/dagger' && github.ref == 'refs/heads/master' needs: bazel-build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: ./.github/actions/build-gradle-plugin with: agp: '+' cleanup-caches: name: 'Clean up GitHub Action caches' # TODO(bcorso): Consider also waiting on artifact-android-emulator-tests # and artifact-android-emulator-legacy-api-tests after checking flakiness. needs: [ bazel-test, artifact-verification-tests, artifact-java-local-tests, artifact-android-local-tests, test-gradle-plugin ] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: ./.github/actions/cleanup-caches