Skip to content

Commit

Permalink
Add basic debugging via NODE_DEBUG=hugo-bin (#151)
Browse files Browse the repository at this point in the history
  • Loading branch information
XhmikosR committed Sep 11, 2024
1 parent e069ba3 commit ab0bcee
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 29 deletions.
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;

0 comments on commit ab0bcee

Please sign in to comment.