mirror of
https://github.com/ThatGuySam/doesitarm.git
synced 2026-05-18 06:44:46 -07:00
99 lines
2.8 KiB
JavaScript
99 lines
2.8 KiB
JavaScript
// Stork and Netlify - https://stork-search.net/docs/stork-and-netlify
|
|
import fs from 'fs-extra'
|
|
import execa from 'execa'
|
|
|
|
import { isDarwin } from '~/helpers/environment.js'
|
|
import {
|
|
storkVersion,
|
|
storkExecutableName,
|
|
storkExecutablePath,
|
|
storkTomlPath,
|
|
storkIndexPath
|
|
} from '~/helpers/stork/config.js'
|
|
|
|
// https://stork-search.net/docs/install
|
|
const execDownloadUrls = {
|
|
darwin: `https://files.stork-search.net/releases/v${ storkVersion }/stork-macos-10-15`,
|
|
default: `https://files.stork-search.net/releases/v${ storkVersion }/stork-ubuntu-20-04`
|
|
|
|
// Stork 2.0
|
|
// darwin: `https://files.stork-search.net/releases/v${ storkVersion }/stork-macos-12`,
|
|
|
|
// default: `https://files.stork-search.net/releases/v${ storkVersion }/stork-amazon-linux`
|
|
}
|
|
|
|
// Check if a file is executable
|
|
// https://stackoverflow.com/a/69897809/1397641
|
|
async function isExecutable ( path ) {
|
|
const stats = await fs.stat( path )
|
|
const isExecutable = !!(stats.mode & fs.constants.S_IXUSR)
|
|
|
|
return isExecutable
|
|
}
|
|
|
|
// 👩💻 Bash Download example - https://github.com/jmooring/hugo-stork/blob/main/build.sh
|
|
export async function downloadStorkExecutable () {
|
|
const envKey = isDarwin() ? 'darwin' : 'default'
|
|
|
|
const execDownloadUrl = execDownloadUrls[ envKey ]
|
|
|
|
// console.log( { execDownloadUrl } )
|
|
|
|
// Delete any existing executable
|
|
// so we don't get write errors
|
|
// or false positives from preexisting executable files
|
|
await fs.remove( storkExecutablePath )
|
|
|
|
// Download the binary
|
|
await execa( `curl`, [
|
|
execDownloadUrl,
|
|
|
|
// Set filename
|
|
'-o',
|
|
storkExecutableName
|
|
])
|
|
|
|
|
|
// Set the downloaded binary as executable
|
|
await fs.chmod( storkExecutablePath, '755' )
|
|
// Check that our downloaded binary is executable
|
|
|
|
|
|
// console.log( 'isExecutable', isExecutable )
|
|
if ( !isExecutable( storkExecutablePath ) ) throw new Error( `Downloaded binary at ${ storkExecutablePath } is not executable.` )
|
|
|
|
|
|
// Check Stork version
|
|
// so we know our binary is working
|
|
const { stdout } = await execa( storkExecutablePath, [
|
|
'--version'
|
|
])
|
|
|
|
console.log( 'Stork Version', stdout )
|
|
if ( !stdout.includes( storkVersion ) ) throw new Error( 'Stork --version command failed.' )
|
|
|
|
return stdout
|
|
}
|
|
|
|
|
|
export async function buildIndex () {
|
|
|
|
if ( !isExecutable( storkExecutablePath ) ) throw new Error( `Binary at ${ storkExecutablePath } is not executable.` )
|
|
|
|
// Check Stork version
|
|
// so we know our binary is working
|
|
const { stdout } = await execa( storkExecutablePath, [
|
|
'build',
|
|
|
|
'--input',
|
|
storkTomlPath,
|
|
|
|
'--output',
|
|
storkIndexPath
|
|
])
|
|
|
|
console.log( 'Stork Build', stdout )
|
|
if ( !stdout.includes( storkVersion ) ) throw new Error( 'Stork --version command failed.' )
|
|
|
|
return stdout
|
|
}
|