diff --git a/sources/src/caching/gradle-user-home-cache.ts b/sources/src/caching/gradle-user-home-cache.ts
index 180e19b..b0c47bb 100644
--- a/sources/src/caching/gradle-user-home-cache.ts
+++ b/sources/src/caching/gradle-user-home-cache.ts
@@ -9,6 +9,7 @@ import {CacheListener} from './cache-reporting'
import {saveCache, restoreCache, cacheDebug, isCacheDebuggingEnabled, tryDelete} from './cache-utils'
import {GradleHomeEntryExtractor, ConfigurationCacheEntryExtractor} from './gradle-home-extry-extractor'
import {CacheConfig} from '../input-params'
+import {getPredefinedToolchains, readResourceFileAsString} from './gradle-user-home-utils'
const RESTORED_CACHE_KEY_KEY = 'restored-cache-key'
@@ -211,14 +212,16 @@ export class GradleUserHomeCache {
'gradle-actions.inject-develocity.init.gradle'
]
for (const initScriptFilename of initScriptFilenames) {
- const initScriptContent = this.readResourceFileAsString('init-scripts', initScriptFilename)
+ const initScriptContent = readResourceFileAsString('init-scripts', initScriptFilename)
const initScriptPath = path.resolve(initScriptsDir, initScriptFilename)
fs.writeFileSync(initScriptPath, initScriptContent)
}
}
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 toolchainXmlTarget = path.resolve(m2dir, 'toolchains.xml')
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.
* see https://docs.github.com/en/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging
diff --git a/sources/src/caching/gradle-user-home-utils.ts b/sources/src/caching/gradle-user-home-utils.ts
new file mode 100644
index 0000000..7032678
--- /dev/null
+++ b/sources/src/caching/gradle-user-home-utils.ts
@@ -0,0 +1,43 @@
+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 = `
+
+
+`
+ for (const javaHomeEnv of javaHomeEnvs) {
+ const version = javaHomeEnv.match(/JAVA_HOME_(\d+)_/)?.[1]!
+ toolchainsXml += `
+
+ ${version}
+
+
+ \${env.${javaHomeEnv}
+
+ \n`
+ }
+ toolchainsXml += `\n`
+ return toolchainsXml
+}
diff --git a/sources/src/resources/toolchains.xml b/sources/src/resources/toolchains.xml
deleted file mode 100644
index f9ba374..0000000
--- a/sources/src/resources/toolchains.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
- jdk
-
- 8
- Eclipse Temurin
-
-
- ${env.JAVA_HOME_8_X64}
-
-
-
- jdk
-
- 11
- Eclipse Temurin
-
-
- ${env.JAVA_HOME_11_X64}
-
-
-
- jdk
-
- 17
- Eclipse Temurin
-
-
- ${env.JAVA_HOME_17_X64}
-
-
-
- jdk
-
- 21
- Eclipse Temurin
-
-
- ${env.JAVA_HOME_21_X64}
-
-
-
diff --git a/sources/test/jest/predefined-toolchains.test.ts b/sources/test/jest/predefined-toolchains.test.ts
new file mode 100644
index 0000000..621b25d
--- /dev/null
+++ b/sources/test/jest/predefined-toolchains.test.ts
@@ -0,0 +1,60 @@
+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 = { ...OLD_ENV }
+
+ const predefinedToolchains = getPredefinedToolchains()
+ expect(predefinedToolchains).toBe(null)
+ })
+ it('valid toolchains.xml if JAVA_HOME_ envs are set', async () => {
+ jest.resetModules()
+ process.env = {
+ ...OLD_ENV,
+ "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
+`
+
+
+
+
+ 8
+
+
+ \${env.JAVA_HOME_8_X64
+
+
+
+
+ 11
+
+
+ \${env.JAVA_HOME_11_X64
+
+
+
+
+ 21
+
+
+ \${env.JAVA_HOME_21_ARM64
+
+
+
+`)
+ })
+ })
+})