Allow lts for the LTS, and allow pre for the latest pre-release (#234)

* update tests to latest `versions.json`

* allow specifying the version as `lts` to install the latest LTS version

for now, this just hardcodes the LTS version in the source (similar to how juliaup does it) since the latest LTS is not available in `versions.json`. Since the LTS is updated so rarely this might be ok for now.

* add a 'pre' version

* Run `npm ci` followed by `npm run build`

* Add a CI job to test `pre`

---------

Co-authored-by: Viral B. Shah <ViralBShah@users.noreply.github.com>
Co-authored-by: Dilum Aluthge <dilum@aluthge.com>
This commit is contained in:
Kristoffer Carlsson
2024-06-26 20:12:52 +02:00
committed by GitHub
parent 42e03d3446
commit 389de5c0df
7 changed files with 17777 additions and 3929 deletions

View File

@@ -19,7 +19,7 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
julia-version: ['1.0.5', '1.2', '^1.5.0-beta1', '1'] julia-version: ['1.0.5', '1.2', '^1.5.0-beta1', '1', 'lts', 'pre']
julia-arch: [x64, x86] julia-arch: [x64, x86]
os: [ubuntu-latest, macOS-latest, windows-latest] os: [ubuntu-latest, macOS-latest, windows-latest]
# 32-bit Julia binaries are not available on macOS # 32-bit Julia binaries are not available on macOS

View File

@@ -109,6 +109,8 @@ You can either specify specific Julia versions or version ranges. If you specify
- `'~1.3.0-rc1'` is a **tilde** version range that includes pre-releases of `1.3.0` starting at `rc1`. It matches all versions `≥ 1.3.0-rc1` and `< 1.4.0`. - `'~1.3.0-rc1'` is a **tilde** version range that includes pre-releases of `1.3.0` starting at `rc1`. It matches all versions `≥ 1.3.0-rc1` and `< 1.4.0`.
- `'^1.3.0-0'` is a **caret** version range that includes _all_ pre-releases of `1.3.0`. It matches all versions `≥ 1.3.0-` and `< 2.0.0`. - `'^1.3.0-0'` is a **caret** version range that includes _all_ pre-releases of `1.3.0`. 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 of `1.3.0`. It matches all versions `≥ 1.3.0-` and `< 1.4.0`. - `'~1.3.0-0'` is a **tilde** version range that includes _all_ pre-releases of `1.3.0`. It matches all versions `≥ 1.3.0-` and `< 1.4.0`.
- `'lts'` will install the latest LTS build.
- `'pre'` will install the latest prerelease build.
- `'nightly'` will install the latest nightly build. - `'nightly'` will install the latest nightly build.
- `'1.7-nightly'` will install the latest nightly build for the upcoming 1.7 release. This version will only be available during certain phases of the Julia release cycle. - `'1.7-nightly'` will install the latest nightly build for the upcoming 1.7 release. This version will only be available during certain phases of the Julia release cycle.

File diff suppressed because it is too large Load Diff

View File

@@ -4,30 +4,30 @@
import * as path from 'path' import * as path from 'path'
import * as io from '@actions/io' import * as io from '@actions/io'
import nock = require('nock')
import * as semver from 'semver' import * as semver from 'semver'
import nock = require('nock')
const testVersions = [ const testVersions = [
'0.1.2', '0.2.0', '0.2.1', '0.3.0', '0.1.2',
'0.3.1', '0.3.10', '0.3.11', '0.3.12', '0.2.0', '0.2.1',
'0.3.2', '0.3.3', '0.3.4', '0.3.5', '0.3.0', '0.3.1', '0.3.10', '0.3.11', '0.3.12', '0.3.2', '0.3.3', '0.3.4', '0.3.5', '0.3.6', '0.3.7', '0.3.8', '0.3.9',
'0.3.6', '0.3.7', '0.3.8', '0.3.9', '0.4.0', '0.4.0-rc1', '0.4.0-rc2', '0.4.0-rc3', '0.4.0-rc4', '0.4.1', '0.4.2', '0.4.3', '0.4.4', '0.4.5', '0.4.6', '0.4.7',
'0.4.0', '0.4.0-rc1', '0.4.0-rc2', '0.4.0-rc3', '0.5.0', '0.5.0-rc0', '0.5.0-rc1', '0.5.0-rc2', '0.5.0-rc3', '0.5.0-rc4', '0.5.1', '0.5.2',
'0.4.0-rc4', '0.4.1', '0.4.2', '0.4.3', '0.6.0', '0.6.0-pre.alpha', '0.6.0-pre.beta', '0.6.0-rc1', '0.6.0-rc2', '0.6.0-rc3', '0.6.1', '0.6.2', '0.6.3', '0.6.4',
'0.4.4', '0.4.5', '0.4.6', '0.4.7', '0.7.0', '0.7.0-alpha', '0.7.0-beta', '0.7.0-beta2', '0.7.0-rc1', '0.7.0-rc2', '0.7.0-rc3',
'0.5.0', '0.5.0-rc0', '0.5.0-rc1', '0.5.0-rc2', '1.0.0', '1.0.0-rc1', '1.0.1', '1.0.2', '1.0.3', '1.0.4', '1.0.5',
'0.5.0-rc3', '0.5.0-rc4', '0.5.1', '0.5.2', '1.1.0', '1.1.0-rc1', '1.1.0-rc2', '1.1.1',
'0.6.0', '0.6.0-pre.alpha', '0.6.0-pre.beta', '0.6.0-rc1', '1.2.0', '1.2.0-rc1', '1.2.0-rc2', '1.2.0-rc3',
'0.6.0-rc2', '0.6.0-rc3', '0.6.1', '0.6.2', '1.3.0', '1.3.0-alpha', '1.3.0-rc1', '1.3.0-rc2', '1.3.0-rc3', '1.3.0-rc4', '1.3.0-rc5', '1.3.1',
'0.6.3', '0.6.4', '0.7.0', '0.7.0-alpha', '1.4.0', '1.4.0-rc1', '1.4.0-rc2', '1.4.1', '1.4.2',
'0.7.0-beta', '0.7.0-beta2', '0.7.0-rc1', '0.7.0-rc2', '1.5.0', '1.5.0-beta1', '1.5.0-rc1', '1.5.0-rc2', '1.5.1', '1.5.2', '1.5.3', '1.5.4',
'0.7.0-rc3', '1.0.0', '1.0.0-rc1', '1.0.1', '1.6.0', '1.6.0-beta1', '1.6.0-rc1', '1.6.0-rc2', '1.6.0-rc3', '1.6.1', '1.6.2', '1.6.3', '1.6.4', '1.6.5', '1.6.6', '1.6.7',
'1.0.2', '1.0.3', '1.0.4', '1.0.5', '1.7.0', '1.7.0-beta1', '1.7.0-beta2', '1.7.0-beta3', '1.7.0-beta4', '1.7.0-rc1', '1.7.0-rc2', '1.7.0-rc3', '1.7.1', '1.7.2', '1.7.3',
'1.1.0', '1.1.0-rc1', '1.1.0-rc2', '1.1.1', '1.8.0', '1.8.0-beta1', '1.8.0-beta2', '1.8.0-beta3', '1.8.0-rc1', '1.8.0-rc2', '1.8.0-rc3', '1.8.0-rc4', '1.8.1', '1.8.2', '1.8.3', '1.8.4', '1.8.5',
'1.2.0', '1.2.0-rc1', '1.2.0-rc2', '1.2.0-rc3', '1.9.0', '1.9.0-alpha1', '1.9.0-beta1', '1.9.0-beta2', '1.9.0-beta3', '1.9.0-beta4', '1.9.0-rc1', '1.9.0-rc2', '1.9.0-rc3', '1.9.1', '1.9.2', '1.9.3', '1.9.4',
'1.3.0-alpha', '1.3.0-rc1', '1.3.0-rc2', '1.3.0-rc3', '1.10.0', '1.10.0-alpha1', '1.10.0-beta1', '1.10.0-beta2', '1.10.0-beta3', '1.10.0-rc1', '1.10.0-rc2', '1.10.0-rc3', '1.10.1', '1.10.2',
'1.3.0-rc4' '1.11.0-alpha1', '1.11.0-alpha2', '1.11.0-beta1'
] ]
const toolDir = path.join(__dirname, 'runner', 'tools') const toolDir = path.join(__dirname, 'runner', 'tools')
@@ -55,22 +55,33 @@ describe('version matching tests', () => {
expect(installer.getJuliaVersion([], 'nightly')).toEqual('nightly') expect(installer.getJuliaVersion([], 'nightly')).toEqual('nightly')
expect(installer.getJuliaVersion(testVersions, 'nightly')).toEqual('nightly') expect(installer.getJuliaVersion(testVersions, 'nightly')).toEqual('nightly')
}) })
it('LTS', () => {
// Update test when LTS is updated
expect(installer.getJuliaVersion(testVersions, 'lts')).toEqual(installer.getJuliaVersion(testVersions, '1.6'))
expect(installer.getJuliaVersion(testVersions, 'lts')).toEqual('1.6.7')
})
it('pre', () => {
expect(installer.getJuliaVersion(testVersions, 'pre')).toEqual('1.11.0-beta1')
})
}) })
describe('version ranges', () => { describe('version ranges', () => {
it('Chooses the highest available version that matches the input', () => { it('Chooses the highest available version that matches the input', () => {
expect(installer.getJuliaVersion(testVersions, '1')).toEqual('1.2.0') expect(installer.getJuliaVersion(testVersions, '1')).toEqual('1.10.2')
expect(installer.getJuliaVersion(testVersions, '1.0')).toEqual('1.0.5') expect(installer.getJuliaVersion(testVersions, '1.0')).toEqual('1.0.5')
expect(installer.getJuliaVersion(testVersions, '^1.3.0-rc1')).toEqual('1.3.0-rc4') expect(installer.getJuliaVersion(testVersions, '^1.3.0-rc1')).toEqual('1.10.2')
expect(installer.getJuliaVersion(testVersions, '^1.2.0-rc1')).toEqual('1.2.0') expect(installer.getJuliaVersion(testVersions, '^1.2.0-rc1')).toEqual('1.10.2')
expect(installer.getJuliaVersion(testVersions, '^1.10.0-rc1')).toEqual('1.10.2')
}) })
}) })
describe('include-prereleases', () => { describe('include-prereleases', () => {
it('Chooses the highest available version that matches the input including prereleases', () => { it('Chooses the highest available version that matches the input including prereleases', () => {
expect(installer.getJuliaVersion(testVersions, '^1.2.0-0', true)).toEqual('1.3.0-rc4') expect(installer.getJuliaVersion(testVersions, '^1.2.0-0', true)).toEqual('1.11.0-beta1')
expect(installer.getJuliaVersion(testVersions, '1', true)).toEqual('1.3.0-rc4') expect(installer.getJuliaVersion(testVersions, '1', true)).toEqual('1.11.0-beta1')
expect(installer.getJuliaVersion(testVersions, '^1.2.0-0', false)).toEqual('1.2.0') expect(installer.getJuliaVersion(testVersions, '^1.2.0-0', false)).toEqual('1.10.2')
}) })
}) })

