Handle install directories using tool-cache (#46)

* Make test builds more verbose

* Handle install directories using tool-cache

* Bump version to 1.3.0-DEV
This commit is contained in:
Sascha Mann
2020-09-26 18:20:43 +02:00
committed by GitHub
parent b469b93959
commit c639390e13
9 changed files with 39 additions and 22 deletions

View File

@@ -33,4 +33,5 @@ jobs:
with: with:
version: nightly version: nightly
arch: ${{ matrix.julia-arch }} arch: ${{ matrix.julia-arch }}
show-versioninfo: 'true'
- run: julia --version - run: julia --version

View File

@@ -26,8 +26,10 @@ jobs:
npm run pack npm run pack
- name: "Set up Julia" - name: "Set up Julia"
id: setup-julia
uses: ./ uses: ./
with: with:
version: ${{ matrix.julia-version }} version: ${{ matrix.julia-version }}
arch: ${{ matrix.julia-arch }} arch: ${{ matrix.julia-arch }}
show-versioninfo: 'true'
- run: julia --version - run: julia --version

View File

@@ -13,6 +13,9 @@ inputs:
description: 'Display InteractiveUtils.versioninfo() after installing' description: 'Display InteractiveUtils.versioninfo() after installing'
required: false required: false
default: 'false' default: 'false'
outputs:
julia-bindir:
description: 'Path to the directory containing the Julia executable. Equivalent to JULIA_BINDIR: https://docs.julialang.org/en/v1/manual/environment-variables/#JULIA_BINDIR'
runs: runs:
using: 'node12' using: 'node12'
main: 'dist/index.js' main: 'dist/index.js'

19
lib/installer.js generated
View File

@@ -18,6 +18,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
const core = __importStar(require("@actions/core")); const core = __importStar(require("@actions/core"));
const exec = __importStar(require("@actions/exec")); const exec = __importStar(require("@actions/exec"));
const tc = __importStar(require("@actions/tool-cache")); const tc = __importStar(require("@actions/tool-cache"));
const fs = __importStar(require("fs"));
const os = __importStar(require("os")); const os = __importStar(require("os"));
const path = __importStar(require("path")); const path = __importStar(require("path"));
const semver = __importStar(require("semver")); const semver = __importStar(require("semver"));
@@ -108,28 +109,26 @@ function installJulia(version, arch) {
const downloadURL = getDownloadURL(version, arch); const downloadURL = getDownloadURL(version, arch);
core.debug(`downloading Julia from ${downloadURL}`); core.debug(`downloading Julia from ${downloadURL}`);
const juliaDownloadPath = yield tc.downloadTool(downloadURL); const juliaDownloadPath = yield tc.downloadTool(downloadURL);
const tempInstallDir = fs.mkdtempSync(`julia-${arch}-${version}-`);
// Install it // Install it
switch (osPlat) { switch (osPlat) {
case 'linux': case 'linux':
// tc.extractTar doesn't support stripping components, so we have to call tar manually // tc.extractTar doesn't support stripping components, so we have to call tar manually
yield exec.exec('mkdir', [`${process.env.HOME}/julia`]); yield exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir]);
yield exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', `${process.env.HOME}/julia`]); return tempInstallDir;
return `${process.env.HOME}/julia`;
case 'win32': case 'win32':
const juliaInstallationPath = path.join('C:', 'Julia');
if (version == 'nightly' || semver.gtr(version, '1.3', { includePrerelease: true })) { if (version == 'nightly' || semver.gtr(version, '1.3', { includePrerelease: true })) {
// The installer changed in 1.4: https://github.com/JuliaLang/julia/blob/ef0c9108b12f3ae177c51037934351ffa703b0b5/NEWS.md#build-system-changes // The installer changed in 1.4: https://github.com/JuliaLang/julia/blob/ef0c9108b12f3ae177c51037934351ffa703b0b5/NEWS.md#build-system-changes
yield exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/SILENT /dir=${juliaInstallationPath}" -NoNewWindow -Wait`]); yield exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/SILENT /dir=${path.join(process.cwd(), tempInstallDir)}" -NoNewWindow -Wait`]);
} }
else { else {
yield exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/S /D=${juliaInstallationPath}" -NoNewWindow -Wait`]); yield exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/S /D=${path.join(process.cwd(), tempInstallDir)}" -NoNewWindow -Wait`]);
} }
return juliaInstallationPath; return tempInstallDir;
case 'darwin': case 'darwin':
yield exec.exec('hdiutil', ['attach', juliaDownloadPath]); yield exec.exec('hdiutil', ['attach', juliaDownloadPath]);
yield exec.exec('mkdir', [`${process.env.HOME}/julia`]); yield exec.exec('/bin/bash', ['-c', `cp -a /Volumes/Julia-*/Julia-*.app/Contents/Resources/julia ${tempInstallDir}`]);
yield exec.exec('/bin/bash', ['-c', `cp -a /Volumes/Julia-*/Julia-*.app/Contents/Resources/julia ${process.env.HOME}`]); return path.join(tempInstallDir, 'julia');
return `${process.env.HOME}/julia`;
default: default:
throw new Error(`Platform ${osPlat} is not supported`); throw new Error(`Platform ${osPlat} is not supported`);
} }

