Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add basic debugging via NODE_DEBUG=hugo-bin #151

Merged
merged 13 commits into from
Sep 11, 2024
4 changes: 4 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ jobs:

- name: Install npm dependencies
run: npm ci
env:
NODE_DEBUG: hugo-bin

- name: Print hugo version
run: npm exec hugo version
Expand Down Expand Up @@ -98,6 +100,8 @@ jobs:

- name: Install npm dependencies
run: npm ci
env:
NODE_DEBUG: hugo-bin

- name: Print hugo version
run: npm exec hugo version
Expand Down
94 changes: 65 additions & 29 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,34 +2,46 @@ import fs from 'node:fs/promises';
import path from 'node:path';
import process from 'node:process';
import { fileURLToPath } from 'node:url';
import { debuglog } from 'node:util';
import BinWrapper from '@xhmikosr/bin-wrapper';
import { packageConfig } from 'package-config';

const debug = debuglog('hugo-bin');
const pkg = new URL('../package.json', import.meta.url);
const { hugoVersion: HUGO_VERSION } = JSON.parse(await fs.readFile(pkg, 'utf8'));

const destDir = path.join(fileURLToPath(new URL('../vendor/', import.meta.url)));
const binName = process.platform === 'win32' ? 'hugo.exe' : 'hugo';

debug('[global] HUGO_VERSION:', HUGO_VERSION);
debug('[global] destDir:', destDir);
debug('[global] binName:', binName);

/**
* @param {string} baseUrl
* @param {string} hugoVersion
*/
function extendedBin(baseUrl, hugoVersion) {
debug('[extendedBin] baseUrl:', baseUrl);
debug('[extendedBin] hugoVersion:', hugoVersion);

const baseName = `hugo_${hugoVersion}`;
const baseNameExtended = `hugo_extended_${hugoVersion}`;

return new BinWrapper()
.src(`${baseUrl}hugo_extended_${hugoVersion}_darwin-universal.tar.gz`, 'darwin', 'arm64')
.src(`${baseUrl}hugo_extended_${hugoVersion}_darwin-universal.tar.gz`, 'darwin', 'x64')
.src(`${baseUrl}hugo_extended_${hugoVersion}_linux-amd64.tar.gz`, 'linux', 'x64')
.src(`${baseUrl}hugo_extended_${hugoVersion}_linux-arm64.tar.gz`, 'linux', 'arm64')
.src(`${baseUrl}hugo_extended_${hugoVersion}_windows-amd64.zip`, 'win32', 'x64')
.src(`${baseUrl}${baseNameExtended}_darwin-universal.tar.gz`, 'darwin', 'arm64')
.src(`${baseUrl}${baseNameExtended}_darwin-universal.tar.gz`, 'darwin', 'x64')
.src(`${baseUrl}${baseNameExtended}_linux-amd64.tar.gz`, 'linux', 'x64')
.src(`${baseUrl}${baseNameExtended}_linux-arm64.tar.gz`, 'linux', 'arm64')
.src(`${baseUrl}${baseNameExtended}_windows-amd64.zip`, 'win32', 'x64')
// Fall back to the normal version on unsupported platforms
.src(`${baseUrl}hugo_${hugoVersion}_dragonfly-amd64.tar.gz`, 'dragonflybsd', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_freebsd-amd64.tar.gz`, 'freebsd', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_linux-arm.tar.gz`, 'linux', 'arm')
.src(`${baseUrl}hugo_${hugoVersion}_netbsd-amd64.tar.gz`, 'netbsd', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_openbsd-amd64.tar.gz`, 'openbsd', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_solaris-amd64.tar.gz`, 'openbsd', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_windows-arm64.zip`, 'win32', 'arm64')
.src(`${baseUrl}${baseName}_dragonfly-amd64.tar.gz`, 'dragonflybsd', 'x64')
.src(`${baseUrl}${baseName}_freebsd-amd64.tar.gz`, 'freebsd', 'x64')
.src(`${baseUrl}${baseName}_linux-arm.tar.gz`, 'linux', 'arm')
.src(`${baseUrl}${baseName}_netbsd-amd64.tar.gz`, 'netbsd', 'x64')
.src(`${baseUrl}${baseName}_openbsd-amd64.tar.gz`, 'openbsd', 'x64')
.src(`${baseUrl}${baseName}_solaris-amd64.tar.gz`, 'openbsd', 'x64')
.src(`${baseUrl}${baseName}_windows-arm64.zip`, 'win32', 'arm64')
.dest(destDir)
.use(binName);
}
Expand All @@ -39,28 +51,32 @@ function extendedBin(baseUrl, hugoVersion) {
* @param {string} hugoVersion
*/
function normalBin(baseUrl, hugoVersion) {
debug('[normalBin] baseUrl:', baseUrl);
debug('[normalBin] hugoVersion:', hugoVersion);

const baseName = `hugo_${hugoVersion}`;

return new BinWrapper()
.src(`${baseUrl}hugo_${hugoVersion}_darwin-universal.tar.gz`, 'darwin', 'arm64')
.src(`${baseUrl}hugo_${hugoVersion}_darwin-universal.tar.gz`, 'darwin', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_dragonfly-amd64.tar.gz`, 'dragonflybsd', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_freebsd-amd64.tar.gz`, 'freebsd', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_linux-amd64.tar.gz`, 'linux', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_linux-arm.tar.gz`, 'linux', 'arm')
.src(`${baseUrl}hugo_${hugoVersion}_linux-arm64.tar.gz`, 'linux', 'arm64')
.src(`${baseUrl}hugo_${hugoVersion}_netbsd-amd64.tar.gz`, 'netbsd', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_openbsd-amd64.tar.gz`, 'openbsd', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_solaris-amd64.tar.gz`, 'solaris', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_windows-amd64.zip`, 'win32', 'x64')
.src(`${baseUrl}hugo_${hugoVersion}_windows-arm64.zip`, 'win32', 'arm64')
.src(`${baseUrl}${baseName}_darwin-universal.tar.gz`, 'darwin', 'arm64')
.src(`${baseUrl}${baseName}_darwin-universal.tar.gz`, 'darwin', 'x64')
.src(`${baseUrl}${baseName}_dragonfly-amd64.tar.gz`, 'dragonflybsd', 'x64')
.src(`${baseUrl}${baseName}_freebsd-amd64.tar.gz`, 'freebsd', 'x64')
.src(`${baseUrl}${baseName}_linux-amd64.tar.gz`, 'linux', 'x64')
.src(`${baseUrl}${baseName}_linux-arm.tar.gz`, 'linux', 'arm')
.src(`${baseUrl}${baseName}_linux-arm64.tar.gz`, 'linux', 'arm64')
.src(`${baseUrl}${baseName}_netbsd-amd64.tar.gz`, 'netbsd', 'x64')
.src(`${baseUrl}${baseName}_openbsd-amd64.tar.gz`, 'openbsd', 'x64')
.src(`${baseUrl}${baseName}_solaris-amd64.tar.gz`, 'solaris', 'x64')
.src(`${baseUrl}${baseName}_windows-amd64.zip`, 'win32', 'x64')
.src(`${baseUrl}${baseName}_windows-arm64.zip`, 'win32', 'arm64')
.dest(destDir)
.use(binName);
}