8
lib/installer.js generated
View File

@@ -42,6 +42,8 @@ const os = __importStar(require("os"));
const path = __importStar(require("path")); const path = __importStar(require("path"));
const retry = require("async-retry"); const retry = require("async-retry");
const semver = __importStar(require("semver")); const semver = __importStar(require("semver"));
const LTS_VERSION = '1.6';
const MAJOR_VERSION = '1'; // Could be deduced from versions.json
// Translations between actions input and Julia arch names // Translations between actions input and Julia arch names
const osMap = { const osMap = {
'win32': 'winnt', 'win32': 'winnt',
@@ -111,6 +113,12 @@ function getJuliaVersion(availableReleases, versionInput, includePrerelease = fa
// versionInput is a valid version or a nightly version, use it directly // versionInput is a valid version or a nightly version, use it directly
return versionInput; return versionInput;
} }
if (versionInput == 'lts') {
return getJuliaVersion(availableReleases, LTS_VERSION, false);
}
if (versionInput == 'pre') {
return getJuliaVersion(availableReleases, MAJOR_VERSION, true);
}
// Use the highest available version that matches versionInput // Use the highest available version that matches versionInput
let version = semver.maxSatisfying(availableReleases, versionInput, { includePrerelease }); let version = semver.maxSatisfying(availableReleases, versionInput, { includePrerelease });
if (version == null) { if (version == null) {

View File

@@ -10,6 +10,9 @@ import retry = require('async-retry')
import * as semver from 'semver' import * as semver from 'semver'
const LTS_VERSION = '1.6'
const MAJOR_VERSION = '1' // Could be deduced from versions.json
// Translations between actions input and Julia arch names // Translations between actions input and Julia arch names
const osMap = { const osMap = {
'win32': 'winnt', 'win32': 'winnt',
@@ -82,6 +85,14 @@ export function getJuliaVersion(availableReleases: string[], versionInput: strin
return versionInput return versionInput
} }
if (versionInput == 'lts') {
return getJuliaVersion(availableReleases, LTS_VERSION, false)
}
if (versionInput == 'pre') {
return getJuliaVersion(availableReleases, MAJOR_VERSION, true)
}
// Use the highest available version that matches versionInput // Use the highest available version that matches versionInput
let version = semver.maxSatisfying(availableReleases, versionInput, {includePrerelease}) let version = semver.maxSatisfying(availableReleases, versionInput, {includePrerelease})
if (version == null) { if (version == null) {

View File

@@ -1,5 +1,4 @@
import * as core from '@actions/core' import * as core from '@actions/core'
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 fs from 'fs'