mirror of
https://github.com/julia-actions/setup-julia.git
synced 2026-02-14 03:56:53 +08:00
Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ce353a9bc8 | ||
|
|
67db496725 | ||
|
|
800ff44572 | ||
|
|
6966335537 | ||
|
|
f29cb961e8 | ||
|
|
b69122e25a | ||
|
|
1777cc3f15 | ||
|
|
2bb1080a55 | ||
|
|
2d69597029 | ||
|
|
f577b7c336 | ||
|
|
a12d4d2f6d | ||
|
|
3dcf5f495f | ||
|
|
f473b6b037 | ||
|
|
afa5e14af0 | ||
|
|
01d5d7138b | ||
|
|
6fd5c3fbaf | ||
|
|
d57803fb22 | ||
|
|
e11d58a9c2 | ||
|
|
6c3c1efae0 | ||
|
|
531b2e0973 | ||
|
|
66addd1b2f | ||
|
|
3ff0592a25 | ||
|
|
995385cfd3 | ||
|
|
749cb24407 | ||
|
|
2feb9a10bf | ||
|
|
47fa78221c | ||
|
|
cc05ac4a7c | ||
|
|
6d01ffa228 | ||
|
|
94342fa38e | ||
|
|
5fea736568 | ||
|
|
0453d68fd7 | ||
|
|
2bf5fd112f |
1
.github/CODEOWNERS
vendored
Normal file
1
.github/CODEOWNERS
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
* @julia-actions/reviewers
|
||||||
7
.github/dependabot.yml
vendored
Normal file
7
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: gitsubmodule
|
||||||
|
directory: "/"
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
open-pull-requests-limit: 10
|
||||||
33
.github/workflows/backup.yml
vendored
Normal file
33
.github/workflows/backup.yml
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
name: Backup
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '5 4 * * 0'
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
backup:
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Configure cache
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
${{ env.GITHUB_WORKSPACE }}
|
||||||
|
~/.cache/restic
|
||||||
|
key: ${{ runner.os }}
|
||||||
|
|
||||||
|
- name: Install the correct Python version
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
|
||||||
|
- name: Run backup action
|
||||||
|
uses: julia-actions/restic-action@main
|
||||||
|
env: # Options: https://restic.readthedocs.io/en/latest/040_backup.html#environment-variables
|
||||||
|
RESTIC_REPOSITORY: b2:${{ secrets.B2_BUCKET }}:${{ github.repository }}
|
||||||
|
RESTIC_PASSWORD: ${{ secrets.RESTIC_PASSWORD }}
|
||||||
|
B2_ACCOUNT_ID: ${{ secrets.B2_ACCOUNT_ID }}
|
||||||
|
B2_ACCOUNT_KEY: ${{ secrets.B2_ACCOUNT_KEY }}
|
||||||
67
.github/workflows/codeql-analysis.yml
vendored
Normal file
67
.github/workflows/codeql-analysis.yml
vendored
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
#
|
||||||
|
# ******** NOTE ********
|
||||||
|
# We have attempted to detect the languages in your repository. Please check
|
||||||
|
# the `language` matrix defined below to confirm you have the correct set of
|
||||||
|
# supported CodeQL languages.
|
||||||
|
#
|
||||||
|
name: "CodeQL"
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ master, releases/* ]
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [ master ]
|
||||||
|
schedule:
|
||||||
|
- cron: '32 22 * * 6'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: [ 'javascript' ]
|
||||||
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||||
|
# Learn more:
|
||||||
|
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v1
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||||
|
|
||||||
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v1
|
||||||
|
|
||||||
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
|
# 📚 https://git.io/JvXDl
|
||||||
|
|
||||||
|
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||||
|
# and modify them (or add more) to build your code if your project
|
||||||
|
# uses a compiled language
|
||||||
|
|
||||||
|
#- run: |
|
||||||
|
# make bootstrap
|
||||||
|
# make release
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v1
|
||||||
8
.github/workflows/example-builds-nightly.yml
vendored
8
.github/workflows/example-builds-nightly.yml
vendored
@@ -2,6 +2,7 @@ name: Example builds (nightly)
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
|
branches: ['main', 'master', 'releases/*']
|
||||||
pull_request:
|
pull_request:
|
||||||
schedule:
|
schedule:
|
||||||
- cron: '37 17 * * *'
|
- cron: '37 17 * * *'
|
||||||
@@ -12,6 +13,7 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
|
julia-version: [nightly, 1.8-nightly]
|
||||||
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
|
||||||
@@ -28,10 +30,10 @@ jobs:
|
|||||||
npm run build
|
npm run build
|
||||||
npm run pack
|
npm run pack
|
||||||
|
|
||||||
- name: "Set up Julia (nightly)"
|
- name: "Set up Julia (${{ matrix.julia-version }})"
|
||||||
uses: ./
|
uses: ./
|
||||||
with:
|
with:
|
||||||
version: nightly
|
version: ${{ matrix.julia-version }}
|
||||||
arch: ${{ matrix.julia-arch }}
|
arch: ${{ matrix.julia-arch }}
|
||||||
show-versioninfo: 'true'
|
|
||||||
- run: julia --version
|
- run: julia --version
|
||||||
|
- run: julia --compile=min -O0 -e 'import InteractiveUtils; InteractiveUtils.versioninfo()'
|
||||||
|
|||||||
8
.github/workflows/example-builds.yml
vendored
8
.github/workflows/example-builds.yml
vendored
@@ -1,6 +1,10 @@
|
|||||||
name: Example builds
|
name: Example builds
|
||||||
|
|
||||||
on: [push, pull_request]
|
on:
|
||||||
|
push:
|
||||||
|
branches: ['main', 'master', 'releases/*']
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
@@ -31,5 +35,5 @@ jobs:
|
|||||||
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
|
||||||
|
- run: julia --compile=min -O0 -e 'import InteractiveUtils; InteractiveUtils.versioninfo()'
|
||||||
|
|||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,3 +1,3 @@
|
|||||||
node_modules/
|
node_modules/
|
||||||
__tests__/runner/*
|
__tests__/runner/*
|
||||||
dist/
|
!dist/
|
||||||
|
|||||||
84
README.md
84
README.md
@@ -1,5 +1,6 @@
|
|||||||
# setup-julia Action
|
# setup-julia Action
|
||||||
|
|
||||||
|
[](https://securitylab.github.com/tools/codeql)
|
||||||
[](https://dependabot.com)
|
[](https://dependabot.com)
|
||||||
|
|
||||||
This action sets up a Julia environment for use in actions by downloading a specified version of Julia and adding it to PATH.
|
This action sets up a Julia environment for use in actions by downloading a specified version of Julia and adding it to PATH.
|
||||||
@@ -7,18 +8,78 @@ This action sets up a Julia environment for use in actions by downloading a spec
|
|||||||
## Table of Contents
|
## Table of Contents
|
||||||
- [Table of Contents](#table-of-contents)
|
- [Table of Contents](#table-of-contents)
|
||||||
- [Usage](#usage)
|
- [Usage](#usage)
|
||||||
|
- [Inputs](#inputs)
|
||||||
|
- [Outputs](#outputs)
|
||||||
- [Basic](#basic)
|
- [Basic](#basic)
|
||||||
- [Julia Versions](#julia-versions)
|
- [Julia Versions](#julia-versions)
|
||||||
- [Matrix Testing](#matrix-testing)
|
- [Matrix Testing](#matrix-testing)
|
||||||
|
- [versioninfo](#versioninfo)
|
||||||
- [Versioning](#versioning)
|
- [Versioning](#versioning)
|
||||||
- [Debug logs](#debug-logs)
|
- [Debug logs](#debug-logs)
|
||||||
- [Third party information](#third-party-information)
|
- [Third party information](#third-party-information)
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
See [action.yml](action.yml).
|
### Inputs
|
||||||
|
|
||||||
You can find a list of example workflows making use of this action here: [julia-actions/example-workflows](https://github.com/julia-actions/example-workflows).
|
```yaml
|
||||||
|
- uses: julia-actions/setup-julia@v1
|
||||||
|
with:
|
||||||
|
# The Julia version that will be installed and added as `julia` to the PATH.
|
||||||
|
# See "Julia Versions" below for a list of valid values.
|
||||||
|
#
|
||||||
|
# Warning: It is strongly recommended to wrap this value in quotes.
|
||||||
|
# Otherwise, the YAML parser used by GitHub Actions parses certain
|
||||||
|
# versions as numbers which causes the wrong version to be selected.
|
||||||
|
# For example, `1.0` may be parsed as `1`.
|
||||||
|
#
|
||||||
|
# Default: '1'
|
||||||
|
version: ''
|
||||||
|
|
||||||
|
# The architecture of the Julia binaries.
|
||||||
|
#
|
||||||
|
# Please note that installing aarch64 binaries only makes sense on self-hosted aarch64 runners.
|
||||||
|
# We currently don't run test builds on that architecture, so we cannot guarantee that the input won't break randomly,
|
||||||
|
# although there is no reason why it would.
|
||||||
|
#
|
||||||
|
# Supported values: x64 | x86 | aarch64 (untested)
|
||||||
|
#
|
||||||
|
# Default: x64
|
||||||
|
arch: ''
|
||||||
|
|
||||||
|
# Set the display setting for printing InteractiveUtils.versioninfo() after installing.
|
||||||
|
#
|
||||||
|
# Starting Julia and running InteractiveUtils.versioninfo() takes a significant amount of time (1s or ~10% of the total build time in testing),
|
||||||
|
# so you may not want to run it in every build, in particular on paid runners, as this cost will add up quickly.
|
||||||
|
#
|
||||||
|
# See "versioninfo" below for example usage and further explanations.
|
||||||
|
#
|
||||||
|
# Supported values: true | false | never
|
||||||
|
#
|
||||||
|
# true: Always print versioninfo
|
||||||
|
# false: Only print versioninfo for nightly Julia
|
||||||
|
# never: Never print versioninfo
|
||||||
|
#
|
||||||
|
# Default: false
|
||||||
|
show-versioninfo: ''
|
||||||
|
```
|
||||||
|
|
||||||
|
### Outputs
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
outputs:
|
||||||
|
# The installed Julia version.
|
||||||
|
# May vary from the version input if a version range was given as input.
|
||||||
|
#
|
||||||
|
# Example output: '1.5.3'
|
||||||
|
|
||||||
|
julia-version: ''
|
||||||
|
# Path to the directory containing the Julia executable.
|
||||||
|
# Equivalent to JULIA_BINDIR: https://docs.julialang.org/en/v1/manual/environment-variables/#JULIA_BINDIR
|
||||||
|
#
|
||||||
|
# Example output: '/opt/hostedtoolcache/julia/1.5.3/x64/bin'
|
||||||
|
julia-bindir: ''
|
||||||
|
```
|
||||||
|
|
||||||
### Basic
|
### Basic
|
||||||
|
|
||||||
@@ -35,7 +96,7 @@ steps:
|
|||||||
|
|
||||||
You can either specify specific Julia versions or version ranges. If you specify a version range, the **highest** available Julia version that matches the range will be selected.
|
You can either specify specific Julia versions or version ranges. If you specify a version range, the **highest** available Julia version that matches the range will be selected.
|
||||||
|
|
||||||
**Warning:** It is strongly recommended to wrap versions in quotes. Otherwise, the YAML parser used by GitHub Actions parses certain versions as numbers which causes the wrong version to be selected. For example, `1.0` is parsed as `1`.
|
**Warning:** It is strongly recommended to wrap versions in quotes. Otherwise, the YAML parser used by GitHub Actions parses certain versions as numbers which causes the wrong version to be selected. For example, `1.0` may be parsed as `1`.
|
||||||
|
|
||||||
#### Examples
|
#### Examples
|
||||||
|
|
||||||
@@ -46,6 +107,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 **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`.
|
- `~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.
|
- `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.
|
||||||
|
|
||||||
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).
|
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).
|
||||||
|
|
||||||
@@ -129,6 +191,16 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### versioninfo
|
||||||
|
|
||||||
|
By default, only the output of `julia --version` is printed as verification that Julia has been installed for stable versions of Julia.
|
||||||
|
`InteractiveUtils.versioninfo()` is run by default for nightly builds.
|
||||||
|
|
||||||
|
Starting Julia and printing the full versioninfo takes a significant amount of time (1s or ~10% of the total build time in testing), so you may not want to run it in every build, in particular on paid runners as this cost will add up quickly.
|
||||||
|
However, `julia --version` does not provide sufficient information to know which commit a nightly binary was built from, therefore it is useful to show the full versioninfo on nightly builds regardless.
|
||||||
|
|
||||||
|
You can override this behaviour by changing the input to `never` if you never want to run `InteractiveUtils.versioninfo()` or to `true` if you always want to run `InteractiveUtils.versioninfo()`, even on stable Julia builds.
|
||||||
|
|
||||||
## Versioning
|
## Versioning
|
||||||
|
|
||||||
This action follows [GitHub's advice](https://help.github.com/en/articles/about-actions#versioning-your-action) on versioning actions, with an additional `latest` tag.
|
This action follows [GitHub's advice](https://help.github.com/en/articles/about-actions#versioning-your-action) on versioning actions, with an additional `latest` tag.
|
||||||
@@ -141,11 +213,11 @@ You can specify commits, branches or tags in your workflows as follows:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- uses: julia-actions/setup-julia@d26d1111976eae5f00db04f0515ab744ec9cd79e # commit SHA of the tagged 1.3.1 commit
|
- uses: julia-actions/setup-julia@d3ce119a16594ea9e5d7974813970c73b6ab9e94 # commit SHA of the tagged 1.4.1 commit
|
||||||
- uses: julia-actions/setup-julia@master # branch
|
|
||||||
- uses: julia-actions/setup-julia@latest # latest version tag (may break existing workflows)
|
- uses: julia-actions/setup-julia@latest # latest version tag (may break existing workflows)
|
||||||
- uses: julia-actions/setup-julia@v1 # major version tag
|
- uses: julia-actions/setup-julia@v1 # major version tag
|
||||||
- uses: julia-actions/setup-julia@v0.1.0 # specific version tag
|
- uses: julia-actions/setup-julia@v1.4 # minor version tag
|
||||||
|
- uses: julia-actions/setup-julia@v1.4.1 # specific version tag
|
||||||
```
|
```
|
||||||
|
|
||||||
If your workflow requires access to secrets, you should always pin it to a commit SHA instead of a tag.
|
If your workflow requires access to secrets, you should always pin it to a commit SHA instead of a tag.
|
||||||
|
|||||||
@@ -14,10 +14,12 @@ inputs:
|
|||||||
required: false
|
required: false
|
||||||
default: 'false'
|
default: 'false'
|
||||||
outputs:
|
outputs:
|
||||||
|
julia-version:
|
||||||
|
description: 'The installed Julia version. May vary from the version input if a version range was given as input.'
|
||||||
julia-bindir:
|
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'
|
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: 'node16'
|
||||||
main: 'dist/index.js'
|
main: 'dist/index.js'
|
||||||
branding:
|
branding:
|
||||||
icon: 'download'
|
icon: 'download'
|
||||||
|
|||||||
2
bin
2
bin
Submodule bin updated: 9ceca17c9c...31b4b500a3
5204
dist/index.js
vendored
Normal file
5204
dist/index.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
dist/unzip
vendored
Normal file
BIN
dist/unzip
vendored
Normal file
Binary file not shown.
94
lib/installer.js
generated
94
lib/installer.js
generated
@@ -22,6 +22,7 @@ const crypto = __importStar(require("crypto"));
|
|||||||
const fs = __importStar(require("fs"));
|
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 retry = require("async-retry");
|
||||||
const semver = __importStar(require("semver"));
|
const semver = __importStar(require("semver"));
|
||||||
// Translations between actions input and Julia arch names
|
// Translations between actions input and Julia arch names
|
||||||
const osMap = {
|
const osMap = {
|
||||||
@@ -31,7 +32,8 @@ const osMap = {
|
|||||||
};
|
};
|
||||||
const archMap = {
|
const archMap = {
|
||||||
'x86': 'i686',
|
'x86': 'i686',
|
||||||
'x64': 'x86_64'
|
'x64': 'x86_64',
|
||||||
|
'aarch64': 'aarch64'
|
||||||
};
|
};
|
||||||
// Store information about the environment
|
// Store information about the environment
|
||||||
const osPlat = os.platform(); // possible values: win32 (Windows), linux (Linux), darwin (macOS)
|
const osPlat = os.platform(); // possible values: win32 (Windows), linux (Linux), darwin (macOS)
|
||||||
@@ -59,7 +61,15 @@ function calculateChecksum(file) {
|
|||||||
*/
|
*/
|
||||||
function getJuliaVersionInfo() {
|
function getJuliaVersionInfo() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
const versionsFile = yield tc.downloadTool('https://julialang-s3.julialang.org/bin/versions.json');
|
// Occasionally the connection is reset for unknown reasons
|
||||||
|
// In those cases, retry the download
|
||||||
|
const versionsFile = yield retry((bail) => __awaiter(this, void 0, void 0, function* () {
|
||||||
|
return yield tc.downloadTool('https://julialang-s3.julialang.org/bin/versions.json');
|
||||||
|
}), {
|
||||||
|
onRetry: (err) => {
|
||||||
|
core.debug(`Download of versions.json failed, trying again. Error: ${err}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
return JSON.parse(fs.readFileSync(versionsFile).toString());
|
return JSON.parse(fs.readFileSync(versionsFile).toString());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -78,14 +88,10 @@ function getJuliaVersions(versionInfo) {
|
|||||||
}
|
}
|
||||||
exports.getJuliaVersions = getJuliaVersions;
|
exports.getJuliaVersions = getJuliaVersions;
|
||||||
function getJuliaVersion(availableReleases, versionInput) {
|
function getJuliaVersion(availableReleases, versionInput) {
|
||||||
if (semver.valid(versionInput) == versionInput) {
|
if (semver.valid(versionInput) == versionInput || versionInput.endsWith('nightly')) {
|
||||||
// versionInput is a valid version, use it directly
|
// versionInput is a valid version or a nightly 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) {
|
||||||
@@ -119,22 +125,35 @@ function getNightlyFileName(arch) {
|
|||||||
return `julia-latest${versionExt}.${ext}`;
|
return `julia-latest${versionExt}.${ext}`;
|
||||||
}
|
}
|
||||||
function getFileInfo(versionInfo, version, arch) {
|
function getFileInfo(versionInfo, version, arch) {
|
||||||
if (version == 'nightly') {
|
const err = `Could not find ${archMap[arch]}/${version} binaries`;
|
||||||
|
if (version.endsWith('nightly')) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
if (!versionInfo[version]) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
for (let file of versionInfo[version].files) {
|
for (let file of versionInfo[version].files) {
|
||||||
if (file.os == osMap[osPlat] && file.arch == archMap[arch]) {
|
if (file.os == osMap[osPlat] && file.arch == archMap[arch]) {
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw `Could not find ${archMap[arch]}/${version} binaries`;
|
throw err;
|
||||||
}
|
}
|
||||||
exports.getFileInfo = getFileInfo;
|
exports.getFileInfo = getFileInfo;
|
||||||
function getDownloadURL(fileInfo, version, arch) {
|
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
|
// nightlies
|
||||||
if (version == 'nightly') {
|
if (version == 'nightly') {
|
||||||
const baseURL = 'https://julialangnightlies-s3.julialang.org/bin';
|
return `${baseURL}/${getNightlyFileName(arch)}`;
|
||||||
return `${baseURL}/${osMap[osPlat]}/${arch}/${getNightlyFileName(arch)}`;
|
}
|
||||||
|
// Verify that fileInfo.url points at the official Julia download servers
|
||||||
|
if (!fileInfo.url.startsWith('https://julialang-s3.julialang.org/')) {
|
||||||
|
throw new Error(`versions.json points at a download location outside of Julia's download server: ${fileInfo.url}. Aborting for security reasons.`);
|
||||||
}
|
}
|
||||||
return fileInfo.url;
|
return fileInfo.url;
|
||||||
}
|
}
|
||||||
@@ -145,9 +164,17 @@ function installJulia(versionInfo, version, arch) {
|
|||||||
const fileInfo = getFileInfo(versionInfo, version, arch);
|
const fileInfo = getFileInfo(versionInfo, version, arch);
|
||||||
const downloadURL = getDownloadURL(fileInfo, version, arch);
|
const downloadURL = getDownloadURL(fileInfo, version, arch);
|
||||||
core.debug(`downloading Julia from ${downloadURL}`);
|
core.debug(`downloading Julia from ${downloadURL}`);
|
||||||
const juliaDownloadPath = yield tc.downloadTool(downloadURL);
|
// Occasionally the connection is reset for unknown reasons
|
||||||
|
// In those cases, retry the download
|
||||||
|
const juliaDownloadPath = yield retry((bail) => __awaiter(this, void 0, void 0, function* () {
|
||||||
|
return yield tc.downloadTool(downloadURL);
|
||||||
|
}), {
|
||||||
|
onRetry: (err) => {
|
||||||
|
core.debug(`Download of ${downloadURL} failed, trying again. Error: ${err}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
// Verify checksum
|
// Verify checksum
|
||||||
if (version != 'nightly') {
|
if (!version.endsWith('nightly')) {
|
||||||
const checkSum = yield calculateChecksum(juliaDownloadPath);
|
const checkSum = yield calculateChecksum(juliaDownloadPath);
|
||||||
if (fileInfo.sha256 != checkSum) {
|
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}`);
|
throw new Error(`Checksum of downloaded file does not match the expected checksum from versions.json.\nExpected: ${fileInfo.sha256}\nGot: ${checkSum}`);
|
||||||
@@ -165,7 +192,7 @@ function installJulia(versionInfo, version, arch) {
|
|||||||
yield exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir]);
|
yield exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir]);
|
||||||
return tempInstallDir;
|
return tempInstallDir;
|
||||||
case 'win32':
|
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
|
// 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`]);
|
yield exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/SILENT /dir=${path.join(process.cwd(), tempInstallDir)}" -NoNewWindow -Wait`]);
|
||||||
}
|
}
|
||||||
@@ -183,3 +210,40 @@ function installJulia(versionInfo, version, arch) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
exports.installJulia = installJulia;
|
exports.installJulia = installJulia;
|
||||||
|
/**
|
||||||
|
* Test if Julia has been installed and print the version.
|
||||||
|
*
|
||||||
|
* true => always show versioninfo
|
||||||
|
* false => only show on nightlies
|
||||||
|
* never => never show it anywhere
|
||||||
|
*
|
||||||
|
* @param showVersionInfoInput
|
||||||
|
*/
|
||||||
|
function showVersionInfo(showVersionInfoInput, version) {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
// --compile=min -O0 reduces the time from ~1.8-1.9s to ~0.8-0.9s
|
||||||
|
let exitCode;
|
||||||
|
switch (showVersionInfoInput) {
|
||||||
|
case 'true':
|
||||||
|
exitCode = yield exec.exec('julia', ['--compile=min', '-O0', '-e', 'using InteractiveUtils; versioninfo()']);
|
||||||
|
break;
|
||||||
|
case 'false':
|
||||||
|
if (version.endsWith('nightly')) {
|
||||||
|
exitCode = yield exec.exec('julia', ['--compile=min', '-O0', '-e', 'using InteractiveUtils; versioninfo()']);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
exitCode = yield exec.exec('julia', ['--version']);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'never':
|
||||||
|
exitCode = yield exec.exec('julia', ['--version']);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new Error(`${showVersionInfoInput} is not a valid value for show-versioninfo. Supported values: true | false | never`);
|
||||||
|
}
|
||||||
|
if (exitCode !== 0) {
|
||||||
|
throw new Error(`Julia could not be installed properly. Exit code: ${exitCode}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
exports.showVersionInfo = showVersionInfo;
|
||||||
|
|||||||
11
lib/setup-julia.js
generated
11
lib/setup-julia.js
generated
@@ -16,7 +16,6 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
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 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"));
|
||||||
@@ -58,6 +57,7 @@ function run() {
|
|||||||
const availableReleases = yield installer.getJuliaVersions(versionInfo);
|
const availableReleases = yield installer.getJuliaVersions(versionInfo);
|
||||||
const version = installer.getJuliaVersion(availableReleases, versionInput);
|
const version = installer.getJuliaVersion(availableReleases, versionInput);
|
||||||
core.debug(`selected Julia version: ${arch}/${version}`);
|
core.debug(`selected Julia version: ${arch}/${version}`);
|
||||||
|
core.setOutput('julia-version', version);
|
||||||
// Search in cache
|
// Search in cache
|
||||||
let juliaPath;
|
let juliaPath;
|
||||||
juliaPath = tc.find('julia', version, arch);
|
juliaPath = tc.find('julia', version, arch);
|
||||||
@@ -77,12 +77,9 @@ function run() {
|
|||||||
core.addPath(path.join(juliaPath, 'bin'));
|
core.addPath(path.join(juliaPath, 'bin'));
|
||||||
// Set output
|
// Set output
|
||||||
core.setOutput('julia-bindir', path.join(juliaPath, 'bin'));
|
core.setOutput('julia-bindir', path.join(juliaPath, 'bin'));
|
||||||
// Test if Julia has been installed
|
// Test if Julia has been installed and print the version
|
||||||
exec.exec('julia', ['--version']);
|
const showVersionInfoInput = core.getInput('show-versioninfo');
|
||||||
// If enabled, also show the full version info
|
yield installer.showVersionInfo(showVersionInfoInput, version);
|
||||||
if (core.getInput('show-versioninfo') == 'true') {
|
|
||||||
exec.exec('julia', ['-e', 'using InteractiveUtils; versioninfo()']);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
core.setFailed(error.message);
|
core.setFailed(error.message);
|
||||||
|
|||||||
8572
package-lock.json
generated
8572
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "setup-julia",
|
"name": "setup-julia",
|
||||||
"version": "1.4.1",
|
"version": "1.7.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "setup Julia action",
|
"description": "setup Julia action",
|
||||||
"main": "lib/setup-julia.js",
|
"main": "lib/setup-julia.js",
|
||||||
@@ -25,9 +25,11 @@
|
|||||||
"@actions/exec": "^1.0.0",
|
"@actions/exec": "^1.0.0",
|
||||||
"@actions/io": "^1.0.0",
|
"@actions/io": "^1.0.0",
|
||||||
"@actions/tool-cache": "^1.0.0",
|
"@actions/tool-cache": "^1.0.0",
|
||||||
|
"async-retry": "^1.3.1",
|
||||||
"semver": "^6.3.0"
|
"semver": "^6.3.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/async-retry": "^1.4.2",
|
||||||
"@types/jest": "^24.0.13",
|
"@types/jest": "^24.0.13",
|
||||||
"@types/node": "^12.12.7",
|
"@types/node": "^12.12.7",
|
||||||
"@types/semver": "^6.0.0",
|
"@types/semver": "^6.0.0",
|
||||||
|
|||||||
107
src/installer.ts
107
src/installer.ts
@@ -6,6 +6,7 @@ import * as crypto from 'crypto'
|
|||||||
import * as fs from 'fs'
|
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'
|
||||||
|
import retry = require('async-retry')
|
||||||
|
|
||||||
import * as semver from 'semver'
|
import * as semver from 'semver'
|
||||||
|
|
||||||
@@ -17,7 +18,8 @@ const osMap = {
|
|||||||
}
|
}
|
||||||
const archMap = {
|
const archMap = {
|
||||||
'x86': 'i686',
|
'x86': 'i686',
|
||||||
'x64': 'x86_64'
|
'x64': 'x86_64',
|
||||||
|
'aarch64': 'aarch64'
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store information about the environment
|
// Store information about the environment
|
||||||
@@ -47,7 +49,15 @@ async function calculateChecksum(file: string): Promise<string> {
|
|||||||
* @returns The content of the downloaded versions.json file as object.
|
* @returns The content of the downloaded versions.json file as object.
|
||||||
*/
|
*/
|
||||||
export async function getJuliaVersionInfo(): Promise<object> {
|
export async function getJuliaVersionInfo(): Promise<object> {
|
||||||
const versionsFile = await tc.downloadTool('https://julialang-s3.julialang.org/bin/versions.json')
|
// Occasionally the connection is reset for unknown reasons
|
||||||
|
// In those cases, retry the download
|
||||||
|
const versionsFile = await retry(async (bail: Function) => {
|
||||||
|
return await tc.downloadTool('https://julialang-s3.julialang.org/bin/versions.json')
|
||||||
|
}, {
|
||||||
|
onRetry: (err: Error) => {
|
||||||
|
core.debug(`Download of versions.json failed, trying again. Error: ${err}`)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
return JSON.parse(fs.readFileSync(versionsFile).toString())
|
return JSON.parse(fs.readFileSync(versionsFile).toString())
|
||||||
}
|
}
|
||||||
@@ -66,16 +76,11 @@ export async function getJuliaVersions(versionInfo): Promise<string[]> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getJuliaVersion(availableReleases: string[], versionInput: string): string {
|
export function getJuliaVersion(availableReleases: string[], versionInput: string): string {
|
||||||
if (semver.valid(versionInput) == versionInput) {
|
if (semver.valid(versionInput) == versionInput || versionInput.endsWith('nightly')) {
|
||||||
// versionInput is a valid version, use it directly
|
// versionInput is a valid version or a nightly 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) {
|
||||||
@@ -111,26 +116,43 @@ function getNightlyFileName(arch: string): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getFileInfo(versionInfo, version: string, arch: string) {
|
export function getFileInfo(versionInfo, version: string, arch: string) {
|
||||||
if (version == 'nightly') {
|
const err = `Could not find ${archMap[arch]}/${version} binaries`
|
||||||
|
|
||||||
|
if (version.endsWith('nightly')) {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!versionInfo[version]) {
|
||||||
|
throw err
|
||||||
|
}
|
||||||
|
|
||||||
for (let file of versionInfo[version].files) {
|
for (let file of versionInfo[version].files) {
|
||||||
if (file.os == osMap[osPlat] && file.arch == archMap[arch]) {
|
if (file.os == osMap[osPlat] && file.arch == archMap[arch]) {
|
||||||
return file
|
return file
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
throw `Could not find ${archMap[arch]}/${version} binaries`
|
throw err
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getDownloadURL(fileInfo, version: string, arch: string): string {
|
export function getDownloadURL(fileInfo, version: string, arch: string): string {
|
||||||
// nightlies
|
const baseURL = `https://julialangnightlies-s3.julialang.org/bin/${osMap[osPlat]}/${arch}`
|
||||||
if (version == 'nightly') {
|
|
||||||
const baseURL = 'https://julialangnightlies-s3.julialang.org/bin'
|
// release branch nightlies, e.g. 1.6-nightlies should return .../bin/linux/x64/1.6/julia-latest-linux64.tar.gz
|
||||||
return `${baseURL}/${osMap[osPlat]}/${arch}/${getNightlyFileName(arch)}`
|
const majorMinorMatches = /^(\d*.\d*)-nightly/.exec(version)
|
||||||
|
if (majorMinorMatches) {
|
||||||
|
return `${baseURL}/${majorMinorMatches[1]}/${getNightlyFileName(arch)}`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// nightlies
|
||||||
|
if (version == 'nightly') {
|
||||||
|
return `${baseURL}/${getNightlyFileName(arch)}`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify that fileInfo.url points at the official Julia download servers
|
||||||
|
if (!fileInfo.url.startsWith('https://julialang-s3.julialang.org/')) {
|
||||||
|
throw new Error(`versions.json points at a download location outside of Julia's download server: ${fileInfo.url}. Aborting for security reasons.`)
|
||||||
|
}
|
||||||
return fileInfo.url
|
return fileInfo.url
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,10 +161,20 @@ export async function installJulia(versionInfo, version: string, arch: string):
|
|||||||
const fileInfo = getFileInfo(versionInfo, version, arch)
|
const fileInfo = getFileInfo(versionInfo, version, arch)
|
||||||
const downloadURL = getDownloadURL(fileInfo, version, arch)
|
const downloadURL = getDownloadURL(fileInfo, version, arch)
|
||||||
core.debug(`downloading Julia from ${downloadURL}`)
|
core.debug(`downloading Julia from ${downloadURL}`)
|
||||||
const juliaDownloadPath = await tc.downloadTool(downloadURL)
|
|
||||||
|
// Occasionally the connection is reset for unknown reasons
|
||||||
|
// In those cases, retry the download
|
||||||
|
const juliaDownloadPath = await retry(async (bail: Function) => {
|
||||||
|
return await tc.downloadTool(downloadURL)
|
||||||
|
}, {
|
||||||
|
onRetry: (err: Error) => {
|
||||||
|
core.debug(`Download of ${downloadURL} failed, trying again. Error: ${err}`)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
// Verify checksum
|
// Verify checksum
|
||||||
if (version != 'nightly') {
|
if (!version.endsWith('nightly')) {
|
||||||
const checkSum = await calculateChecksum(juliaDownloadPath)
|
const checkSum = await calculateChecksum(juliaDownloadPath)
|
||||||
if (fileInfo.sha256 != checkSum) {
|
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}`)
|
throw new Error(`Checksum of downloaded file does not match the expected checksum from versions.json.\nExpected: ${fileInfo.sha256}\nGot: ${checkSum}`)
|
||||||
@@ -161,7 +193,7 @@ export async function installJulia(versionInfo, version: string, arch: string):
|
|||||||
await exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir])
|
await exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir])
|
||||||
return tempInstallDir
|
return tempInstallDir
|
||||||
case 'win32':
|
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
|
// 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`])
|
await exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/SILENT /dir=${path.join(process.cwd(), tempInstallDir)}" -NoNewWindow -Wait`])
|
||||||
} else {
|
} else {
|
||||||
@@ -176,3 +208,42 @@ export async function installJulia(versionInfo, version: string, arch: string):
|
|||||||
throw new Error(`Platform ${osPlat} is not supported`)
|
throw new Error(`Platform ${osPlat} is not supported`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test if Julia has been installed and print the version.
|
||||||
|
*
|
||||||
|
* true => always show versioninfo
|
||||||
|
* false => only show on nightlies
|
||||||
|
* never => never show it anywhere
|
||||||
|
*
|
||||||
|
* @param showVersionInfoInput
|
||||||
|
*/
|
||||||
|
export async function showVersionInfo(showVersionInfoInput: string, version: string): Promise<void> {
|
||||||
|
// --compile=min -O0 reduces the time from ~1.8-1.9s to ~0.8-0.9s
|
||||||
|
let exitCode: number
|
||||||
|
|
||||||
|
switch (showVersionInfoInput) {
|
||||||
|
case 'true':
|
||||||
|
exitCode = await exec.exec('julia', ['--compile=min', '-O0', '-e', 'using InteractiveUtils; versioninfo()'])
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'false':
|
||||||
|
if (version.endsWith('nightly')) {
|
||||||
|
exitCode = await exec.exec('julia', ['--compile=min', '-O0', '-e', 'using InteractiveUtils; versioninfo()'])
|
||||||
|
} else {
|
||||||
|
exitCode = await exec.exec('julia', ['--version'])
|
||||||
|
}
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'never':
|
||||||
|
exitCode = await exec.exec('julia', ['--version'])
|
||||||
|
break
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new Error(`${showVersionInfoInput} is not a valid value for show-versioninfo. Supported values: true | false | never`)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exitCode !== 0) {
|
||||||
|
throw new Error(`Julia could not be installed properly. Exit code: ${exitCode}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ async function run() {
|
|||||||
const availableReleases = await installer.getJuliaVersions(versionInfo)
|
const availableReleases = await installer.getJuliaVersions(versionInfo)
|
||||||
const version = installer.getJuliaVersion(availableReleases, versionInput)
|
const version = installer.getJuliaVersion(availableReleases, versionInput)
|
||||||
core.debug(`selected Julia version: ${arch}/${version}`)
|
core.debug(`selected Julia version: ${arch}/${version}`)
|
||||||
|
core.setOutput('julia-version', version)
|
||||||
|
|
||||||
// Search in cache
|
// Search in cache
|
||||||
let juliaPath: string;
|
let juliaPath: string;
|
||||||
@@ -72,14 +73,10 @@ async function run() {
|
|||||||
|
|
||||||
// Set output
|
// Set output
|
||||||
core.setOutput('julia-bindir', path.join(juliaPath, 'bin'))
|
core.setOutput('julia-bindir', path.join(juliaPath, 'bin'))
|
||||||
|
|
||||||
// Test if Julia has been installed
|
|
||||||
exec.exec('julia', ['--version'])
|
|
||||||
|
|
||||||
// If enabled, also show the full version info
|
// Test if Julia has been installed and print the version
|
||||||
if (core.getInput('show-versioninfo') == 'true') {
|
const showVersionInfoInput = core.getInput('show-versioninfo')
|
||||||
exec.exec('julia', ['-e', 'using InteractiveUtils; versioninfo()'])
|
await installer.showVersionInfo(showVersionInfoInput, version)
|
||||||
}
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
core.setFailed(error.message)
|
core.setFailed(error.message)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user