diff --git a/dist/index.js b/dist/index.js index 039608e6..996c3871 100644 --- a/dist/index.js +++ b/dist/index.js @@ -36,29 +36,50 @@ async function downloadZig (version) { win32: 'zip' }[os.platform()] - const index = await getJSON({ url: 'https://ziglang.org/download/index.json' }) + if (version.includes('+')) { + // use exact commit hash + const addrhost = { + linux: 'linux-x86_64', + darwin: 'macos-x86_64', + win32: 'windows-x86_64' + }[os.platform()] + const downloadUrl = `https://ziglang.org/builds/zig-${addrhost}-${version}.${ext}` + const variantName = `zig-${addrhost}-${version}` + + const downloadPath = await cache.downloadTool(downloadUrl) + const zigPath = ext === 'zip' + ? await cache.extractZip(downloadPath) + : await cache.extractTar(downloadPath, undefined, 'x') + + const binPath = path.join(zigPath, variantName) + const cachePath = await cache.cacheDir(binPath, 'zig', variantName) + + return cachePath + } else { + const index = await getJSON({ url: 'https://ziglang.org/download/index.json' }) - const availableVersions = Object.keys(index) - const useVersion = semver.valid(version) - ? semver.maxSatisfying(availableVersions.filter((v) => semver.valid(v)), version) - : null + const availableVersions = Object.keys(index) + const useVersion = semver.valid(version) + ? semver.maxSatisfying(availableVersions.filter((v) => semver.valid(v)), version) + : null - const meta = index[useVersion || version] - if (!meta || !meta[host]) { - throw new Error(`Could not find version ${version} for platform ${host}`) - } + const meta = index[useVersion || version] + if (!meta || !meta[host]) { + throw new Error(`Could not find version ${version} for platform ${host}`) + } - const variantName = path.basename(meta[host].tarball).replace(`.${ext}`, '') + const variantName = path.basename(meta[host].tarball).replace(`.${ext}`, '') - const downloadPath = await cache.downloadTool(meta[host].tarball) - const zigPath = ext === 'zip' - ? await cache.extractZip(downloadPath) - : await cache.extractTar(downloadPath, undefined, 'x') + const downloadPath = await cache.downloadTool(meta[host].tarball) + const zigPath = ext === 'zip' + ? await cache.extractZip(downloadPath) + : await cache.extractTar(downloadPath, undefined, 'x') - const binPath = path.join(zigPath, variantName) - const cachePath = await cache.cacheDir(binPath, 'zig', variantName) + const binPath = path.join(zigPath, variantName) + const cachePath = await cache.cacheDir(binPath, 'zig', variantName) - return cachePath + return cachePath + } } async function main () { diff --git a/index.js b/index.js index e2fe21fb..4ee7d610 100644 --- a/index.js +++ b/index.js @@ -29,29 +29,50 @@ async function downloadZig (version) { win32: 'zip' }[os.platform()] - const index = await getJSON({ url: 'https://ziglang.org/download/index.json' }) + if (version.includes('+')) { + // use exact commit hash + const addrhost = { + linux: 'linux-x86_64', + darwin: 'macos-x86_64', + win32: 'windows-x86_64' + }[os.platform()] + const downloadUrl = `https://ziglang.org/builds/zig-${addrhost}-${version}.${ext}` + const variantName = `zig-${addrhost}-${version}` - const availableVersions = Object.keys(index) - const useVersion = semver.valid(version) - ? semver.maxSatisfying(availableVersions.filter((v) => semver.valid(v)), version) - : null + const downloadPath = await cache.downloadTool(downloadUrl) + const zigPath = ext === 'zip' + ? await cache.extractZip(downloadPath) + : await cache.extractTar(downloadPath, undefined, 'x') - const meta = index[useVersion || version] - if (!meta || !meta[host]) { - throw new Error(`Could not find version ${version} for platform ${host}`) - } + const binPath = path.join(zigPath, variantName) + const cachePath = await cache.cacheDir(binPath, 'zig', variantName) + + return cachePath + } else { + const index = await getJSON({ url: 'https://ziglang.org/download/index.json' }) + + const availableVersions = Object.keys(index) + const useVersion = semver.valid(version) + ? semver.maxSatisfying(availableVersions.filter((v) => semver.valid(v)), version) + : null - const variantName = path.basename(meta[host].tarball).replace(`.${ext}`, '') + const meta = index[useVersion || version] + if (!meta || !meta[host]) { + throw new Error(`Could not find version ${version} for platform ${host}`) + } - const downloadPath = await cache.downloadTool(meta[host].tarball) - const zigPath = ext === 'zip' - ? await cache.extractZip(downloadPath) - : await cache.extractTar(downloadPath, undefined, 'x') + const variantName = path.basename(meta[host].tarball).replace(`.${ext}`, '') - const binPath = path.join(zigPath, variantName) - const cachePath = await cache.cacheDir(binPath, 'zig', variantName) + const downloadPath = await cache.downloadTool(meta[host].tarball) + const zigPath = ext === 'zip' + ? await cache.extractZip(downloadPath) + : await cache.extractTar(downloadPath, undefined, 'x') - return cachePath + const binPath = path.join(zigPath, variantName) + const cachePath = await cache.cacheDir(binPath, 'zig', variantName) + + return cachePath + } } async function main () {