/**
* @param {string} cwd
* @param {import('pkg-conf').Config} config
*/
async function main(cwd) {
const config = await packageConfig('hugo-bin', { cwd });
function getOptions(config) {
const hugoVersion = [
process.env.HUGO_BIN_HUGO_VERSION,
process.env.npm_config_hugo_bin_hugo_version,
Expand All @@ -79,9 +95,29 @@ async function main(cwd) {

// Strip any leading `v` from hugoVersion because otherwise we'll end up with duplicate `v`s
const version = hugoVersion[0] === 'v' ? hugoVersion.slice(1) : hugoVersion;
const baseUrl = `${downloadRepo}/gohugoio/hugo/releases/download/v${version}/`;

return isExtended ? extendedBin(baseUrl, version) : normalBin(baseUrl, version);
debug('[getOptions] hugoVersion:', version);
debug('[getOptions] downloadRepo:', downloadRepo);
debug('[getOptions] isExtended:', isExtended);

return {
hugoVersion: version,
downloadRepo,
isExtended
};
}

/**
* @param {string} cwd
*/
async function main(cwd) {
const config = await packageConfig('hugo-bin', { cwd });
const { hugoVersion, downloadRepo, isExtended } = getOptions(config);
const baseUrl = `${downloadRepo}/gohugoio/hugo/releases/download/v${hugoVersion}/`;

debug('[main] baseUrl:', baseUrl);

return isExtended ? extendedBin(baseUrl, hugoVersion) : normalBin(baseUrl, hugoVersion);
}

export default main;