name: Test develocity injection

on:
  workflow_call:
    inputs:
      cache-key-prefix:
        type: string
        default: '0'
      runner-os:
        type: string
        default: '["ubuntu-latest"]'
      skip-dist:
        type: boolean
        default: false
    secrets:
      DEVELOCITY_ACCESS_KEY:
        required: true

env:
  SKIP_DIST: ${{ inputs.skip-dist }}
  GRADLE_BUILD_ACTION_CACHE_KEY_PREFIX: inject-develocity-${{ inputs.cache-key-prefix }}

jobs:
  inject-develocity:
    env:
      DEVELOCITY_INJECTION_ENABLED: true
      DEVELOCITY_URL: https://ge.solutions-team.gradle.com
      DEVELOCITY_PLUGIN_VERSION: ${{ matrix.plugin-version }}
      DEVELOCITY_CCUD_PLUGIN_VERSION: '2.0'
      ${{matrix.accessKeyEnv}}: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
    strategy:
      fail-fast: false
      matrix:
        gradle: [current, 7.6.2, 6.9.4, 5.6.4]
        os: ${{fromJSON(inputs.runner-os)}}
        plugin-version: [3.16.2, 3.18.1]
        include:
        - plugin-version: 3.16.2
          accessKeyEnv: GRADLE_ENTERPRISE_ACCESS_KEY
        - plugin-version: 3.18.1
          accessKeyEnv: DEVELOCITY_ACCESS_KEY

    runs-on: ${{ matrix.os }}
    steps:
    - name: Checkout sources
      uses: actions/checkout@v4
    - name: Initialize integ-test
      uses: ./.github/actions/init-integ-test

    - name: Setup Java
      uses: actions/setup-java@v4
      with:
        distribution: temurin
        java-version: 11
    - name: Setup Gradle
      id: setup-gradle
      uses: ./setup-gradle
      with:
        cache-read-only: false # For testing, allow writing cache entries on non-default branches
        gradle-version: ${{ matrix.gradle }}
    - name: Run Gradle build
      id: gradle
      working-directory: .github/workflow-samples/no-ge
      run: gradle help
    - name: Check Build Scan url
      if: ${{ !steps.gradle.outputs.build-scan-url }}
      uses: actions/github-script@v7
      with:
        script: |
          core.setFailed('No Build Scan detected')
    - name: Check short lived token (DEVELOCITY_ACCESS_KEY)
      run: "[ ${#DEVELOCITY_ACCESS_KEY} -gt 500 ] || (echo 'DEVELOCITY_ACCESS_KEY does not look like a short lived token'; exit 1)"
    - name: Check short lived token (GRADLE_ENTERPRISE_ACCESS_KEY)
      run: "[ ${#GRADLE_ENTERPRISE_ACCESS_KEY} -gt 500 ] || (echo 'GRADLE_ENTERPRISE_ACCESS_KEY does not look like a short lived token'; exit 1)"

  inject-develocity-with-access-key:
    env:
      DEVELOCITY_INJECTION_ENABLED: true
      DEVELOCITY_URL: 'https://ge.solutions-team.gradle.com'
      DEVELOCITY_PLUGIN_VERSION: ${{ matrix.plugin-version }}
      DEVELOCITY_CCUD_PLUGIN_VERSION: '2.0'
    strategy:
      fail-fast: false
      matrix:
        gradle: [current, 7.6.2, 6.9.4, 5.6.4]
        os: ${{fromJSON(inputs.runner-os)}}
        plugin-version: [3.16.2, 3.18.1]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout sources
        uses: actions/checkout@v4
      - name: Initialize integ-test
        uses: ./.github/actions/init-integ-test
      - name: Setup Java
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: 8
      - name: Setup Gradle
        id: setup-gradle
        uses: ./setup-gradle
        with:
          cache-read-only: false # For testing, allow writing cache entries on non-default branches
          gradle-version: ${{ matrix.gradle }}
          develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
          develocity-token-expiry: 1
      - name: Run Gradle build
        id: gradle
        working-directory: .github/workflow-samples/no-ge
        run: gradle help
      - name: Check short lived token (DEVELOCITY_ACCESS_KEY)
        run: "[ ${#DEVELOCITY_ACCESS_KEY} -gt 500 ] || (echo 'DEVELOCITY_ACCESS_KEY does not look like a short lived token'; exit 1)"
      - name: Check short lived token (GRADLE_ENTERPRISE_ACCESS_KEY)
        run: "[ ${#GRADLE_ENTERPRISE_ACCESS_KEY} -gt 500 ] || (echo 'GRADLE_ENTERPRISE_ACCESS_KEY does not look like a short lived token'; exit 1)"
      - name: Check Build Scan url
        if: ${{ !steps.gradle.outputs.build-scan-url }}
        uses: actions/github-script@v7
        with:
          script: |
            core.setFailed('No Build Scan detected')

  inject-develocity-short-lived-token-failed:
    env:
      DEVELOCITY_INJECTION_ENABLED: true
      DEVELOCITY_URL: 'https://localhost:3333/'
      DEVELOCITY_PLUGIN_VERSION: ${{ matrix.plugin-version }}
      DEVELOCITY_CCUD_PLUGIN_VERSION: '2.0'
      # Access key also set as an env var, we want to check it does not leak
      GRADLE_ENTERPRISE_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
      DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
    strategy:
      fail-fast: false
      matrix:
        gradle: [ current, 7.6.2, 6.9.4, 5.6.4 ]
        os: ${{fromJSON(inputs.runner-os)}}
        plugin-version: [ 3.16.2, 3.18.1 ]
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v4
      - name: Initialize integ-test
        uses: ./.github/actions/init-integ-test

      - name: Setup Java
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: 8
      - name: Setup Gradle
        id: setup-gradle
        uses: ./setup-gradle
        with:
          cache-read-only: false # For testing, allow writing cache entries on non-default branches
          develocity-access-key: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
      - name: Run Gradle build
        id: gradle
        working-directory: .github/workflow-samples/no-ge
        run: gradle help
      - name: Check access key is not blank (DEVELOCITY_ACCESS_KEY)
        run: "[ \"${DEVELOCITY_ACCESS_KEY}\" != \"\" ] || (echo 'using DEVELOCITY_ACCESS_KEY!'; exit 1)"
      - name: Check access key is not blank (GRADLE_ENTERPRISE_ACCESS_KEY)
        run: "[ \"${GRADLE_ENTERPRISE_ACCESS_KEY}\" != \"\" ] || (echo 'GRADLE_ENTERPRISE_ACCESS_KEY is still supported in v3!'; exit 1)"

  inject-develocity-with-access-key-from-input-actions:
    env:
      DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
    strategy:
      fail-fast: false
      matrix:
        gradle: [ current, 7.6.2, 6.9.4, 5.6.4 ]
        os: ${{fromJSON(inputs.runner-os)}}
        plugin-version: [ 3.16.2, 3.18.1 ]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout sources
        uses: actions/checkout@v4
      - name: Initialize integ-test
        uses: ./.github/actions/init-integ-test
      - name: Setup Java
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: 8
      - name: Setup Gradle
        id: setup-gradle
        uses: ./setup-gradle
        with:
          cache-read-only: false # For testing, allow writing cache entries on non-default branches
          gradle-version: ${{ matrix.gradle }}
          develocity-injection-enabled: true
          develocity-url: 'https://ge.solutions-team.gradle.com'
          develocity-plugin-version: ${{ matrix.plugin-version }}
      - name: Run Gradle build
        id: gradle
        working-directory: .github/workflow-samples/no-ge
        run: gradle help
      - name: Check Build Scan url
        if: ${{ !steps.gradle.outputs.build-scan-url }}
        uses: actions/github-script@v7
        with:
          script: |
            core.setFailed('No Build Scan detected')