5
lib/setup-julia.js generated
View File

@@ -18,6 +18,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
const core = __importStar(require("@actions/core")); const core = __importStar(require("@actions/core"));
const exec = __importStar(require("@actions/exec")); const exec = __importStar(require("@actions/exec"));
const tc = __importStar(require("@actions/tool-cache")); const tc = __importStar(require("@actions/tool-cache"));
const fs = __importStar(require("fs"));
const https = __importStar(require("https")); const https = __importStar(require("https"));
const path = __importStar(require("path")); const path = __importStar(require("path"));
const installer = __importStar(require("./installer")); const installer = __importStar(require("./installer"));
@@ -65,12 +66,16 @@ function run() {
// Add it to cache // Add it to cache
juliaPath = yield tc.cacheDir(juliaInstallationPath, 'julia', version, arch); juliaPath = yield tc.cacheDir(juliaInstallationPath, 'julia', version, arch);
core.debug(`added Julia to cache: ${juliaPath}`); core.debug(`added Julia to cache: ${juliaPath}`);
// Remove temporary dir
fs.rmdirSync(juliaInstallationPath, { recursive: true });
} }
else { else {
core.debug(`using cached version of Julia: ${juliaPath}`); core.debug(`using cached version of Julia: ${juliaPath}`);
} }
// Add it to PATH // Add it to PATH
core.addPath(path.join(juliaPath, 'bin')); core.addPath(path.join(juliaPath, 'bin'));
// Set output
core.setOutput('julia-bindir', path.join(juliaPath, 'bin'));
// Test if Julia has been installed // Test if Julia has been installed
exec.exec('julia', ['--version']); exec.exec('julia', ['--version']);
// If enabled, also show the full version info // If enabled, also show the full version info

2
package-lock.json generated
View File

