mirror of
https://github.com/julia-actions/setup-julia.git
synced 2026-02-12 02:56:54 +08:00
Support release nightlies (#63)
* Support release nightlies See #62 * Replace == nightly with endsWith nightly * Use majorMinorMatch, not full match * Replace more (in-)equality checks * Reduce number of duplicate CI builds * Add example to docs * Tidy up nightly conditions
This commit is contained in:
6
.github/workflows/example-builds-nightly.yml
vendored
6
.github/workflows/example-builds-nightly.yml
vendored
@@ -2,6 +2,7 @@ name: Example builds (nightly)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: ['main', 'master', 'releases/*']
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: '37 17 * * *'
|
||||
@@ -12,6 +13,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
julia-version: [nightly, 1.6-nightly]
|
||||
julia-arch: [x64, x86]
|
||||
os: [ubuntu-latest, macOS-latest, windows-latest]
|
||||
# 32-bit Julia binaries are not available on macOS
|
||||
@@ -28,10 +30,10 @@ jobs:
|
||||
npm run build
|
||||
npm run pack
|
||||
|
||||
- name: "Set up Julia (nightly)"
|
||||
- name: "Set up Julia (${{ matrix.julia-version }})"
|
||||
uses: ./
|
||||
with:
|
||||
version: nightly
|
||||
version: ${{ matrix.julia-version }}
|
||||
arch: ${{ matrix.julia-arch }}
|
||||
show-versioninfo: 'true'
|
||||
- run: julia --version
|
||||
|
||||
5
.github/workflows/example-builds.yml
vendored
5
.github/workflows/example-builds.yml
vendored
@@ -1,6 +1,9 @@
|
||||
name: Example builds
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
branches: ['main', 'master', 'releases/*']
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
test:
|
||||
|
||||
@@ -93,6 +93,7 @@ You can either specify specific Julia versions or version ranges. If you specify
|
||||
- `^1.3.0-0` is a **caret** version range that includes _all_ pre-releases. It matches all versions `≥ 1.3.0-` and `< 2.0.0`.
|
||||
- `~1.3.0-0` is a **tilde** version range that includes _all_ pre-releases. It matches all versions `≥ 1.3.0-` and `< 1.4.0`.
|
||||
- `nightly` will install the latest nightly build.
|
||||
- `1.6-nightly` will install the latest nightly build for the upcoming 1.6 release. This version will only be available during certain phases of the Julia release cycle.
|
||||
|
||||
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. You can test what version will be selected for a given input in this JavaScript [REPL](https://repl.it/@SaschaMann/setup-julia-version-logic).
|
||||
|
||||
|
||||
23
lib/installer.js
generated
23
lib/installer.js
generated
@@ -78,14 +78,10 @@ function getJuliaVersions(versionInfo) {
|
||||
}
|
||||
exports.getJuliaVersions = getJuliaVersions;
|
||||
function getJuliaVersion(availableReleases, versionInput) {
|
||||
if (semver.valid(versionInput) == versionInput) {
|
||||
// versionInput is a valid version, use it directly
|
||||
if (semver.valid(versionInput) == versionInput || versionInput.endsWith('nightly')) {
|
||||
// versionInput is a valid version or a nightly version, use it directly
|
||||
return versionInput;
|
||||
}
|
||||
// nightlies
|
||||
if (versionInput == 'nightly') {
|
||||
return 'nightly';
|
||||
}
|
||||
// Use the highest available version that matches versionInput
|
||||
let version = semver.maxSatisfying(availableReleases, versionInput);
|
||||
if (version == null) {
|
||||
@@ -119,7 +115,7 @@ function getNightlyFileName(arch) {
|
||||
return `julia-latest${versionExt}.${ext}`;
|
||||
}
|
||||
function getFileInfo(versionInfo, version, arch) {
|
||||
if (version == 'nightly') {
|
||||
if (version.endsWith('nightly')) {
|
||||
return null;
|
||||
}
|
||||
for (let file of versionInfo[version].files) {
|
||||
@@ -131,10 +127,15 @@ function getFileInfo(versionInfo, version, arch) {
|
||||
}
|
||||
exports.getFileInfo = getFileInfo;
|
||||
function getDownloadURL(fileInfo, version, arch) {
|
||||
const baseURL = `https://julialangnightlies-s3.julialang.org/bin/${osMap[osPlat]}/${arch}`;
|
||||
// release branch nightlies, e.g. 1.6-nightlies should return .../bin/linux/x64/1.6/julia-latest-linux64.tar.gz
|
||||
const majorMinorMatches = /^(\d*.\d*)-nightly/.exec(version);
|
||||
if (majorMinorMatches) {
|
||||
return `${baseURL}/${majorMinorMatches[1]}/${getNightlyFileName(arch)}`;
|
||||
}
|
||||
// nightlies
|
||||
if (version == 'nightly') {
|
||||
const baseURL = 'https://julialangnightlies-s3.julialang.org/bin';
|
||||
return `${baseURL}/${osMap[osPlat]}/${arch}/${getNightlyFileName(arch)}`;
|
||||
return `${baseURL}/${getNightlyFileName(arch)}`;
|
||||
}
|
||||
return fileInfo.url;
|
||||
}
|
||||
@@ -147,7 +148,7 @@ function installJulia(versionInfo, version, arch) {
|
||||
core.debug(`downloading Julia from ${downloadURL}`);
|
||||
const juliaDownloadPath = yield tc.downloadTool(downloadURL);
|
||||
// Verify checksum
|
||||
if (version != 'nightly') {
|
||||
if (!version.endsWith('nightly')) {
|
||||
const checkSum = yield calculateChecksum(juliaDownloadPath);
|
||||
if (fileInfo.sha256 != checkSum) {
|
||||
throw new Error(`Checksum of downloaded file does not match the expected checksum from versions.json.\nExpected: ${fileInfo.sha256}\nGot: ${checkSum}`);
|
||||
@@ -165,7 +166,7 @@ function installJulia(versionInfo, version, arch) {
|
||||
yield exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir]);
|
||||
return tempInstallDir;
|
||||
case 'win32':
|
||||
if (version == 'nightly' || semver.gtr(version, '1.3', { includePrerelease: true })) {
|
||||
if (version.endsWith('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
|
||||
yield exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/SILENT /dir=${path.join(process.cwd(), tempInstallDir)}" -NoNewWindow -Wait`]);
|
||||
}
|
||||
|
||||
@@ -66,16 +66,11 @@ export async function getJuliaVersions(versionInfo): Promise<string[]> {
|
||||
}
|
||||
|
||||
export function getJuliaVersion(availableReleases: string[], versionInput: string): string {
|
||||
if (semver.valid(versionInput) == versionInput) {
|
||||
// versionInput is a valid version, use it directly
|
||||
if (semver.valid(versionInput) == versionInput || versionInput.endsWith('nightly')) {
|
||||
// versionInput is a valid version or a nightly version, use it directly
|
||||
return versionInput
|
||||
}
|
||||
|
||||
// nightlies
|
||||
if (versionInput == 'nightly') {
|
||||
return 'nightly'
|
||||
}
|
||||
|
||||
// Use the highest available version that matches versionInput
|
||||
let version = semver.maxSatisfying(availableReleases, versionInput)
|
||||
if (version == null) {
|
||||
@@ -111,7 +106,7 @@ function getNightlyFileName(arch: string): string {
|
||||
}
|
||||
|
||||
export function getFileInfo(versionInfo, version: string, arch: string) {
|
||||
if (version == 'nightly') {
|
||||
if (version.endsWith('nightly')) {
|
||||
return null
|
||||
}
|
||||
|
||||
@@ -125,10 +120,17 @@ export function getFileInfo(versionInfo, version: string, arch: string) {
|
||||
}
|
||||
|
||||
export function getDownloadURL(fileInfo, version: string, arch: string): string {
|
||||
const baseURL = `https://julialangnightlies-s3.julialang.org/bin/${osMap[osPlat]}/${arch}`
|
||||
|
||||
// release branch nightlies, e.g. 1.6-nightlies should return .../bin/linux/x64/1.6/julia-latest-linux64.tar.gz
|
||||
const majorMinorMatches = /^(\d*.\d*)-nightly/.exec(version)
|
||||
if (majorMinorMatches) {
|
||||
return `${baseURL}/${majorMinorMatches[1]}/${getNightlyFileName(arch)}`
|
||||
}
|
||||
|
||||
// nightlies
|
||||
if (version == 'nightly') {
|
||||
const baseURL = 'https://julialangnightlies-s3.julialang.org/bin'
|
||||
return `${baseURL}/${osMap[osPlat]}/${arch}/${getNightlyFileName(arch)}`
|
||||
return `${baseURL}/${getNightlyFileName(arch)}`
|
||||
}
|
||||
|
||||
return fileInfo.url
|
||||
@@ -142,7 +144,7 @@ export async function installJulia(versionInfo, version: string, arch: string):
|
||||
const juliaDownloadPath = await tc.downloadTool(downloadURL)
|
||||
|
||||
// Verify checksum
|
||||
if (version != 'nightly') {
|
||||
if (!version.endsWith('nightly')) {
|
||||
const checkSum = await calculateChecksum(juliaDownloadPath)
|
||||
if (fileInfo.sha256 != checkSum) {
|
||||
throw new Error(`Checksum of downloaded file does not match the expected checksum from versions.json.\nExpected: ${fileInfo.sha256}\nGot: ${checkSum}`)
|
||||
@@ -161,7 +163,7 @@ export async function installJulia(versionInfo, version: string, arch: string):
|
||||
await exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir])
|
||||
return tempInstallDir
|
||||
case 'win32':
|
||||
if (version == 'nightly' || semver.gtr(version, '1.3', {includePrerelease: true})) {
|
||||
if (version.endsWith('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
|
||||
await exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/SILENT /dir=${path.join(process.cwd(), tempInstallDir)}" -NoNewWindow -Wait`])
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user