Avoid env-var interpolation in toolchains.xml (#518)

Fixes #511
This commit is contained in:
Daz DeBoer 2025-01-21 09:44:44 -07:00 committed by GitHub
commit ec1d1bfd5f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 26 additions and 23 deletions

View File

@ -13,34 +13,37 @@ export function readResourceFileAsString(...paths: string[]): string {
* @VisibleForTesting * @VisibleForTesting
*/ */
export function getPredefinedToolchains(): string | null { export function getPredefinedToolchains(): string | null {
const javaHomeEnvs: string[] = [] // Get the version and path for each JAVA_HOME env var
for (const javaHomeEnvsKey in process.env) { const javaHomeEnvs = Object.entries(process.env)
if (javaHomeEnvsKey.startsWith('JAVA_HOME_')) { .filter(([key]) => key.startsWith('JAVA_HOME_') && process.env[key])
javaHomeEnvs.push(javaHomeEnvsKey) .map(([key, value]) => ({
} jdkVersion: key.match(/JAVA_HOME_(\d+)_/)?.[1] ?? null,
} jdkPath: value as string
}))
.filter(env => env.jdkVersion !== null)
if (javaHomeEnvs.length === 0) { if (javaHomeEnvs.length === 0) {
return null return null
} }
// language=XML // language=XML
let toolchainsXml = `<?xml version="1.0" encoding="UTF-8"?> return `<?xml version="1.0" encoding="UTF-8"?>
<toolchains> <toolchains>
<!-- JDK Toolchains installed by default on GitHub-hosted runners --> <!-- JDK Toolchains installed by default on GitHub-hosted runners -->
` ${javaHomeEnvs
for (const javaHomeEnv of javaHomeEnvs) { .map(
const version = javaHomeEnv.match(/JAVA_HOME_(\d+)_/)?.[1]! ({jdkVersion, jdkPath}) => ` <toolchain>
toolchainsXml += ` <toolchain>
<type>jdk</type> <type>jdk</type>
<provides> <provides>
<version>${version}</version> <version>${jdkVersion}</version>
</provides> </provides>
<configuration> <configuration>
<jdkHome>\${env.${javaHomeEnv}}</jdkHome> <jdkHome>${jdkPath}</jdkHome>
</configuration> </configuration>
</toolchain>\n` </toolchain>`
} )
toolchainsXml += `</toolchains>\n` .join('\n')}
return toolchainsXml </toolchains>\n`
} }
export function mergeToolchainContent(existingToolchainContent: string, preInstalledToolchains: string): string { export function mergeToolchainContent(existingToolchainContent: string, preInstalledToolchains: string): string {

View File

@ -39,7 +39,7 @@ describe('predefined-toolchains', () => {
<version>8</version> <version>8</version>
</provides> </provides>
<configuration> <configuration>
<jdkHome>\${env.JAVA_HOME_8_X64}</jdkHome> <jdkHome>/jdks/foo_8</jdkHome>
</configuration> </configuration>
</toolchain> </toolchain>
<toolchain> <toolchain>
@ -48,7 +48,7 @@ describe('predefined-toolchains', () => {
<version>11</version> <version>11</version>
</provides> </provides>
<configuration> <configuration>
<jdkHome>\${env.JAVA_HOME_11_X64}</jdkHome> <jdkHome>/jdks/foo_11</jdkHome>
</configuration> </configuration>
</toolchain> </toolchain>
<toolchain> <toolchain>
@ -57,7 +57,7 @@ describe('predefined-toolchains', () => {
<version>21</version> <version>21</version>
</provides> </provides>
<configuration> <configuration>
<jdkHome>\${env.JAVA_HOME_21_ARM64}</jdkHome> <jdkHome>/jdks/foo_21</jdkHome>
</configuration> </configuration>
</toolchain> </toolchain>
</toolchains> </toolchains>
@ -81,7 +81,7 @@ describe('predefined-toolchains', () => {
<version>8</version> <version>8</version>
</provides> </provides>
<configuration> <configuration>
<jdkHome>\${env.JAVA_HOME_8_X64}</jdkHome> <jdkHome>/jdks/foo_8</jdkHome>
</configuration> </configuration>
</toolchain> </toolchain>
</toolchains> </toolchains>
@ -98,7 +98,7 @@ describe('predefined-toolchains', () => {
<version>8</version> <version>8</version>
</provides> </provides>
<configuration> <configuration>
<jdkHome>\${env.JAVA_HOME_8_X64}</jdkHome> <jdkHome>/jdks/foo_8</jdkHome>
</configuration> </configuration>
</toolchain> </toolchain>
@ -109,7 +109,7 @@ describe('predefined-toolchains', () => {
<version>11</version> <version>11</version>
</provides> </provides>
<configuration> <configuration>
<jdkHome>\${env.JAVA_HOME_11_X64}</jdkHome> <jdkHome>/jdks/foo_11</jdkHome>
</configuration> </configuration>
</toolchain> </toolchain>
</toolchains> </toolchains>