mirror of
https://github.com/julia-actions/setup-julia.git
synced 2026-02-19 14:36:54 +08:00
Support nightly Julia builds
This commit is contained in:
@@ -42,6 +42,7 @@ You can either specify specific Julia versions or version ranges. If you specify
|
|||||||
- `1.2.0` is a valid semver version. The action will try to download exactly this version. If it's not available, the build step will fail.
|
- `1.2.0` is a valid semver version. The action will try to download exactly this version. If it's not available, the build step will fail.
|
||||||
- `1.0` is a version range that will match the highest available Julia version that starts with `1.0`, e.g. `1.0.5`.
|
- `1.0` is a version range that will match the highest available Julia version that starts with `1.0`, e.g. `1.0.5`.
|
||||||
- `^1.3.0-rc1` is a caret version range that includes preleases. It matches all versions `≥ 1.3.0-rc1` and `< 1.4.0`.
|
- `^1.3.0-rc1` is a caret version range that includes preleases. It matches all versions `≥ 1.3.0-rc1` and `< 1.4.0`.
|
||||||
|
- `nightly` will install the latest nightly build.
|
||||||
|
|
||||||
Internally the action uses node's semver package to resolve version ranges. Its [documentation](https://github.com/npm/node-semver#advanced-range-syntax) contains more details on the version range syntax.
|
Internally the action uses node's semver package to resolve version ranges. Its [documentation](https://github.com/npm/node-semver#advanced-range-syntax) contains more details on the version range syntax.
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,10 @@ describe('installer tests', () => {
|
|||||||
expect(await installer.getJuliaVersion(['v1.2.0', 'v1.3.0-alpha', 'v1.3.0-rc1', 'v1.3.0'], '1.3.0-alpha')).toEqual('1.3.0-alpha')
|
expect(await installer.getJuliaVersion(['v1.2.0', 'v1.3.0-alpha', 'v1.3.0-rc1', 'v1.3.0'], '1.3.0-alpha')).toEqual('1.3.0-alpha')
|
||||||
expect(await installer.getJuliaVersion([], '1.3.0-rc2')).toEqual('1.3.0-rc2')
|
expect(await installer.getJuliaVersion([], '1.3.0-rc2')).toEqual('1.3.0-rc2')
|
||||||
})
|
})
|
||||||
|
it('Doesn\'t change the version when given `nightly`', async () => {
|
||||||
|
expect(await installer.getJuliaVersion([], 'nightly')).toEqual('nightly')
|
||||||
|
expect(await installer.getJuliaVersion(testVersions, 'nightly')).toEqual('nightly')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
describe('version ranges', () => {
|
describe('version ranges', () => {
|
||||||
it('Chooses the highest available version that matches the input', async () => {
|
it('Chooses the highest available version that matches the input', async () => {
|
||||||
|
|||||||
21
lib/installer.js
generated
21
lib/installer.js
generated
@@ -32,6 +32,10 @@ function getJuliaVersion(availableReleases, versionInput) {
|
|||||||
// versionInput is a valid version, use it directly
|
// versionInput is a valid version, use it directly
|
||||||
return versionInput;
|
return versionInput;
|
||||||
}
|
}
|
||||||
|
// nightlies
|
||||||
|
if (versionInput == 'nightly') {
|
||||||
|
return 'nightly';
|
||||||
|
}
|
||||||
// Use the highest available version that matches versionInput
|
// Use the highest available version that matches versionInput
|
||||||
let version = semver.maxSatisfying(availableReleases, versionInput);
|
let version = semver.maxSatisfying(availableReleases, versionInput);
|
||||||
if (version == null) {
|
if (version == null) {
|
||||||
@@ -47,9 +51,7 @@ function getMajorMinorVersion(version) {
|
|||||||
return version.split('.').slice(0, 2).join('.');
|
return version.split('.').slice(0, 2).join('.');
|
||||||
}
|
}
|
||||||
function getDownloadURL(version, arch) {
|
function getDownloadURL(version, arch) {
|
||||||
const baseURL = 'https://julialang-s3.julialang.org/bin';
|
|
||||||
let platform;
|
let platform;
|
||||||
const versionDir = getMajorMinorVersion(version);
|
|
||||||
if (osPlat === 'win32') { // Windows
|
if (osPlat === 'win32') { // Windows
|
||||||
platform = 'winnt';
|
platform = 'winnt';
|
||||||
}
|
}
|
||||||
@@ -65,6 +67,14 @@ function getDownloadURL(version, arch) {
|
|||||||
else {
|
else {
|
||||||
throw `Platform ${osPlat} is not supported`;
|
throw `Platform ${osPlat} is not supported`;
|
||||||
}
|
}
|
||||||
|
// nightlies
|
||||||
|
if (version == 'nightly') {
|
||||||
|
const baseURL = 'https://julialangnightlies-s3.julialang.org/bin';
|
||||||
|
return `${baseURL}/${platform}/${arch}/${getFileName('latest', arch)}`;
|
||||||
|
}
|
||||||
|
// normal versions
|
||||||
|
const baseURL = 'https://julialang-s3.julialang.org/bin';
|
||||||
|
const versionDir = getMajorMinorVersion(version);
|
||||||
return `${baseURL}/${platform}/${arch}/${versionDir}/${getFileName(version, arch)}`;
|
return `${baseURL}/${platform}/${arch}/${versionDir}/${getFileName(version, arch)}`;
|
||||||
}
|
}
|
||||||
function getFileName(version, arch) {
|
function getFileName(version, arch) {
|
||||||
@@ -81,7 +91,12 @@ function getFileName(version, arch) {
|
|||||||
ext = 'dmg';
|
ext = 'dmg';
|
||||||
}
|
}
|
||||||
else if (osPlat === 'linux') { // Linux
|
else if (osPlat === 'linux') { // Linux
|
||||||
versionExt = arch == 'x64' ? '-linux-x86_64' : '-linux-i686';
|
if (version == 'latest') { // nightly version
|
||||||
|
versionExt = arch == 'x64' ? '-linux64' : '-linux32';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
versionExt = arch == 'x64' ? '-linux-x86_64' : '-linux-i686';
|
||||||
|
}
|
||||||
ext = 'tar.gz';
|
ext = 'tar.gz';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -21,6 +21,11 @@ export async function getJuliaVersion(availableReleases: string[], versionInput:
|
|||||||
return versionInput
|
return versionInput
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// nightlies
|
||||||
|
if (versionInput == 'nightly') {
|
||||||
|
return 'nightly'
|
||||||
|
}
|
||||||
|
|
||||||
// Use the highest available version that matches versionInput
|
// Use the highest available version that matches versionInput
|
||||||
let version = semver.maxSatisfying(availableReleases, versionInput)
|
let version = semver.maxSatisfying(availableReleases, versionInput)
|
||||||
if (version == null) {
|
if (version == null) {
|
||||||
@@ -38,9 +43,7 @@ function getMajorMinorVersion(version: string): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getDownloadURL(version: string, arch: string): string {
|
function getDownloadURL(version: string, arch: string): string {
|
||||||
const baseURL = 'https://julialang-s3.julialang.org/bin'
|
|
||||||
let platform: string
|
let platform: string
|
||||||
const versionDir = getMajorMinorVersion(version)
|
|
||||||
|
|
||||||
if (osPlat === 'win32') { // Windows
|
if (osPlat === 'win32') { // Windows
|
||||||
platform = 'winnt'
|
platform = 'winnt'
|
||||||
@@ -55,6 +58,16 @@ function getDownloadURL(version: string, arch: string): string {
|
|||||||
throw `Platform ${osPlat} is not supported`
|
throw `Platform ${osPlat} is not supported`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// nightlies
|
||||||
|
if (version == 'nightly') {
|
||||||
|
const baseURL = 'https://julialangnightlies-s3.julialang.org/bin'
|
||||||
|
return `${baseURL}/${platform}/${arch}/${getFileName('latest', arch)}`
|
||||||
|
}
|
||||||
|
|
||||||
|
// normal versions
|
||||||
|
const baseURL = 'https://julialang-s3.julialang.org/bin'
|
||||||
|
const versionDir = getMajorMinorVersion(version)
|
||||||
|
|
||||||
return `${baseURL}/${platform}/${arch}/${versionDir}/${getFileName(version, arch)}`
|
return `${baseURL}/${platform}/${arch}/${versionDir}/${getFileName(version, arch)}`
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,7 +84,11 @@ function getFileName(version: string, arch: string): string {
|
|||||||
versionExt = '-mac64'
|
versionExt = '-mac64'
|
||||||
ext = 'dmg'
|
ext = 'dmg'
|
||||||
} else if (osPlat === 'linux') { // Linux
|
} else if (osPlat === 'linux') { // Linux
|
||||||
versionExt = arch == 'x64' ? '-linux-x86_64' : '-linux-i686'
|
if (version == 'latest') { // nightly version
|
||||||
|
versionExt = arch == 'x64' ? '-linux64' : '-linux32'
|
||||||
|
} else {
|
||||||
|
versionExt = arch == 'x64' ? '-linux-x86_64' : '-linux-i686'
|
||||||
|
}
|
||||||
ext = 'tar.gz'
|
ext = 'tar.gz'
|
||||||
} else {
|
} else {
|
||||||
throw `Platform ${osPlat} is not supported`
|
throw `Platform ${osPlat} is not supported`
|
||||||
|
|||||||
Reference in New Issue
Block a user