@@ -1,6 +1,6 @@
{ {
"name": "setup-julia", "name": "setup-julia",
"version": "1.2.2", "version": "1.3.0-DEV",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

View File

@@ -1,6 +1,6 @@
{ {
"name": "setup-julia", "name": "setup-julia",
"version": "1.2.2", "version": "1.3.0-DEV",
"private": true, "private": true,
"description": "setup Julia action", "description": "setup Julia action",
"main": "lib/setup-julia.js", "main": "lib/setup-julia.js",

View File

@@ -2,6 +2,7 @@ import * as core from '@actions/core'
import * as exec from '@actions/exec' import * as exec from '@actions/exec'
import * as tc from '@actions/tool-cache' import * as tc from '@actions/tool-cache'
import * as fs from 'fs'
import * as os from 'os' import * as os from 'os'
import * as path from 'path' import * as path from 'path'
@@ -102,27 +103,26 @@ export async function installJulia(version: string, arch: string): Promise<strin
core.debug(`downloading Julia from ${downloadURL}`) core.debug(`downloading Julia from ${downloadURL}`)
const juliaDownloadPath = await tc.downloadTool(downloadURL) const juliaDownloadPath = await tc.downloadTool(downloadURL)
const tempInstallDir = fs.mkdtempSync(`julia-${arch}-${version}-`)
// Install it // Install it
switch (osPlat) { switch (osPlat) {
case 'linux': case 'linux':
// tc.extractTar doesn't support stripping components, so we have to call tar manually // tc.extractTar doesn't support stripping components, so we have to call tar manually
await exec.exec('mkdir', [`${process.env.HOME}/julia`]) await exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir])
await exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', `${process.env.HOME}/julia`]) return tempInstallDir
return `${process.env.HOME}/julia`
case 'win32': case 'win32':
const juliaInstallationPath = path.join('C:', 'Julia')
if (version == 'nightly' || semver.gtr(version, '1.3', {includePrerelease: true})) { if (version == 'nightly' || semver.gtr(version, '1.3', {includePrerelease: true})) {
// The installer changed in 1.4: https://github.com/JuliaLang/julia/blob/ef0c9108b12f3ae177c51037934351ffa703b0b5/NEWS.md#build-system-changes // The installer changed in 1.4: https://github.com/JuliaLang/julia/blob/ef0c9108b12f3ae177c51037934351ffa703b0b5/NEWS.md#build-system-changes
await exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/SILENT /dir=${juliaInstallationPath}" -NoNewWindow -Wait`]) await exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/SILENT /dir=${path.join(process.cwd(), tempInstallDir)}" -NoNewWindow -Wait`])
} else { } else {
await exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/S /D=${juliaInstallationPath}" -NoNewWindow -Wait`]) await exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/S /D=${path.join(process.cwd(), tempInstallDir)}" -NoNewWindow -Wait`])
} }
return juliaInstallationPath return tempInstallDir
case 'darwin': case 'darwin':
await exec.exec('hdiutil', ['attach', juliaDownloadPath]) await exec.exec('hdiutil', ['attach', juliaDownloadPath])
await exec.exec('mkdir', [`${process.env.HOME}/julia`]) await exec.exec('/bin/bash', ['-c', `cp -a /Volumes/Julia-*/Julia-*.app/Contents/Resources/julia ${tempInstallDir}`])
await exec.exec('/bin/bash', ['-c', `cp -a /Volumes/Julia-*/Julia-*.app/Contents/Resources/julia ${process.env.HOME}`]) return path.join(tempInstallDir, 'julia')
return `${process.env.HOME}/julia`
default: default:
throw new Error(`Platform ${osPlat} is not supported`) throw new Error(`Platform ${osPlat} is not supported`)
} }

View File

@@ -2,6 +2,7 @@ import * as core from '@actions/core'
import * as exec from '@actions/exec' import * as exec from '@actions/exec'
import * as tc from '@actions/tool-cache' import * as tc from '@actions/tool-cache'
import * as fs from 'fs'
import * as https from 'https' import * as https from 'https'
import * as path from 'path' import * as path from 'path'
@@ -58,12 +59,18 @@ async function run() {
// Add it to cache // Add it to cache
juliaPath = await tc.cacheDir(juliaInstallationPath, 'julia', version, arch) juliaPath = await tc.cacheDir(juliaInstallationPath, 'julia', version, arch)
core.debug(`added Julia to cache: ${juliaPath}`) core.debug(`added Julia to cache: ${juliaPath}`)
// Remove temporary dir
fs.rmdirSync(juliaInstallationPath, {recursive: true})
} else { } else {
core.debug(`using cached version of Julia: ${juliaPath}`) core.debug(`using cached version of Julia: ${juliaPath}`)
} }
// Add it to PATH // Add it to PATH
core.addPath(path.join(juliaPath, 'bin')) core.addPath(path.join(juliaPath, 'bin'))
// Set output
core.setOutput('julia-bindir', path.join(juliaPath, 'bin'))
// Test if Julia has been installed // Test if Julia has been installed
exec.exec('julia', ['--version']) exec.exec('julia', ['--version'])