aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/release.yml
blob: b16c0d58c690bb2f1b5cbcaa6be323a844bf4cb6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
name: Dagger Release

on:
  workflow_dispatch:
    inputs:
      dagger_release_version:
        description: 'The Dagger version to use in this release.'
        required: true

env:
  USE_JAVA_DISTRIBUTION: 'zulu'
  USE_JAVA_VERSION: '11'
  # This is required by AGP 8.3+.
  USE_JAVA_VERSION_FOR_PLUGIN: '17'
  # Our Bazel builds currently rely on 6.4.0. The version is set via
  # baselisk by USE_BAZEL_VERSION: https://github.com/bazelbuild/bazelisk.
  USE_BAZEL_VERSION: '6.4.0'
  DAGGER_RELEASE_VERSION: "${{ github.event.inputs.dagger_release_version }}"
  # 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'

# TODO(bcorso):Convert these jobs into local composite actions to share with the
# continuous integration workflow.
jobs:
  validate-latest-dagger-version:
    name: 'Validate Dagger version'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/actions/prechecks
  bazel-build:
    name: 'Bazel build'
    needs: validate-latest-dagger-version
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/actions/bazel-build
  bazel-test:
    name: 'Bazel tests'
    needs: validate-latest-dagger-version
    runs-on:
      group: large-runner
      labels: ubuntu-22.04-16core
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/actions/bazel-test
  artifact-java-local-tests:
    name: 'Artifact Java local tests'
    needs: bazel-build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - 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@v3
      - 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: '7.0.0'
            jdk: '11'
          - agp: '7.1.2'
            jdk: '11'
          - agp: '8.1.0'
            jdk: '17'
    steps:
      - uses: actions/checkout@v3
      - uses: ./.github/actions/artifact-android-local-tests
        with:
          agp: '${{ matrix.agp }}'
          jdk: '${{ matrix.jdk }}'
  publish-artifacts:
    name: 'Publish Artifact'
    needs: [bazel-test, artifact-java-local-tests, artifact-android-local-tests, test-gradle-plugin]
    runs-on: ubuntu-latest
    steps:
      - name: 'Install Java ${{ env.USE_JAVA_VERSION }}'
        uses: actions/setup-java@v3
        with:
          distribution: '${{ env.USE_JAVA_DISTRIBUTION }}'
          java-version: '${{ env.USE_JAVA_VERSION }}'
          server-id: sonatype-nexus-staging
          server-username: CI_DEPLOY_USERNAME
          server-password: CI_DEPLOY_PASSWORD
          gpg-private-key: ${{ secrets.CI_GPG_PRIVATE_KEY }}
          gpg-passphrase: CI_GPG_PASSPHRASE
      - name: 'Check out repository'
        uses: actions/checkout@v3
      - name: 'Cache local Maven repository'
        uses: actions/cache@v3
        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@v3
        with:
          path: ~/.cache/bazel
          key: ${{ runner.os }}-bazel-build-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-bazel-build-
      - name: 'Cache Gradle files'
        uses: actions/cache@v3
        with:
          path: |
            ~/.gradle/caches
            ~/.gradle/wrapper
          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
          restore-keys: |
            ${{ runner.os }}-gradle-
      - name: Publish artifacts
        run: |
          util/deploy-all.sh \
            "gpg:sign-and-deploy-file" \
            "${{ env.DAGGER_RELEASE_VERSION }}" \
            "-DrepositoryId=sonatype-nexus-staging" \
            "-Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/"
        shell: bash
        env:
          CI_DEPLOY_USERNAME: ${{ secrets.CI_DEPLOY_USERNAME }}
          CI_DEPLOY_PASSWORD: ${{ secrets.CI_DEPLOY_PASSWORD }}
          CI_GPG_PASSPHRASE: ${{ secrets.CI_GPG_PASSPHRASE }}
      - name: 'Set git credentials'
        run: |
            git config --global user.email "dagger-dev+github@google.com"
            git config --global user.name "Dagger Team"
        shell: bash
      - name: 'Publish tagged release'
        run: util/publish-tagged-release.sh ${{ env.DAGGER_RELEASE_VERSION }}
        shell: bash
      - name: 'Publish tagged docs'
        run: util/publish-tagged-docs.sh ${{ env.DAGGER_RELEASE_VERSION }}
        shell: bash
        env:
          GH_TOKEN: ${{ github.token }}
      - 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