mirror of
https://github.com/julia-actions/setup-julia.git
synced 2026-02-12 11:06:53 +08:00
Compare commits
25 Commits
v1.9.3
...
ib/win_tar
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e95c1cabb6 | ||
|
|
c519e815c6 | ||
|
|
8f9027b72b | ||
|
|
ffd1649f9b | ||
|
|
f3d4142aa8 | ||
|
|
d3d61d99d5 | ||
|
|
a46a85f797 | ||
|
|
15b8728ec6 | ||
|
|
82b8fbfebd | ||
|
|
0affa9ffb0 | ||
|
|
e27a7638ca | ||
|
|
67c6198a06 | ||
|
|
2c0c1c0f24 | ||
|
|
2e04bcf2ea | ||
|
|
de4ef5e2fd | ||
|
|
c7ecd325d5 | ||
|
|
3961cd13d2 | ||
|
|
e16483e859 | ||
|
|
472a0c3588 | ||
|
|
0644643060 | ||
|
|
c629ec2fb8 | ||
|
|
69754702fb | ||
|
|
e0c860ed1a | ||
|
|
b0ddaa0f3f | ||
|
|
7e992845db |
4
.github/dependabot.yml
vendored
4
.github/dependabot.yml
vendored
@@ -3,13 +3,13 @@ updates:
|
||||
- package-ecosystem: gitsubmodule
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: daily
|
||||
interval: monthly
|
||||
open-pull-requests-limit: 10
|
||||
|
||||
- package-ecosystem: 'github-actions'
|
||||
directory: '/'
|
||||
schedule:
|
||||
interval: 'daily'
|
||||
interval: 'monthly'
|
||||
|
||||
- package-ecosystem: npm
|
||||
directory: "/"
|
||||
|
||||
11
.github/scripts/common-tests.jl
vendored
Normal file
11
.github/scripts/common-tests.jl
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
if !occursin("hostedtoolcache", Sys.BINDIR)
|
||||
error("the wrong julia is being used: $(Sys.BINDIR)")
|
||||
end
|
||||
if VERSION >= v"1.7.0" # pkgdir was introduced here, and before then mtime wasn't a problem so just skip
|
||||
using Pkg
|
||||
src = pkgdir(Pkg, "src", "Pkg.jl")
|
||||
# mtime is when it's compressed, ctime is when the file is extracted
|
||||
if mtime(src) >= ctime(src)
|
||||
error("source mtime ($(mtime(src))) is not earlier than ctime ($(ctime(src)))")
|
||||
end
|
||||
end
|
||||
2
.github/workflows/backup.yml
vendored
2
.github/workflows/backup.yml
vendored
@@ -21,7 +21,7 @@ jobs:
|
||||
key: ${{ runner.os }}
|
||||
|
||||
- name: Install the correct Python version
|
||||
uses: actions/setup-python@v4
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.x'
|
||||
|
||||
|
||||
4
.github/workflows/checkin.yml
vendored
4
.github/workflows/checkin.yml
vendored
@@ -12,9 +12,9 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: 16
|
||||
|
||||
|
||||
8
.github/workflows/codeql-analysis.yml
vendored
8
.github/workflows/codeql-analysis.yml
vendored
@@ -42,11 +42,11 @@ jobs:
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
uses: github/codeql-action/init@v3
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
@@ -57,7 +57,7 @@ jobs:
|
||||
# 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@v2
|
||||
uses: github/codeql-action/autobuild@v3
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
@@ -71,4 +71,4 @@ jobs:
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
uses: github/codeql-action/analyze@v3
|
||||
|
||||
@@ -23,9 +23,9 @@ jobs:
|
||||
os: [ubuntu-latest, macOS-latest, windows-latest]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/setup-node@v4
|
||||
if: ${{ ! startsWith(github.ref, 'refs/heads/releases') }}
|
||||
with:
|
||||
node-version: 16
|
||||
@@ -42,5 +42,9 @@ jobs:
|
||||
uses: ./
|
||||
with:
|
||||
version: ${{ matrix.julia-version }}
|
||||
env:
|
||||
TEMP: ${{ runner.temp }}
|
||||
- run: julia --version
|
||||
- run: julia --compile=min -O0 -e 'import InteractiveUtils; InteractiveUtils.versioninfo()'
|
||||
- name: "Check that the correct julia is used and that archive mtimes are maintained"
|
||||
run: julia --startup-file=no --color=yes ./.github/scripts/common-tests.jl
|
||||
|
||||
@@ -22,9 +22,9 @@ jobs:
|
||||
os: [ubuntu-latest, macOS-latest, windows-latest]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/setup-node@v4
|
||||
if: ${{ ! startsWith(github.ref, 'refs/heads/releases') }}
|
||||
with:
|
||||
node-version: 16
|
||||
@@ -40,5 +40,9 @@ jobs:
|
||||
uses: ./
|
||||
with:
|
||||
version: ${{ matrix.julia-version }}
|
||||
env:
|
||||
TEMP: ${{ runner.temp }}
|
||||
- run: julia --version
|
||||
- run: julia --compile=min -O0 -e 'import InteractiveUtils; InteractiveUtils.versioninfo()'
|
||||
- name: "Check that the correct julia is used and that archive mtimes are maintained"
|
||||
run: julia --startup-file=no --color=yes ./.github/scripts/common-tests.jl
|
||||
|
||||
8
.github/workflows/example-builds-nightly.yml
vendored
8
.github/workflows/example-builds-nightly.yml
vendored
@@ -29,9 +29,9 @@ jobs:
|
||||
julia-arch: x86
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/setup-node@v4
|
||||
if: ${{ ! startsWith(github.ref, 'refs/heads/releases') }}
|
||||
with:
|
||||
node-version: 16
|
||||
@@ -48,5 +48,9 @@ jobs:
|
||||
with:
|
||||
version: ${{ matrix.julia-version }}
|
||||
arch: ${{ matrix.julia-arch }}
|
||||
env:
|
||||
TEMP: ${{ runner.temp }}
|
||||
- run: julia --version
|
||||
- run: julia --compile=min -O0 -e 'import InteractiveUtils; InteractiveUtils.versioninfo()'
|
||||
- name: "Check that the correct julia is used and that archive mtimes are maintained"
|
||||
run: julia --startup-file=no --color=yes ./.github/scripts/common-tests.jl
|
||||
|
||||
8
.github/workflows/example-builds.yml
vendored
8
.github/workflows/example-builds.yml
vendored
@@ -28,9 +28,9 @@ jobs:
|
||||
julia-arch: x86
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
- uses: actions/setup-node@v4
|
||||
if: ${{ ! startsWith(github.ref, 'refs/heads/releases') }}
|
||||
with:
|
||||
node-version: 16
|
||||
@@ -48,5 +48,9 @@ jobs:
|
||||
with:
|
||||
version: ${{ matrix.julia-version }}
|
||||
arch: ${{ matrix.julia-arch }}
|
||||
env:
|
||||
TEMP: ${{ runner.temp }}
|
||||
- run: julia --version
|
||||
- run: julia --compile=min -O0 -e 'import InteractiveUtils; InteractiveUtils.versioninfo()'
|
||||
- name: "Check that the correct julia is used and that archive mtimes are maintained"
|
||||
run: julia --startup-file=no --color=yes ./.github/scripts/common-tests.jl
|
||||
|
||||
20
README.md
20
README.md
@@ -89,7 +89,7 @@ steps:
|
||||
- uses: actions/checkout@v1.0.0
|
||||
- uses: julia-actions/setup-julia@v1
|
||||
with:
|
||||
version: 1.0.4
|
||||
version: '1.10'
|
||||
- run: julia -e 'println("Hello, World!")'
|
||||
```
|
||||
|
||||
@@ -103,14 +103,14 @@ You can either specify specific Julia versions or version ranges. If you specify
|
||||
|
||||
#### Examples
|
||||
|
||||
- `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`, excluding pre-releases.
|
||||
- `^1.3.0-rc1` is a **caret** version range that includes pre-releases of `1.3.0` starting at `rc1`. It matches all versions `≥ 1.3.0-rc1` and `< 2.0.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 **tilde** version range that includes _all_ pre-releases of `1.3.0`. It matches all versions `≥ 1.3.0-` and `< 1.4.0`.
|
||||
- `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.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`, excluding pre-releases.
|
||||
- `'^1.3.0-rc1'` is a **caret** version range that includes pre-releases of `1.3.0` starting at `rc1`. It matches all versions `≥ 1.3.0-rc1` and `< 2.0.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 **tilde** version range that includes _all_ pre-releases of `1.3.0`. It matches all versions `≥ 1.3.0-` and `< 1.4.0`.
|
||||
- `'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).
|
||||
|
||||
@@ -118,7 +118,7 @@ Internally the action uses node's semver package to resolve version ranges. Its
|
||||
|
||||
There are two methods of including pre-releases in version matching:
|
||||
|
||||
1. Including the pre-release tag in the version itself, e.g. `^1.3.0-rc1`.
|
||||
1. Including the pre-release tag in the version itself, e.g. `'^1.3.0-rc1'`.
|
||||
2. Setting the input `include-all-prereleases` to `true`.
|
||||
|
||||
These behave slightly differently.
|
||||
|
||||
23
lib/installer.js
generated
23
lib/installer.js
generated
@@ -216,7 +216,7 @@ function getDownloadURL(fileInfo, version, arch) {
|
||||
return fileInfo.url;
|
||||
}
|
||||
exports.getDownloadURL = getDownloadURL;
|
||||
function installJulia(versionInfo, version, arch) {
|
||||
function installJulia(dest, versionInfo, version, arch) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
// Download Julia
|
||||
const fileInfo = getFileInfo(versionInfo, version, arch);
|
||||
@@ -243,39 +243,38 @@ function installJulia(versionInfo, version, arch) {
|
||||
else {
|
||||
core.debug('Skipping checksum check for nightly binaries.');
|
||||
}
|
||||
const tempInstallDir = fs.mkdtempSync(`julia-${arch}-${version}-`);
|
||||
// Install it
|
||||
switch (osPlat) {
|
||||
case 'linux':
|
||||
// tc.extractTar doesn't support stripping components, so we have to call tar manually
|
||||
yield exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir]);
|
||||
return tempInstallDir;
|
||||
yield exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', dest]);
|
||||
return dest;
|
||||
case 'win32':
|
||||
if (fileInfo !== null && fileInfo.extension == 'exe') {
|
||||
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`]);
|
||||
yield exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/SILENT /dir=${path.join(process.cwd(), dest)}" -NoNewWindow -Wait`]);
|
||||
}
|
||||
else {
|
||||
yield exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/S /D=${path.join(process.cwd(), tempInstallDir)}" -NoNewWindow -Wait`]);
|
||||
yield exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/S /D=${path.join(process.cwd(), dest)}" -NoNewWindow -Wait`]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// This is the more common path. Using .tar.gz is much faster
|
||||
yield exec.exec('powershell', ['-Command', `tar xf ${juliaDownloadPath} --strip-components=1 -C ${tempInstallDir}`]);
|
||||
yield exec.exec('powershell', ['-Command', `tar xf ${juliaDownloadPath} --strip-components=1 -C ${dest}`]);
|
||||
}
|
||||
return tempInstallDir;
|
||||
return dest;
|
||||
case 'darwin':
|
||||
if (fileInfo !== null && fileInfo.extension == 'dmg') {
|
||||
core.debug(`Support for .dmg files is deprecated and may be removed in a future release`);
|
||||
yield exec.exec('hdiutil', ['attach', juliaDownloadPath]);
|
||||
yield exec.exec('/bin/bash', ['-c', `cp -a /Volumes/Julia-*/Julia-*.app/Contents/Resources/julia ${tempInstallDir}`]);
|
||||
return path.join(tempInstallDir, 'julia');
|
||||
yield exec.exec('/bin/bash', ['-c', `cp -a /Volumes/Julia-*/Julia-*.app/Contents/Resources/julia ${dest}`]);
|
||||
return path.join(dest, 'julia');
|
||||
}
|
||||
else {
|
||||
// tc.extractTar doesn't support stripping components, so we have to call tar manually
|
||||
yield exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir]);
|
||||
return tempInstallDir;
|
||||
yield exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', dest]);
|
||||
return dest;
|
||||
}
|
||||
default:
|
||||
throw new Error(`Platform ${osPlat} is not supported`);
|
||||
|
||||
16
lib/setup-julia.js
generated
16
lib/setup-julia.js
generated
@@ -91,12 +91,18 @@ function run() {
|
||||
juliaPath = tc.find('julia', version, arch);
|
||||
if (!juliaPath) {
|
||||
core.debug(`could not find Julia ${arch}/${version} in cache`);
|
||||
const juliaInstallationPath = yield installer.installJulia(versionInfo, version, arch);
|
||||
// Add it to cache
|
||||
juliaPath = yield tc.cacheDir(juliaInstallationPath, 'julia', version, arch);
|
||||
// https://github.com/julia-actions/setup-julia/pull/196
|
||||
// we want julia to be installed with unmodified file mtimes
|
||||
// but `tc.cacheDir` uses `cp` internally which destroys mtime
|
||||
// and `tc` provides no API to get the tool directory alone
|
||||
// so hack it by installing a empty directory then use the path it returns
|
||||
// and extract the archives directly to that location
|
||||
const emptyDir = fs.mkdtempSync('empty');
|
||||
juliaPath = yield tc.cacheDir(emptyDir, 'julia', version, arch);
|
||||
yield installer.installJulia(juliaPath, versionInfo, version, arch);
|
||||
core.debug(`added Julia to cache: ${juliaPath}`);
|
||||
// Remove temporary dir
|
||||
fs.rmSync(juliaInstallationPath, { recursive: true });
|
||||
// Remove empty dir
|
||||
fs.rmdirSync(emptyDir);
|
||||
}
|
||||
else {
|
||||
core.debug(`using cached version of Julia: ${juliaPath}`);
|
||||
|
||||
1852
package-lock.json
generated
1852
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
26
package.json
26
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "setup-julia",
|
||||
"version": "1.9.3",
|
||||
"version": "1.9.5",
|
||||
"private": true,
|
||||
"description": "setup Julia action",
|
||||
"main": "lib/setup-julia.js",
|
||||
@@ -21,7 +21,7 @@
|
||||
"author": "Sascha Mann <git@mail.saschamann.eu>",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.10.0",
|
||||
"@actions/core": "^1.10.1",
|
||||
"@actions/exec": "^1.1.1",
|
||||
"@actions/io": "^1.1.3",
|
||||
"@actions/tool-cache": "^2.0.1",
|
||||
@@ -29,17 +29,17 @@
|
||||
"semver": "^7.5.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/async-retry": "^1.4.5",
|
||||
"@types/jest": "^29.5.0",
|
||||
"@types/node": "^18.14.2",
|
||||
"@types/retry": "^0.12.2",
|
||||
"@types/async-retry": "^1.4.8",
|
||||
"@types/jest": "^29.5.11",
|
||||
"@types/node": "^20.10.6",
|
||||
"@types/retry": "^0.12.5",
|
||||
"@types/semver": "^7.5.6",
|
||||
"@vercel/ncc": "^0.36.1",
|
||||
"jest": "^29.5.0",
|
||||
"jest-circus": "^29.5.0",
|
||||
"nock": "^13.3.8",
|
||||
"prettier": "^3.1.0",
|
||||
"ts-jest": "^29.0.5",
|
||||
"typescript": "^5.3.2"
|
||||
"@vercel/ncc": "^0.38.1",
|
||||
"jest": "^29.7.0",
|
||||
"jest-circus": "^29.7.0",
|
||||
"nock": "^13.4.0",
|
||||
"prettier": "^3.1.1",
|
||||
"ts-jest": "^29.1.1",
|
||||
"typescript": "^5.3.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ export function getDownloadURL(fileInfo, version: string, arch: string): string
|
||||
return fileInfo.url
|
||||
}
|
||||
|
||||
export async function installJulia(versionInfo, version: string, arch: string): Promise<string> {
|
||||
export async function installJulia(dest: string, versionInfo, version: string, arch: string): Promise<string> {
|
||||
// Download Julia
|
||||
const fileInfo = getFileInfo(versionInfo, version, arch)
|
||||
const downloadURL = getDownloadURL(fileInfo, version, arch)
|
||||
@@ -226,37 +226,35 @@ export async function installJulia(versionInfo, version: string, arch: string):
|
||||
core.debug('Skipping checksum check for nightly binaries.')
|
||||
}
|
||||
|
||||
const tempInstallDir = fs.mkdtempSync(`julia-${arch}-${version}-`)
|
||||
|
||||
// Install it
|
||||
switch (osPlat) {
|
||||
case 'linux':
|
||||
// tc.extractTar doesn't support stripping components, so we have to call tar manually
|
||||
await exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir])
|
||||
return tempInstallDir
|
||||
await exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', dest])
|
||||
return dest
|
||||
case 'win32':
|
||||
if (fileInfo !== null && fileInfo.extension == 'exe') {
|
||||
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`])
|
||||
await exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/SILENT /dir=${path.join(process.cwd(), dest)}" -NoNewWindow -Wait`])
|
||||
} else {
|
||||
await exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/S /D=${path.join(process.cwd(), tempInstallDir)}" -NoNewWindow -Wait`])
|
||||
await exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/S /D=${path.join(process.cwd(), dest)}" -NoNewWindow -Wait`])
|
||||
}
|
||||
} else {
|
||||
// This is the more common path. Using .tar.gz is much faster
|
||||
await exec.exec('powershell', ['-Command', `tar xf ${juliaDownloadPath} --strip-components=1 -C ${tempInstallDir}`])
|
||||
await exec.exec('powershell', ['-Command', `tar xf ${juliaDownloadPath} --strip-components=1 -C ${dest}`])
|
||||
}
|
||||
return tempInstallDir
|
||||
return dest
|
||||
case 'darwin':
|
||||
if (fileInfo !== null && fileInfo.extension == 'dmg') {
|
||||
core.debug(`Support for .dmg files is deprecated and may be removed in a future release`)
|
||||
await exec.exec('hdiutil', ['attach', juliaDownloadPath])
|
||||
await exec.exec('/bin/bash', ['-c', `cp -a /Volumes/Julia-*/Julia-*.app/Contents/Resources/julia ${tempInstallDir}`])
|
||||
return path.join(tempInstallDir, 'julia')
|
||||
await exec.exec('/bin/bash', ['-c', `cp -a /Volumes/Julia-*/Julia-*.app/Contents/Resources/julia ${dest}`])
|
||||
return path.join(dest, 'julia')
|
||||
} else {
|
||||
// tc.extractTar doesn't support stripping components, so we have to call tar manually
|
||||
await exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir])
|
||||
return tempInstallDir
|
||||
await exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', dest])
|
||||
return dest
|
||||
}
|
||||
default:
|
||||
throw new Error(`Platform ${osPlat} is not supported`)
|
||||
|
||||
@@ -69,14 +69,21 @@ async function run() {
|
||||
|
||||
if (!juliaPath) {
|
||||
core.debug(`could not find Julia ${arch}/${version} in cache`)
|
||||
const juliaInstallationPath = await installer.installJulia(versionInfo, version, arch)
|
||||
|
||||
// Add it to cache
|
||||
juliaPath = await tc.cacheDir(juliaInstallationPath, 'julia', version, arch)
|
||||
// https://github.com/julia-actions/setup-julia/pull/196
|
||||
// we want julia to be installed with unmodified file mtimes
|
||||
// but `tc.cacheDir` uses `cp` internally which destroys mtime
|
||||
// and `tc` provides no API to get the tool directory alone
|
||||
// so hack it by installing a empty directory then use the path it returns
|
||||
// and extract the archives directly to that location
|
||||
const emptyDir = fs.mkdtempSync('empty')
|
||||
juliaPath = await tc.cacheDir(emptyDir, 'julia', version, arch)
|
||||
await installer.installJulia(juliaPath, versionInfo, version, arch)
|
||||
|
||||
core.debug(`added Julia to cache: ${juliaPath}`)
|
||||
|
||||
// Remove temporary dir
|
||||
fs.rmSync(juliaInstallationPath, {recursive: true})
|
||||
// Remove empty dir
|
||||
fs.rmdirSync(emptyDir)
|
||||
} else {
|
||||
core.debug(`using cached version of Julia: ${juliaPath}`)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user