Compare commits

..

2 Commits

Author SHA1 Message Date
Ian Butterworth
d76c3277e6 Update package-lock.json 2023-11-21 12:02:18 -05:00
Ian Butterworth
3e5218329a v1.9.4 2023-11-21 12:00:25 -05:00
17 changed files with 896 additions and 11864 deletions

View File

@@ -3,13 +3,13 @@ updates:
- package-ecosystem: gitsubmodule - package-ecosystem: gitsubmodule
directory: "/" directory: "/"
schedule: schedule:
interval: monthly interval: daily
open-pull-requests-limit: 10 open-pull-requests-limit: 10
- package-ecosystem: 'github-actions' - package-ecosystem: 'github-actions'
directory: '/' directory: '/'
schedule: schedule:
interval: 'monthly' interval: 'daily'
- package-ecosystem: npm - package-ecosystem: npm
directory: "/" directory: "/"

View File

@@ -1,11 +0,0 @@
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

View File

@@ -21,7 +21,7 @@ jobs:
key: ${{ runner.os }} key: ${{ runner.os }}
- name: Install the correct Python version - name: Install the correct Python version
uses: actions/setup-python@v5 uses: actions/setup-python@v4
with: with:
python-version: '3.x' python-version: '3.x'

View File

@@ -12,9 +12,9 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
timeout-minutes: 60 timeout-minutes: 60
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v3
- uses: actions/setup-node@v4 - uses: actions/setup-node@v3
with: with:
node-version: 16 node-version: 16

View File

@@ -42,11 +42,11 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v3 uses: github/codeql-action/init@v2
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file. # 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). # 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) # If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild - name: Autobuild
uses: github/codeql-action/autobuild@v3 uses: github/codeql-action/autobuild@v2
# Command-line programs to run using the OS shell. # Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl # 📚 https://git.io/JvXDl
@@ -71,4 +71,4 @@ jobs:
# make release # make release
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3 uses: github/codeql-action/analyze@v2

View File

@@ -23,9 +23,9 @@ jobs:
os: [ubuntu-latest, macOS-latest, windows-latest] os: [ubuntu-latest, macOS-latest, windows-latest]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v3
- uses: actions/setup-node@v4 - uses: actions/setup-node@v3
if: ${{ ! startsWith(github.ref, 'refs/heads/releases') }} if: ${{ ! startsWith(github.ref, 'refs/heads/releases') }}
with: with:
node-version: 16 node-version: 16
@@ -44,5 +44,3 @@ jobs:
version: ${{ matrix.julia-version }} version: ${{ matrix.julia-version }}
- run: julia --version - run: julia --version
- run: julia --compile=min -O0 -e 'import InteractiveUtils; InteractiveUtils.versioninfo()' - 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

View File

@@ -22,9 +22,9 @@ jobs:
os: [ubuntu-latest, macOS-latest, windows-latest] os: [ubuntu-latest, macOS-latest, windows-latest]
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v3
- uses: actions/setup-node@v4 - uses: actions/setup-node@v3
if: ${{ ! startsWith(github.ref, 'refs/heads/releases') }} if: ${{ ! startsWith(github.ref, 'refs/heads/releases') }}
with: with:
node-version: 16 node-version: 16
@@ -42,5 +42,3 @@ jobs:
version: ${{ matrix.julia-version }} version: ${{ matrix.julia-version }}
- run: julia --version - run: julia --version
- run: julia --compile=min -O0 -e 'import InteractiveUtils; InteractiveUtils.versioninfo()' - 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

View File

@@ -29,9 +29,9 @@ jobs:
julia-arch: x86 julia-arch: x86
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v3
- uses: actions/setup-node@v4 - uses: actions/setup-node@v3
if: ${{ ! startsWith(github.ref, 'refs/heads/releases') }} if: ${{ ! startsWith(github.ref, 'refs/heads/releases') }}
with: with:
node-version: 16 node-version: 16
@@ -50,5 +50,3 @@ jobs:
arch: ${{ matrix.julia-arch }} arch: ${{ matrix.julia-arch }}
- run: julia --version - run: julia --version
- run: julia --compile=min -O0 -e 'import InteractiveUtils; InteractiveUtils.versioninfo()' - 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

