import path from "path"; import fs from "fs"; import downloader from "careful-downloader"; import logSymbols from "log-symbols"; import { getPkgVersion, getReleaseUrl, getReleaseFilename, getBinFilename, getBinVersion, getChecksumFilename, isExtended, } from "./utils.js"; installHugo() .then((bin) => // try querying hugo's version via CLI getBinVersion(bin), ) .then((version) => { // print output of `hugo version` to console console.log(`${logSymbols.success} Hugo installed successfully!`); console.log(version); }) .catch((error) => { // pass whatever error occured along the way to console console.error(`${logSymbols.error} Hugo installation failed. :(`); throw error; }); async function installHugo() { const version = getPkgVersion(); const releaseFile = getReleaseFilename(version); const checksumFile = getChecksumFilename(version); const binFile = getBinFilename(); // stop here if there's nothing we can download if (!releaseFile) { throw new Error(`Are you sure this platform is supported? See: https://github.com/gohugoio/hugo/releases/tag/v${version}`); } // warn if platform doesn't support Hugo Extended, proceed with vanilla Hugo if (!isExtended(releaseFile)) { console.warn(`${logSymbols.info} Hugo Extended isn't supported on this platform, downloading vanilla Hugo instead.`); } // download release from GitHub and verify its checksum const download = await downloader(getReleaseUrl(version, releaseFile), { checksumUrl: getReleaseUrl(version, checksumFile), filename: releaseFile, destDir: "vendor", algorithm: "sha256", extract: true, }); // ensure hugo[.exe] is executable fs.chmodSync(path.join(download, binFile), 0o755); // return the full path to our Hugo binary return path.join(download, binFile); }