mirror of
https://github.com/graalvm/setup-graalvm.git
synced 2025-01-19 03:43:02 +08:00
Set up Windows environment with build tools.
This commit is contained in:
parent
a686e47055
commit
a1ee297bf2
@ -4,6 +4,7 @@ import * as graalvm from './graalvm'
|
||||
import {join} from 'path'
|
||||
import {mkdirP} from '@actions/io'
|
||||
import {setUpGraalVMTrunk} from './graalvm-trunk'
|
||||
import {setUpWindowsEnvironment} from './msvc'
|
||||
|
||||
async function run(): Promise<void> {
|
||||
try {
|
||||
@ -14,6 +15,10 @@ async function run(): Promise<void> {
|
||||
componentsString.length > 0 ? componentsString.split(',') : []
|
||||
const setJavaHome = core.getInput('set-java-home') === 'true'
|
||||
|
||||
if (c.IS_WINDOWS) {
|
||||
setUpWindowsEnvironment()
|
||||
}
|
||||
|
||||
await mkdirP(c.GRAALVM_BASE)
|
||||
|
||||
// Download or build GraalVM
|
||||
|
60
src/msvc.ts
Normal file
60
src/msvc.ts
Normal file
@ -0,0 +1,60 @@
|
||||
import * as core from '@actions/core'
|
||||
import {execSync} from 'child_process'
|
||||
import {existsSync} from 'fs'
|
||||
|
||||
// Keep in sync with https://github.com/actions/virtual-environments
|
||||
const KNOWN_VISUAL_STUDIO_INSTALLATIONS = [
|
||||
'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise', // 'windows-2016'
|
||||
'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Enterprise', // 'windows-2019' and 'windows-latest'
|
||||
'C:\\Program Files\\Microsoft Visual Studio\\2022\\Enterprise' // 'windows-2022'
|
||||
]
|
||||
const VCVARSALL_SUBPATH = '\\VC\\Auxiliary\\Build\\vcvarsall.bat'
|
||||
|
||||
function findVcvarsallPath(): string {
|
||||
for (const installation of KNOWN_VISUAL_STUDIO_INSTALLATIONS) {
|
||||
const candidate = `${installation}${VCVARSALL_SUBPATH}`
|
||||
if (existsSync(candidate)) {
|
||||
return candidate
|
||||
}
|
||||
}
|
||||
throw new Error('Failed to find vcvarsall.bat')
|
||||
}
|
||||
|
||||
export function setUpWindowsEnvironment(): void {
|
||||
core.startGroup('Updating Windows environment...')
|
||||
|
||||
const vcvarsallPath = findVcvarsallPath()
|
||||
core.debug(`Calling "${vcvarsallPath}"...`)
|
||||
const [originalEnv, vcvarsallOutput, updatedEnv] = execSync(
|
||||
`set && cls && "${vcvarsallPath}" x64 && cls && set`,
|
||||
{shell: 'cmd'}
|
||||
)
|
||||
.toString()
|
||||
.split('\f') // form feed page break (printed by `cls`)
|
||||
core.debug(vcvarsallOutput)
|
||||
|
||||
const originalEnvMap = new Map<string, string>()
|
||||
for (const line of originalEnv.split('\r\n')) {
|
||||
if (line.includes('=')) {
|
||||
const [name, value] = line.split('=')
|
||||
originalEnvMap.set(name, value)
|
||||
} else if (line) {
|
||||
core.debug(`Skipping ${line} (does not include '=')...`)
|
||||
}
|
||||
}
|
||||
|
||||
for (const line of updatedEnv.split('\r\n')) {
|
||||
if (line.includes('=')) {
|
||||
const [name, value] = line.split('=')
|
||||
const originalValue = originalEnvMap.get(name)
|
||||
if (value !== originalValue) {
|
||||
core.exportVariable(name, value)
|
||||
core.debug(`"${name}" set to "${value}"`)
|
||||
}
|
||||
} else if (line) {
|
||||
core.debug(`Skipping ${line} (does not include '=')...`)
|
||||
}
|
||||
}
|
||||
|
||||
core.endGroup()
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user