mirror of
https://github.com/gradle/actions.git
synced 2025-04-23 03:09:20 +08:00
Create toolchains.xml dynamically based on envs
This commit is contained in:
parent
6832731061
commit
99b05e0979
@ -7,8 +7,9 @@ import fs from 'fs'
|
|||||||
import {generateCacheKey} from './cache-key'
|
import {generateCacheKey} from './cache-key'
|
||||||
import {CacheListener} from './cache-reporting'
|
import {CacheListener} from './cache-reporting'
|
||||||
import {saveCache, restoreCache, cacheDebug, isCacheDebuggingEnabled, tryDelete} from './cache-utils'
|
import {saveCache, restoreCache, cacheDebug, isCacheDebuggingEnabled, tryDelete} from './cache-utils'
|
||||||
import {GradleHomeEntryExtractor, ConfigurationCacheEntryExtractor} from './gradle-home-extry-extractor'
|
|
||||||
import {CacheConfig} from '../configuration'
|
import {CacheConfig} from '../configuration'
|
||||||
|
import {GradleHomeEntryExtractor, ConfigurationCacheEntryExtractor} from './gradle-home-extry-extractor'
|
||||||
|
import {getPredefinedToolchains, readResourceFileAsString} from './gradle-user-home-utils'
|
||||||
|
|
||||||
const RESTORED_CACHE_KEY_KEY = 'restored-cache-key'
|
const RESTORED_CACHE_KEY_KEY = 'restored-cache-key'
|
||||||
|
|
||||||
@ -211,14 +212,16 @@ export class GradleUserHomeCache {
|
|||||||
'gradle-actions.inject-develocity.init.gradle'
|
'gradle-actions.inject-develocity.init.gradle'
|
||||||
]
|
]
|
||||||
for (const initScriptFilename of initScriptFilenames) {
|
for (const initScriptFilename of initScriptFilenames) {
|
||||||
const initScriptContent = this.readResourceFileAsString('init-scripts', initScriptFilename)
|
const initScriptContent = readResourceFileAsString('init-scripts', initScriptFilename)
|
||||||
const initScriptPath = path.resolve(initScriptsDir, initScriptFilename)
|
const initScriptPath = path.resolve(initScriptsDir, initScriptFilename)
|
||||||
fs.writeFileSync(initScriptPath, initScriptContent)
|
fs.writeFileSync(initScriptPath, initScriptContent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private registerToolchains(): void {
|
private registerToolchains(): void {
|
||||||
const preInstalledToolchains = this.readResourceFileAsString('toolchains.xml')
|
const preInstalledToolchains: string | null = getPredefinedToolchains()
|
||||||
|
if (preInstalledToolchains == null) return
|
||||||
|
|
||||||
const m2dir = path.resolve(this.userHome, '.m2')
|
const m2dir = path.resolve(this.userHome, '.m2')
|
||||||
const toolchainXmlTarget = path.resolve(m2dir, 'toolchains.xml')
|
const toolchainXmlTarget = path.resolve(m2dir, 'toolchains.xml')
|
||||||
if (!fs.existsSync(toolchainXmlTarget)) {
|
if (!fs.existsSync(toolchainXmlTarget)) {
|
||||||
@ -238,13 +241,6 @@ export class GradleUserHomeCache {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO:DAZ Move this to a utility class
|
|
||||||
private readResourceFileAsString(...paths: string[]): string {
|
|
||||||
// Resolving relative to __dirname will allow node to find the resource at runtime
|
|
||||||
const absolutePath = path.resolve(__dirname, '..', '..', '..', 'sources', 'src', 'resources', ...paths)
|
|
||||||
return fs.readFileSync(absolutePath, 'utf8')
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* When the GitHub environment ACTIONS_RUNNER_DEBUG is true, run Gradle with --info and --stacktrace.
|
* When the GitHub environment ACTIONS_RUNNER_DEBUG is true, run Gradle with --info and --stacktrace.
|
||||||
* see https://docs.github.com/en/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging
|
* see https://docs.github.com/en/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging
|
||||||
|
44
sources/src/caching/gradle-user-home-utils.ts
Normal file
44
sources/src/caching/gradle-user-home-utils.ts
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
import path from 'path'
|
||||||
|
import fs from 'fs'
|
||||||
|
|
||||||
|
export function readResourceFileAsString(...paths: string[]): string {
|
||||||
|
// Resolving relative to __dirname will allow node to find the resource at runtime
|
||||||
|
const absolutePath = path.resolve(__dirname, '..', '..', '..', 'sources', 'src', 'resources', ...paths)
|
||||||
|
return fs.readFileSync(absolutePath, 'utf8')
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Iterate over all `JAVA_HOME_{version}_{arch}` envs and construct the toolchain.xml.
|
||||||
|
*
|
||||||
|
* @VisibleForTesting
|
||||||
|
*/
|
||||||
|
export function getPredefinedToolchains(): string | null {
|
||||||
|
const javaHomeEnvs: string[] = []
|
||||||
|
for (const javaHomeEnvsKey in process.env) {
|
||||||
|
if (javaHomeEnvsKey.startsWith('JAVA_HOME_')) {
|
||||||
|
javaHomeEnvs.push(javaHomeEnvsKey)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (javaHomeEnvs.length === 0) {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
// language=XML
|
||||||
|
let toolchainsXml = `<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<toolchains>
|
||||||
|
<!-- JDK Toolchains installed by default on GitHub-hosted runners -->
|
||||||
|
`
|
||||||
|
for (const javaHomeEnv of javaHomeEnvs) {
|
||||||
|
const version = javaHomeEnv.match(/JAVA_HOME_(\d+)_/)?.[1]!
|
||||||
|
toolchainsXml += ` <toolchain>
|
||||||
|
<type>jdk</type>
|
||||||
|
<provides>
|
||||||
|
<version>${version}</version>
|
||||||
|
</provides>
|
||||||
|
<configuration>
|
||||||
|
<jdkHome>\${env.${javaHomeEnv}}</jdkHome>
|
||||||
|
</configuration>
|
||||||
|
</toolchain>\n`
|
||||||
|
}
|
||||||
|
toolchainsXml += `</toolchains>\n`
|
||||||
|
return toolchainsXml
|
||||||
|
}
|
@ -1,44 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<toolchains>
|
|
||||||
<!-- JDK Toolchains installed by default on GitHub-hosted runners -->
|
|
||||||
<toolchain>
|
|
||||||
<type>jdk</type>
|
|
||||||
<provides>
|
|
||||||
<version>8</version>
|
|
||||||
<vendor>Eclipse Temurin</vendor>
|
|
||||||
</provides>
|
|
||||||
<configuration>
|
|
||||||
<jdkHome>${env.JAVA_HOME_8_X64}</jdkHome>
|
|
||||||
</configuration>
|
|
||||||
</toolchain>
|
|
||||||
<toolchain>
|
|
||||||
<type>jdk</type>
|
|
||||||
<provides>
|
|
||||||
<version>11</version>
|
|
||||||
<vendor>Eclipse Temurin</vendor>
|
|
||||||
</provides>
|
|
||||||
<configuration>
|
|
||||||
<jdkHome>${env.JAVA_HOME_11_X64}</jdkHome>
|
|
||||||
</configuration>
|
|
||||||
</toolchain>
|
|
||||||
<toolchain>
|
|
||||||
<type>jdk</type>
|
|
||||||
<provides>
|
|
||||||
<version>17</version>
|
|
||||||
<vendor>Eclipse Temurin</vendor>
|
|
||||||
</provides>
|
|
||||||
<configuration>
|
|
||||||
<jdkHome>${env.JAVA_HOME_17_X64}</jdkHome>
|
|
||||||
</configuration>
|
|
||||||
</toolchain>
|
|
||||||
<toolchain>
|
|
||||||
<type>jdk</type>
|
|
||||||
<provides>
|
|
||||||
<version>21</version>
|
|
||||||
<vendor>Eclipse Temurin</vendor>
|
|
||||||
</provides>
|
|
||||||
<configuration>
|
|
||||||
<jdkHome>${env.JAVA_HOME_21_X64}</jdkHome>
|
|
||||||
</configuration>
|
|
||||||
</toolchain>
|
|
||||||
</toolchains>
|
|
65
sources/test/jest/predefined-toolchains.test.ts
Normal file
65
sources/test/jest/predefined-toolchains.test.ts
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
import {getPredefinedToolchains} from "../../src/caching/gradle-user-home-utils";
|
||||||
|
|
||||||
|
describe('predefined-toolchains', () => {
|
||||||
|
const OLD_ENV = process.env
|
||||||
|
afterAll(() => {
|
||||||
|
process.env = OLD_ENV
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('returns', () => {
|
||||||
|
it('null if no JAVA_HOME_ envs are set', async () => {
|
||||||
|
jest.resetModules()
|
||||||
|
process.env = {
|
||||||
|
"JAVA_HOME": "/jdks/foo_8"
|
||||||
|
}
|
||||||
|
|
||||||
|
const predefinedToolchains = getPredefinedToolchains()
|
||||||
|
expect(predefinedToolchains).toBe(null)
|
||||||
|
})
|
||||||
|
it('valid toolchains.xml if JAVA_HOME_ envs are set', async () => {
|
||||||
|
jest.resetModules()
|
||||||
|
process.env = {
|
||||||
|
"JAVA_HOME": "/jdks/foo_8",
|
||||||
|
"JAVA_HOME_8_X64": "/jdks/foo_8",
|
||||||
|
"JAVA_HOME_11_X64": "/jdks/foo_11",
|
||||||
|
"JAVA_HOME_21_ARM64": "/jdks/foo_21",
|
||||||
|
}
|
||||||
|
|
||||||
|
const predefinedToolchains = getPredefinedToolchains()
|
||||||
|
expect(predefinedToolchains).toBe(
|
||||||
|
// language=XML
|
||||||
|
`<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<toolchains>
|
||||||
|
<!-- JDK Toolchains installed by default on GitHub-hosted runners -->
|
||||||
|
<toolchain>
|
||||||
|
<type>jdk</type>
|
||||||
|
<provides>
|
||||||
|
<version>8</version>
|
||||||
|
</provides>
|
||||||
|
<configuration>
|
||||||
|
<jdkHome>\${env.JAVA_HOME_8_X64}</jdkHome>
|
||||||
|
</configuration>
|
||||||
|
</toolchain>
|
||||||
|
<toolchain>
|
||||||
|
<type>jdk</type>
|
||||||
|
<provides>
|
||||||
|
<version>11</version>
|
||||||
|
</provides>
|
||||||
|
<configuration>
|
||||||
|
<jdkHome>\${env.JAVA_HOME_11_X64}</jdkHome>
|
||||||
|
</configuration>
|
||||||
|
</toolchain>
|
||||||
|
<toolchain>
|
||||||
|
<type>jdk</type>
|
||||||
|
<provides>
|
||||||
|
<version>21</version>
|
||||||
|
</provides>
|
||||||
|
<configuration>
|
||||||
|
<jdkHome>\${env.JAVA_HOME_21_ARM64}</jdkHome>
|
||||||
|
</configuration>
|
||||||
|
</toolchain>
|
||||||
|
</toolchains>
|
||||||
|
`)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
Loading…
x
Reference in New Issue
Block a user