mirror of
				https://github.com/gradle/gradle-build-action.git
				synced 2025-11-04 01:28:56 +08:00 
			
		
		
		
	Merge pull request #855 from gradle/dd/installed-toolchains
Detect installed java toolchains
This commit is contained in:
		@@ -1,5 +1,5 @@
 | 
			
		||||
plugins {
 | 
			
		||||
    id("org.gradle.toolchains.foojay-resolver-convention") version("0.4.0")
 | 
			
		||||
    id("org.gradle.toolchains.foojay-resolver-convention") version("0.7.0")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
rootProject.name = 'basic'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								.github/workflows/ci-full-check.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.github/workflows/ci-full-check.yml
									
									
									
									
										vendored
									
									
								
							@@ -83,3 +83,8 @@ jobs:
 | 
			
		||||
    uses: ./.github/workflows/integ-test-sample-gradle-plugin.yml
 | 
			
		||||
    with:
 | 
			
		||||
      cache-key-prefix: ${{github.run_number}}-
 | 
			
		||||
 | 
			
		||||
  toolchain-detection:
 | 
			
		||||
    uses: ./.github/workflows/integ-test-detect-java-toolchains.yml
 | 
			
		||||
    with:
 | 
			
		||||
      cache-key-prefix: ${{github.run_number}}-
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								.github/workflows/ci-quick-check.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/workflows/ci-quick-check.yml
									
									
									
									
										vendored
									
									
								
							@@ -124,3 +124,10 @@ jobs:
 | 
			
		||||
    with:
 | 
			
		||||
      runner-os: '["ubuntu-latest"]'
 | 
			
		||||
      download-dist: true
 | 
			
		||||
 | 
			
		||||
  toolchain-detection:
 | 
			
		||||
    needs: build-distribution
 | 
			
		||||
    uses: ./.github/workflows/integ-test-detect-java-toolchains.yml
 | 
			
		||||
    with:
 | 
			
		||||
      runner-os: '["ubuntu-latest"]'
 | 
			
		||||
      download-dist: true
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										113
									
								
								.github/workflows/integ-test-detect-java-toolchains.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								.github/workflows/integ-test-detect-java-toolchains.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,113 @@
 | 
			
		||||
name: Test detect java toolchains
 | 
			
		||||
 | 
			
		||||
on:
 | 
			
		||||
  workflow_call:
 | 
			
		||||
    inputs:
 | 
			
		||||
      cache-key-prefix:
 | 
			
		||||
        type: string
 | 
			
		||||
      runner-os:
 | 
			
		||||
        type: string
 | 
			
		||||
        default: '["ubuntu-latest", "windows-latest", "macos-latest"]'
 | 
			
		||||
      download-dist:
 | 
			
		||||
        type: boolean
 | 
			
		||||
        default: false
 | 
			
		||||
 | 
			
		||||
env:
 | 
			
		||||
  DOWNLOAD_DIST: ${{ inputs.download-dist }}
 | 
			
		||||
  GRADLE_BUILD_ACTION_CACHE_KEY_PREFIX: restore-java-toolchain-${{ inputs.cache-key-prefix }}
 | 
			
		||||
  GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED: true
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  # Test that pre-installed runner JDKs are detected
 | 
			
		||||
  pre-installed-toolchains:
 | 
			
		||||
    strategy:
 | 
			
		||||
      matrix:
 | 
			
		||||
        os: ${{fromJSON(inputs.runner-os)}}
 | 
			
		||||
    runs-on: ${{ matrix.os }}
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Checkout sources
 | 
			
		||||
      uses: actions/checkout@v3
 | 
			
		||||
    - name: Download distribution if required
 | 
			
		||||
      uses: ./.github/actions/download-dist
 | 
			
		||||
    - name: Setup Gradle
 | 
			
		||||
      uses: ./
 | 
			
		||||
    - name: List detected toolchains
 | 
			
		||||
      shell: bash
 | 
			
		||||
      working-directory: .github/workflow-samples/groovy-dsl
 | 
			
		||||
      run: | 
 | 
			
		||||
        gradle -q javaToolchains > output.txt
 | 
			
		||||
        cat output.txt
 | 
			
		||||
    - name: Verify detected toolchains
 | 
			
		||||
      shell: bash
 | 
			
		||||
      working-directory: .github/workflow-samples/groovy-dsl
 | 
			
		||||
      run: | 
 | 
			
		||||
        grep -q 'Eclipse Temurin JDK 1.8' output.txt || (echo "::error::Did not detect preinstalled JDK 1.8" && exit 1)
 | 
			
		||||
        grep -q 'Eclipse Temurin JDK 11' output.txt || (echo "::error::Did not detect preinstalled JDK 11" && exit 1)
 | 
			
		||||
        grep -q 'Eclipse Temurin JDK 17' output.txt || (echo "::error::Did not detect preinstalled JDK 17" && exit 1)
 | 
			
		||||
 | 
			
		||||
  # Test that JDKs provisioned by setup-java are detected
 | 
			
		||||
  setup-java-installed-toolchain:
 | 
			
		||||
    strategy:
 | 
			
		||||
      matrix:
 | 
			
		||||
        os: ${{fromJSON(inputs.runner-os)}}
 | 
			
		||||
    runs-on: ${{ matrix.os }}
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Checkout sources
 | 
			
		||||
      uses: actions/checkout@v3
 | 
			
		||||
    - name: Download distribution if required
 | 
			
		||||
      uses: ./.github/actions/download-dist
 | 
			
		||||
    - name: Setup Java 20
 | 
			
		||||
      uses: actions/setup-java@v3
 | 
			
		||||
      with:
 | 
			
		||||
        distribution: 'temurin'
 | 
			
		||||
        java-version: '20'
 | 
			
		||||
    - name: Setup Java 16
 | 
			
		||||
      uses: actions/setup-java@v3
 | 
			
		||||
      with:
 | 
			
		||||
        distribution: 'temurin'
 | 
			
		||||
        java-version: '16'
 | 
			
		||||
    - name: Setup Gradle
 | 
			
		||||
      uses: ./
 | 
			
		||||
    - name: List detected toolchains
 | 
			
		||||
      shell: bash
 | 
			
		||||
      working-directory: .github/workflow-samples/groovy-dsl
 | 
			
		||||
      run: | 
 | 
			
		||||
        gradle -q javaToolchains > output.txt
 | 
			
		||||
        cat output.txt
 | 
			
		||||
    - name: Verify detected toolchains
 | 
			
		||||
      shell: bash
 | 
			
		||||
      working-directory: .github/workflow-samples/groovy-dsl
 | 
			
		||||
      run: | 
 | 
			
		||||
        grep -q 'Eclipse Temurin JDK 16' output.txt || (echo "::error::Did not detect setup-java installed JDK 16" && exit 1)
 | 
			
		||||
        grep -q 'Eclipse Temurin JDK 20' output.txt || (echo "::error::Did not detect setup-java installed JDK 20" && exit 1)
 | 
			
		||||
 | 
			
		||||
  # Test that predefined JDK detection property is not overwritten by action
 | 
			
		||||
  check-no-overwrite:
 | 
			
		||||
    strategy:
 | 
			
		||||
      matrix:
 | 
			
		||||
        os: ${{fromJSON(inputs.runner-os)}}
 | 
			
		||||
    runs-on: ${{ matrix.os }}
 | 
			
		||||
    steps:
 | 
			
		||||
    - name: Checkout sources
 | 
			
		||||
      uses: actions/checkout@v3
 | 
			
		||||
    - name: Download distribution if required
 | 
			
		||||
      uses: ./.github/actions/download-dist
 | 
			
		||||
    - name: Configure java installations env var in Gradle User Home
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: | 
 | 
			
		||||
        mkdir -p ~/.gradle
 | 
			
		||||
        echo "org.gradle.java.installations.fromEnv=XXXXX" > ~/.gradle/gradle.properties
 | 
			
		||||
    - name: Setup Gradle
 | 
			
		||||
      uses: ./
 | 
			
		||||
    - name: Check gradle.properties
 | 
			
		||||
      shell: bash
 | 
			
		||||
      run: |
 | 
			
		||||
        cat ~/.gradle/gradle.properties
 | 
			
		||||
        if grep -q 'org.gradle.java.installations.fromEnv=JAVA_HOME' ~/.gradle/gradle.properties ; then
 | 
			
		||||
          echo 'Found overwritten fromEnv'
 | 
			
		||||
          exit 1
 | 
			
		||||
        fi
 | 
			
		||||
        if ! grep -q 'org.gradle.java.installations.fromEnv=XXXXX' ~/.gradle/gradle.properties ; then
 | 
			
		||||
          echo 'Did NOT find original fromEnv'
 | 
			
		||||
          exit 1
 | 
			
		||||
        fi
 | 
			
		||||
							
								
								
									
										10
									
								
								dist/main/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								dist/main/index.js
									
									
									
									
										vendored
									
									
								
							@@ -72971,6 +72971,16 @@ class GradleStateCache {
 | 
			
		||||
        return path_1.default.resolve(this.gradleUserHome, rawPath);
 | 
			
		||||
    }
 | 
			
		||||
    initializeGradleUserHome(gradleUserHome, initScriptsDir) {
 | 
			
		||||
        const gradleProperties = path_1.default.resolve(gradleUserHome, 'gradle.properties');
 | 
			
		||||
        const existingGradleProperties = fs_1.default.existsSync(gradleProperties)
 | 
			
		||||
            ? fs_1.default.readFileSync(gradleProperties, 'utf8')
 | 
			
		||||
            : '';
 | 
			
		||||
        if (!existingGradleProperties.includes('org.gradle.java.installations.fromEnv=')) {
 | 
			
		||||
            fs_1.default.appendFileSync(gradleProperties, `
 | 
			
		||||
# Auto-detect pre-installed JDKs
 | 
			
		||||
org.gradle.java.installations.fromEnv=JAVA_HOME_8_X64,JAVA_HOME_11_X64,JAVA_HOME_17_X64
 | 
			
		||||
`);
 | 
			
		||||
        }
 | 
			
		||||
        const initScriptFilenames = [
 | 
			
		||||
            'build-result-capture.init.gradle',
 | 
			
		||||
            'build-result-capture-service.plugin.groovy',
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								dist/main/index.js.map
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/main/index.js.map
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										10
									
								
								dist/post/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								dist/post/index.js
									
									
									
									
										vendored
									
									
								
							@@ -72971,6 +72971,16 @@ class GradleStateCache {
 | 
			
		||||
        return path_1.default.resolve(this.gradleUserHome, rawPath);
 | 
			
		||||
    }
 | 
			
		||||
    initializeGradleUserHome(gradleUserHome, initScriptsDir) {
 | 
			
		||||
        const gradleProperties = path_1.default.resolve(gradleUserHome, 'gradle.properties');
 | 
			
		||||
        const existingGradleProperties = fs_1.default.existsSync(gradleProperties)
 | 
			
		||||
            ? fs_1.default.readFileSync(gradleProperties, 'utf8')
 | 
			
		||||
            : '';
 | 
			
		||||
        if (!existingGradleProperties.includes('org.gradle.java.installations.fromEnv=')) {
 | 
			
		||||
            fs_1.default.appendFileSync(gradleProperties, `
 | 
			
		||||
# Auto-detect pre-installed JDKs
 | 
			
		||||
org.gradle.java.installations.fromEnv=JAVA_HOME_8_X64,JAVA_HOME_11_X64,JAVA_HOME_17_X64
 | 
			
		||||
`);
 | 
			
		||||
        }
 | 
			
		||||
        const initScriptFilenames = [
 | 
			
		||||
            'build-result-capture.init.gradle',
 | 
			
		||||
            'build-result-capture-service.plugin.groovy',
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								dist/post/index.js.map
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								dist/post/index.js.map
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -172,6 +172,22 @@ export class GradleStateCache {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private initializeGradleUserHome(gradleUserHome: string, initScriptsDir: string): void {
 | 
			
		||||
        // Ensure that pre-installed java versions are detected. Only add property if it isn't already defined.
 | 
			
		||||
        const gradleProperties = path.resolve(gradleUserHome, 'gradle.properties')
 | 
			
		||||
        const existingGradleProperties = fs.existsSync(gradleProperties)
 | 
			
		||||
            ? fs.readFileSync(gradleProperties, 'utf8')
 | 
			
		||||
            : ''
 | 
			
		||||
        if (!existingGradleProperties.includes('org.gradle.java.installations.fromEnv=')) {
 | 
			
		||||
            fs.appendFileSync(
 | 
			
		||||
                gradleProperties,
 | 
			
		||||
                `
 | 
			
		||||
# Auto-detect pre-installed JDKs
 | 
			
		||||
org.gradle.java.installations.fromEnv=JAVA_HOME_8_X64,JAVA_HOME_11_X64,JAVA_HOME_17_X64
 | 
			
		||||
`
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Copy init scripts from src/resources
 | 
			
		||||
        const initScriptFilenames = [
 | 
			
		||||
            'build-result-capture.init.gradle',
 | 
			
		||||
            'build-result-capture-service.plugin.groovy',
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user