View File

@@ -28,9 +28,9 @@ jobs:
julia-arch: x86 julia-arch: x86
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v3
- uses: actions/setup-node@v4 - uses: actions/setup-node@v3
if: ${{ ! startsWith(github.ref, 'refs/heads/releases') }} if: ${{ ! startsWith(github.ref, 'refs/heads/releases') }}
with: with:
node-version: 16 node-version: 16
@@ -50,5 +50,3 @@ jobs:
arch: ${{ matrix.julia-arch }} arch: ${{ matrix.julia-arch }}
- run: julia --version - run: julia --version
- run: julia --compile=min -O0 -e 'import InteractiveUtils; InteractiveUtils.versioninfo()' - 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

2
.gitignore vendored
View File

@@ -1,3 +1,3 @@
node_modules/ node_modules/
__tests__/runner/* __tests__/runner/*
!dist/ dist/

10747
dist/index.js vendored

File diff suppressed because it is too large Load Diff

23
lib/installer.js generated
View File

@@ -216,7 +216,7 @@ function getDownloadURL(fileInfo, version, arch) {
return fileInfo.url; return fileInfo.url;
} }
exports.getDownloadURL = getDownloadURL; exports.getDownloadURL = getDownloadURL;
function installJulia(dest, versionInfo, version, arch) { function installJulia(versionInfo, version, arch) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
// Download Julia // Download Julia
const fileInfo = getFileInfo(versionInfo, version, arch); const fileInfo = getFileInfo(versionInfo, version, arch);
@@ -243,38 +243,39 @@ function installJulia(dest, versionInfo, version, arch) {
else { else {
core.debug('Skipping checksum check for nightly binaries.'); core.debug('Skipping checksum check for nightly binaries.');
} }
const tempInstallDir = fs.mkdtempSync(`julia-${arch}-${version}-`);
// Install it // Install it
switch (osPlat) { switch (osPlat) {
case 'linux': case 'linux':
// tc.extractTar doesn't support stripping components, so we have to call tar manually // tc.extractTar doesn't support stripping components, so we have to call tar manually
yield exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', dest]); yield exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir]);
return dest; return tempInstallDir;
case 'win32': case 'win32':
if (fileInfo !== null && fileInfo.extension == 'exe') { if (fileInfo !== null && fileInfo.extension == 'exe') {
if (version.endsWith('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(), dest)}" -NoNewWindow -Wait`]); yield exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/SILENT /dir=${path.join(process.cwd(), tempInstallDir)}" -NoNewWindow -Wait`]);
} }
else { else {
yield exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/S /D=${path.join(process.cwd(), dest)}" -NoNewWindow -Wait`]); yield exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/S /D=${path.join(process.cwd(), tempInstallDir)}" -NoNewWindow -Wait`]);
} }
} }
else { else {
// This is the more common path. Using .tar.gz is much faster // This is the more common path. Using .tar.gz is much faster
yield exec.exec('powershell', ['-Command', `tar xf ${juliaDownloadPath} --strip-components=1 -C ${dest}`]); yield exec.exec('powershell', ['-Command', `tar xf ${juliaDownloadPath} --strip-components=1 -C ${tempInstallDir}`]);
} }
return dest; return tempInstallDir;
case 'darwin': case 'darwin':
if (fileInfo !== null && fileInfo.extension == 'dmg') { if (fileInfo !== null && fileInfo.extension == 'dmg') {
core.debug(`Support for .dmg files is deprecated and may be removed in a future release`); 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('hdiutil', ['attach', juliaDownloadPath]);
yield exec.exec('/bin/bash', ['-c', `cp -a /Volumes/Julia-*/Julia-*.app/Contents/Resources/julia ${dest}`]); yield exec.exec('/bin/bash', ['-c', `cp -a /Volumes/Julia-*/Julia-*.app/Contents/Resources/julia ${tempInstallDir}`]);
return path.join(dest, 'julia'); return path.join(tempInstallDir, 'julia');
} }
else { else {
// tc.extractTar doesn't support stripping components, so we have to call tar manually // tc.extractTar doesn't support stripping components, so we have to call tar manually
yield exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', dest]); yield exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir]);
return dest; return tempInstallDir;
} }
default: default:
throw new Error(`Platform ${osPlat} is not supported`); throw new Error(`Platform ${osPlat} is not supported`);

16
lib/setup-julia.js generated
View File

@@ -91,18 +91,12 @@ function run() {
juliaPath = tc.find('julia', version, arch); juliaPath = tc.find('julia', version, arch);
if (!juliaPath) { if (!juliaPath) {
core.debug(`could not find Julia ${arch}/${version} in cache`); core.debug(`could not find Julia ${arch}/${version} in cache`);
// https://github.com/julia-actions/setup-julia/pull/196 const juliaInstallationPath = yield installer.installJulia(versionInfo, version, arch);
// we want julia to be installed with unmodified file mtimes // Add it to cache
// but `tc.cacheDir` uses `cp` internally which destroys mtime juliaPath = yield tc.cacheDir(juliaInstallationPath, 'julia', version, arch);
// 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}`); core.debug(`added Julia to cache: ${juliaPath}`);
// Remove empty dir // Remove temporary dir
fs.rmdirSync(emptyDir); fs.rmSync(juliaInstallationPath, { recursive: true });
} }
else { else {
core.debug(`using cached version of Julia: ${juliaPath}`); core.debug(`using cached version of Julia: ${juliaPath}`);

1852
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{ {
"name": "setup-julia", "name": "setup-julia",
"version": "1.9.5", "version": "1.9.4",
"private": true, "private": true,
"description": "setup Julia action", "description": "setup Julia action",
"main": "lib/setup-julia.js", "main": "lib/setup-julia.js",
@@ -21,7 +21,7 @@
"author": "Sascha Mann <git@mail.saschamann.eu>", "author": "Sascha Mann <git@mail.saschamann.eu>",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/core": "^1.10.1", "@actions/core": "^1.10.0",
"@actions/exec": "^1.1.1", "@actions/exec": "^1.1.1",
"@actions/io": "^1.1.3", "@actions/io": "^1.1.3",
"@actions/tool-cache": "^2.0.1", "@actions/tool-cache": "^2.0.1",
@@ -29,17 +29,17 @@
"semver": "^7.5.4" "semver": "^7.5.4"
}, },
"devDependencies": { "devDependencies": {
"@types/async-retry": "^1.4.8", "@types/async-retry": "^1.4.5",
"@types/jest": "^29.5.11", "@types/jest": "^29.5.0",
"@types/node": "^20.10.6", "@types/node": "^18.14.2",
"@types/retry": "^0.12.5", "@types/retry": "^0.12.2",
"@types/semver": "^7.5.6", "@types/semver": "^7.5.6",
"@vercel/ncc": "^0.38.1", "@vercel/ncc": "^0.36.1",
"jest": "^29.7.0", "jest": "^29.5.0",
"jest-circus": "^29.7.0", "jest-circus": "^29.5.0",
"nock": "^13.4.0", "nock": "^13.3.8",
"prettier": "^3.1.1", "prettier": "^3.1.0",
"ts-jest": "^29.1.1", "ts-jest": "^29.0.5",
"typescript": "^5.3.3" "typescript": "^5.3.2"
} }
} }

