mirror of
https://github.com/julia-actions/setup-julia.git
synced 2026-02-12 02:56:54 +08:00
If the user provides default as the value of the arch input, use the runner machine's architecture (#263)
* If the user provides `default` as the value of the `arch` input, use the runner machine's architecture * `npm run build` * Convert the key `processedArchInput` to lower case before indexing into the `archSynonyms` dict * `npm run build` --------- Co-authored-by: Ian Butterworth <i.r.butterworth@gmail.com>
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
name: 'Setup Julia environment'
|
name: 'Setup Julia environment'
|
||||||
description: 'Setup a Julia environment and add it to the PATH'
|
description: 'Setup a Julia environment and add it to the PATH'
|
||||||
author: 'Sascha Mann'
|
author: 'Sascha Mann'
|
||||||
inputs:
|
inputs:
|
||||||
version:
|
version:
|
||||||
description: 'The Julia version to download (if necessary) and use. Example: 1.0.4'
|
description: 'The Julia version to download (if necessary) and use. Example: 1.0.4'
|
||||||
default: '1'
|
default: '1'
|
||||||
@@ -12,7 +12,7 @@ inputs:
|
|||||||
arch:
|
arch:
|
||||||
description: 'Architecture of the Julia binaries. Defaults to the architecture of the runner executing the job.'
|
description: 'Architecture of the Julia binaries. Defaults to the architecture of the runner executing the job.'
|
||||||
required: false
|
required: false
|
||||||
default: '${{ runner.arch }}'
|
default: 'default'
|
||||||
show-versioninfo:
|
show-versioninfo:
|
||||||
description: 'Display InteractiveUtils.versioninfo() after installing'
|
description: 'Display InteractiveUtils.versioninfo() after installing'
|
||||||
required: false
|
required: false
|
||||||
|
|||||||
36
lib/setup-julia.js
generated
36
lib/setup-julia.js
generated
@@ -36,15 +36,17 @@ const core = __importStar(require("@actions/core"));
|
|||||||
const tc = __importStar(require("@actions/tool-cache"));
|
const tc = __importStar(require("@actions/tool-cache"));
|
||||||
const fs = __importStar(require("fs"));
|
const fs = __importStar(require("fs"));
|
||||||
const https = __importStar(require("https"));
|
const https = __importStar(require("https"));
|
||||||
|
const os = __importStar(require("os"));
|
||||||
const path = __importStar(require("path"));
|
const path = __importStar(require("path"));
|
||||||
const installer = __importStar(require("./installer"));
|
const installer = __importStar(require("./installer"));
|
||||||
|
// Note: before we index into this dict, we always first do `.toLowerCase()` on
|
||||||
|
// the key.
|
||||||
|
//
|
||||||
|
// Therefore, this dict does not need to account for differences in case.
|
||||||
const archSynonyms = {
|
const archSynonyms = {
|
||||||
'x86': 'x86',
|
'x86': 'x86',
|
||||||
'X86': 'x86',
|
|
||||||
'x64': 'x64',
|
'x64': 'x64',
|
||||||
'X64': 'x64',
|
|
||||||
'aarch64': 'aarch64',
|
'aarch64': 'aarch64',
|
||||||
'ARM64': 'aarch64',
|
|
||||||
'arm64': 'aarch64'
|
'arm64': 'aarch64'
|
||||||
};
|
};
|
||||||
function run() {
|
function run() {
|
||||||
@@ -65,22 +67,36 @@ function run() {
|
|||||||
core.debug(`ERROR: Could not retrieve runner IP: ${err}`);
|
core.debug(`ERROR: Could not retrieve runner IP: ${err}`);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// Inputs
|
// Inputs.
|
||||||
const versionInput = core.getInput('version');
|
// Note that we intentionally strip leading and lagging whitespace by using `.trim()`
|
||||||
const includePrereleases = core.getInput('include-all-prereleases') == 'true';
|
const versionInput = core.getInput('version').trim();
|
||||||
const originalArchInput = core.getInput('arch');
|
const includePrereleases = core.getInput('include-all-prereleases').trim() == 'true';
|
||||||
|
const originalArchInput = core.getInput('arch').trim();
|
||||||
// It can easily happen that, for example, a workflow file contains an input `version: ${{ matrix.julia-version }}`
|
// It can easily happen that, for example, a workflow file contains an input `version: ${{ matrix.julia-version }}`
|
||||||
// while the strategy matrix only contains a key `${{ matrix.version }}`.
|
// while the strategy matrix only contains a key `${{ matrix.version }}`.
|
||||||
// In that case, we want the action to fail, rather than trying to download julia from an URL that's missing parts and 404ing.
|
// In that case, we want the action to fail, rather than trying to download julia from an URL that's missing parts and 404ing.
|
||||||
// We _could_ fall back to the default but that means that builds silently do things differently than they're meant to, which
|
// We _could_ fall back to the default but that means that builds silently do things differently than they're meant to, which
|
||||||
// is worse than failing the build.
|
// is worse than failing the build.
|
||||||
if (!versionInput) {
|
if (!versionInput) { // if `versionInput` is an empty string
|
||||||
throw new Error('Version input must not be null');
|
throw new Error('Version input must not be null');
|
||||||
}
|
}
|
||||||
if (!originalArchInput) {
|
if (!originalArchInput) { // if `originalArchInput` is an empty string
|
||||||
throw new Error(`Arch input must not be null`);
|
throw new Error(`Arch input must not be null`);
|
||||||
}
|
}
|
||||||
const arch = archSynonyms[originalArchInput];
|
let processedArchInput;
|
||||||
|
if (originalArchInput == "default") {
|
||||||
|
// If the user sets the `arch` input to `default`, then we use the
|
||||||
|
// architecture of the machine that we are running on.
|
||||||
|
processedArchInput = os.arch();
|
||||||
|
core.debug(`The "arch" input is "default", so we will use the machine arch: ${processedArchInput}`);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
processedArchInput = originalArchInput;
|
||||||
|
}
|
||||||
|
// Note: we convert the key `processedArchInput` to lower case
|
||||||
|
// before we index into the `archSynonyms` dict.
|
||||||
|
const arch = archSynonyms[processedArchInput.toLowerCase()];
|
||||||
|
core.debug(`Mapped the "arch" from ${processedArchInput} to ${arch}`);
|
||||||
const versionInfo = yield installer.getJuliaVersionInfo();
|
const versionInfo = yield installer.getJuliaVersionInfo();
|
||||||
const availableReleases = yield installer.getJuliaVersions(versionInfo);
|
const availableReleases = yield installer.getJuliaVersions(versionInfo);
|
||||||
const version = installer.getJuliaVersion(availableReleases, versionInput, includePrereleases);
|
const version = installer.getJuliaVersion(availableReleases, versionInput, includePrereleases);
|
||||||
|
|||||||
@@ -3,17 +3,19 @@ import * as tc from '@actions/tool-cache'
|
|||||||
|
|
||||||
import * as fs from 'fs'
|
import * as fs from 'fs'
|
||||||
import * as https from 'https'
|
import * as https from 'https'
|
||||||
|
import * as os from 'os'
|
||||||
import * as path from 'path'
|
import * as path from 'path'
|
||||||
|
|
||||||
import * as installer from './installer'
|
import * as installer from './installer'
|
||||||
|
|
||||||
|
// Note: before we index into this dict, we always first do `.toLowerCase()` on
|
||||||
|
// the key.
|
||||||
|
//
|
||||||
|
// Therefore, this dict does not need to account for differences in case.
|
||||||
const archSynonyms = {
|
const archSynonyms = {
|
||||||
'x86': 'x86',
|
'x86': 'x86',
|
||||||
'X86': 'x86',
|
|
||||||
'x64': 'x64',
|
'x64': 'x64',
|
||||||
'X64': 'x64',
|
|
||||||
'aarch64': 'aarch64',
|
'aarch64': 'aarch64',
|
||||||
'ARM64': 'aarch64',
|
|
||||||
'arm64': 'aarch64'
|
'arm64': 'aarch64'
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,24 +39,37 @@ async function run() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inputs
|
// Inputs.
|
||||||
const versionInput = core.getInput('version')
|
// Note that we intentionally strip leading and lagging whitespace by using `.trim()`
|
||||||
const includePrereleases = core.getInput('include-all-prereleases') == 'true'
|
const versionInput = core.getInput('version').trim()
|
||||||
const originalArchInput = core.getInput('arch')
|
const includePrereleases = core.getInput('include-all-prereleases').trim() == 'true'
|
||||||
|
const originalArchInput = core.getInput('arch').trim()
|
||||||
|
|
||||||
// It can easily happen that, for example, a workflow file contains an input `version: ${{ matrix.julia-version }}`
|
// It can easily happen that, for example, a workflow file contains an input `version: ${{ matrix.julia-version }}`
|
||||||
// while the strategy matrix only contains a key `${{ matrix.version }}`.
|
// while the strategy matrix only contains a key `${{ matrix.version }}`.
|
||||||
// In that case, we want the action to fail, rather than trying to download julia from an URL that's missing parts and 404ing.
|
// In that case, we want the action to fail, rather than trying to download julia from an URL that's missing parts and 404ing.
|
||||||
// We _could_ fall back to the default but that means that builds silently do things differently than they're meant to, which
|
// We _could_ fall back to the default but that means that builds silently do things differently than they're meant to, which
|
||||||
// is worse than failing the build.
|
// is worse than failing the build.
|
||||||
if (!versionInput) {
|
if (!versionInput) { // if `versionInput` is an empty string
|
||||||
throw new Error('Version input must not be null')
|
throw new Error('Version input must not be null')
|
||||||
}
|
}
|
||||||
if (!originalArchInput) {
|
if (!originalArchInput) { // if `originalArchInput` is an empty string
|
||||||
throw new Error(`Arch input must not be null`)
|
throw new Error(`Arch input must not be null`)
|
||||||
}
|
}
|
||||||
|
|
||||||
const arch = archSynonyms[originalArchInput]
|
let processedArchInput: string;
|
||||||
|
if (originalArchInput == "default") {
|
||||||
|
// If the user sets the `arch` input to `default`, then we use the
|
||||||
|
// architecture of the machine that we are running on.
|
||||||
|
processedArchInput = os.arch();
|
||||||
|
core.debug(`The "arch" input is "default", so we will use the machine arch: ${processedArchInput}`)
|
||||||
|
} else {
|
||||||
|
processedArchInput = originalArchInput;
|
||||||
|
}
|
||||||
|
// Note: we convert the key `processedArchInput` to lower case
|
||||||
|
// before we index into the `archSynonyms` dict.
|
||||||
|
const arch = archSynonyms[processedArchInput.toLowerCase()]
|
||||||
|
core.debug(`Mapped the "arch" from ${processedArchInput} to ${arch}`)
|
||||||
|
|
||||||
const versionInfo = await installer.getJuliaVersionInfo()
|
const versionInfo = await installer.getJuliaVersionInfo()
|
||||||
const availableReleases = await installer.getJuliaVersions(versionInfo)
|
const availableReleases = await installer.getJuliaVersions(versionInfo)
|
||||||
|
|||||||
Reference in New Issue
Block a user