Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/bombshell-dev/automation. GitHub Actions for the Bombshell organization
ci
Something went wrong. Try again.
1.9 kB · 60 lines
TypeScript
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061import * as crypto from 'node:crypto'import * as fs from 'node:fs'import * as os from 'node:os'
/** Based on https://github.com/actions/toolkit/blob/4e3b068ce116d28cb840033c02f912100b4592b0/packages/core/src/file-command.ts */export function setOutput(key: string, value: string) { const filePath = process.env.GITHUB_OUTPUT || '' if (filePath) { return issueFileCommand('OUTPUT', prepareKeyValueMessage(key, value)) } process.stdout.write(os.EOL)}
function issueFileCommand(command: string, message: string) { const filePath = process.env[`GITHUB_${command}`] if (!filePath) { throw new Error( `Unable to find environment variable for file command ${command}` ) } if (!fs.existsSync(filePath)) { throw new Error(`Missing file at path: ${filePath}`) }
fs.appendFileSync(filePath, `${toCommandValue(message)}${os.EOL}`, { encoding: 'utf8' })}
function prepareKeyValueMessage(key: string, value: string) { const delimiter = `gh-delimiter-${crypto.randomUUID()}` const convertedValue = toCommandValue(value)
// These should realistically never happen, but just in case someone finds a // way to exploit uuid generation let's not allow keys or values that contain // the delimiter. if (key.includes(delimiter)) { throw new Error( `Unexpected input: name should not contain the delimiter "${delimiter}"` ) }
if (convertedValue.includes(delimiter)) { throw new Error( `Unexpected input: value should not contain the delimiter "${delimiter}"` ) }
return `${key}<<${delimiter}${os.EOL}${convertedValue}${os.EOL}${delimiter}`}
function toCommandValue(input: unknown): string { if (input === null || input === undefined) { return '' } if (typeof input === 'string' || input instanceof String) { return input as string } return JSON.stringify(input)}