View File

@@ -198,7 +198,7 @@ export function getDownloadURL(fileInfo, version: string, arch: string): string
return fileInfo.url return fileInfo.url
} }
export async function installJulia(dest: string, versionInfo, version: string, arch: string): Promise<string> { export async function installJulia(versionInfo, version: string, arch: string): Promise<string> {
// Download Julia // Download Julia
const fileInfo = getFileInfo(versionInfo, version, arch) const fileInfo = getFileInfo(versionInfo, version, arch)
const downloadURL = getDownloadURL(fileInfo, version, arch) const downloadURL = getDownloadURL(fileInfo, version, arch)
@@ -226,35 +226,37 @@ export async function installJulia(dest: string, versionInfo, version: string, a
core.debug('Skipping checksum check for nightly binaries.') core.debug('Skipping checksum check for nightly binaries.')
} }
const tempInstallDir = fs.mkdtempSync(`julia-${arch}-${version}-`)
// Install it // Install it
switch (osPlat) { switch (osPlat) {
case 'linux': case 'linux':
// tc.extractTar doesn't support stripping components, so we have to call tar manually // tc.extractTar doesn't support stripping components, so we have to call tar manually
await exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', dest]) await exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir])
return dest return tempInstallDir
case 'win32': case 'win32':
if (fileInfo !== null && fileInfo.extension == 'exe') { if (fileInfo !== null && fileInfo.extension == 'exe') {
if (version.endsWith('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(), dest)}" -NoNewWindow -Wait`]) await exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/SILENT /dir=${path.join(process.cwd(), tempInstallDir)}" -NoNewWindow -Wait`])
} else { } else {
await exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/S /D=${path.join(process.cwd(), dest)}" -NoNewWindow -Wait`]) await exec.exec('powershell', ['-Command', `Start-Process -FilePath ${juliaDownloadPath} -ArgumentList "/S /D=${path.join(process.cwd(), tempInstallDir)}" -NoNewWindow -Wait`])
} }
} else { } else {
// This is the more common path. Using .tar.gz is much faster // This is the more common path. Using .tar.gz is much faster
await exec.exec('powershell', ['-Command', `tar xf ${juliaDownloadPath} --strip-components=1 -C ${dest}`]) await exec.exec('powershell', ['-Command', `tar xf ${juliaDownloadPath} --strip-components=1 -C ${tempInstallDir}`])
} }
return dest return tempInstallDir
case 'darwin': case 'darwin':
if (fileInfo !== null && fileInfo.extension == 'dmg') { if (fileInfo !== null && fileInfo.extension == 'dmg') {
core.debug(`Support for .dmg files is deprecated and may be removed in a future release`) 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('hdiutil', ['attach', juliaDownloadPath])
await exec.exec('/bin/bash', ['-c', `cp -a /Volumes/Julia-*/Julia-*.app/Contents/Resources/julia ${dest}`]) await exec.exec('/bin/bash', ['-c', `cp -a /Volumes/Julia-*/Julia-*.app/Contents/Resources/julia ${tempInstallDir}`])
return path.join(dest, 'julia') return path.join(tempInstallDir, 'julia')
} else { } else {
// tc.extractTar doesn't support stripping components, so we have to call tar manually // tc.extractTar doesn't support stripping components, so we have to call tar manually
await exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', dest]) await exec.exec('tar', ['xf', juliaDownloadPath, '--strip-components=1', '-C', tempInstallDir])
return dest return tempInstallDir
} }
default: default:
throw new Error(`Platform ${osPlat} is not supported`) throw new Error(`Platform ${osPlat} is not supported`)

View File

@@ -69,21 +69,14 @@ async function run() {
if (!juliaPath) { if (!juliaPath) {
core.debug(`could not find Julia ${arch}/${version} in cache`) core.debug(`could not find Julia ${arch}/${version} in cache`)
const juliaInstallationPath = await installer.installJulia(versionInfo, version, arch)
// https://github.com/julia-actions/setup-julia/pull/196 // Add it to cache
// we want julia to be installed with unmodified file mtimes juliaPath = await tc.cacheDir(juliaInstallationPath, 'julia', version, arch)
// 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}`) core.debug(`added Julia to cache: ${juliaPath}`)
// Remove empty dir // Remove temporary dir
fs.rmdirSync(emptyDir) fs.rmSync(juliaInstallationPath, {recursive: true})
} else { } else {
core.debug(`using cached version of Julia: ${juliaPath}`) core.debug(`using cached version of Julia: ${juliaPath}`)
} }