UNPKG

@actions/core

Version:
317 lines 10.9 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { issue, issueCommand } from './command.js'; import { issueFileCommand, prepareKeyValueMessage } from './file-command.js'; import { toCommandProperties, toCommandValue } from './utils.js'; import * as os from 'os'; import * as path from 'path'; import { OidcClient } from './oidc-utils.js'; /** * The code to exit an action */ export var ExitCode; (function (ExitCode) { /** * A code indicating that the action was successful */ ExitCode[ExitCode["Success"] = 0] = "Success"; /** * A code indicating that the action was a failure */ ExitCode[ExitCode["Failure"] = 1] = "Failure"; })(ExitCode || (ExitCode = {})); //----------------------------------------------------------------------- // Variables //----------------------------------------------------------------------- /** * Sets env variable for this action and future actions in the job * @param name the name of the variable to set * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export function exportVariable(name, val) { const convertedVal = toCommandValue(val); process.env[name] = convertedVal; const filePath = process.env['GITHUB_ENV'] || ''; if (filePath) { return issueFileCommand('ENV', prepareKeyValueMessage(name, val)); } issueCommand('set-env', { name }, convertedVal); } /** * Registers a secret which will get masked from logs * * @param secret - Value of the secret to be masked * @remarks * This function instructs the Actions runner to mask the specified value in any * logs produced during the workflow run. Once registered, the secret value will * be replaced with asterisks (***) whenever it appears in console output, logs, * or error messages. * * This is useful for protecting sensitive information such as: * - API keys * - Access tokens * - Authentication credentials * - URL parameters containing signatures (SAS tokens) * * Note that masking only affects future logs; any previous appearances of the * secret in logs before calling this function will remain unmasked. * * @example * ```typescript * // Register an API token as a secret * const apiToken = "abc123xyz456"; * setSecret(apiToken); * * // Now any logs containing this value will show *** instead * console.log(`Using token: ${apiToken}`); // Outputs: "Using token: ***" * ``` */ export function setSecret(secret) { issueCommand('add-mask', {}, secret); } /** * Prepends inputPath to the PATH (for this action and future actions) * @param inputPath */ export function addPath(inputPath) { const filePath = process.env['GITHUB_PATH'] || ''; if (filePath) { issueFileCommand('PATH', inputPath); } else { issueCommand('add-path', {}, inputPath); } process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; } /** * Gets the value of an input. * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed. * Returns an empty string if the value is not defined. * * @param name name of the input to get * @param options optional. See InputOptions. * @returns string */ export function getInput(name, options) { const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || ''; if (options && options.required && !val) { throw new Error(`Input required and not supplied: ${name}`); } if (options && options.trimWhitespace === false) { return val; } return val.trim(); } /** * Gets the values of an multiline input. Each value is also trimmed. * * @param name name of the input to get * @param options optional. See InputOptions. * @returns string[] * */ export function getMultilineInput(name, options) { const inputs = getInput(name, options) .split('\n') .filter(x => x !== ''); if (options && options.trimWhitespace === false) { return inputs; } return inputs.map(input => input.trim()); } /** * Gets the input value of the boolean type in the YAML 1.2 "core schema" specification. * Support boolean input list: `true | True | TRUE | false | False | FALSE` . * The return value is also in boolean type. * ref: https://yaml.org/spec/1.2/spec.html#id2804923 * * @param name name of the input to get * @param options optional. See InputOptions. * @returns boolean */ export function getBooleanInput(name, options) { const trueValue = ['true', 'True', 'TRUE']; const falseValue = ['false', 'False', 'FALSE']; const val = getInput(name, options); if (trueValue.includes(val)) return true; if (falseValue.includes(val)) return false; throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` + `Support boolean input list: \`true | True | TRUE | false | False | FALSE\``); } /** * Sets the value of an output. * * @param name name of the output to set * @param value value to store. Non-string values will be converted to a string via JSON.stringify */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export function setOutput(name, value) { const filePath = process.env['GITHUB_OUTPUT'] || ''; if (filePath) { return issueFileCommand('OUTPUT', prepareKeyValueMessage(name, value)); } process.stdout.write(os.EOL); issueCommand('set-output', { name }, toCommandValue(value)); } /** * Enables or disables the echoing of commands into stdout for the rest of the step. * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set. * */ export function setCommandEcho(enabled) { issue('echo', enabled ? 'on' : 'off'); } //----------------------------------------------------------------------- // Results //----------------------------------------------------------------------- /** * Sets the action status to failed. * When the action exits it will be with an exit code of 1 * @param message add error issue message */ export function setFailed(message) { process.exitCode = ExitCode.Failure; error(message); } //----------------------------------------------------------------------- // Logging Commands //----------------------------------------------------------------------- /** * Gets whether Actions Step Debug is on or not */ export function isDebug() { return process.env['RUNNER_DEBUG'] === '1'; } /** * Writes debug message to user log * @param message debug message */ export function debug(message) { issueCommand('debug', {}, message); } /** * Adds an error issue * @param message error issue message. Errors will be converted to string via toString() * @param properties optional properties to add to the annotation. */ export function error(message, properties = {}) { issueCommand('error', toCommandProperties(properties), message instanceof Error ? message.toString() : message); } /** * Adds a warning issue * @param message warning issue message. Errors will be converted to string via toString() * @param properties optional properties to add to the annotation. */ export function warning(message, properties = {}) { issueCommand('warning', toCommandProperties(properties), message instanceof Error ? message.toString() : message); } /** * Adds a notice issue * @param message notice issue message. Errors will be converted to string via toString() * @param properties optional properties to add to the annotation. */ export function notice(message, properties = {}) { issueCommand('notice', toCommandProperties(properties), message instanceof Error ? message.toString() : message); } /** * Writes info to log with console.log. * @param message info message */ export function info(message) { process.stdout.write(message + os.EOL); } /** * Begin an output group. * * Output until the next `groupEnd` will be foldable in this group * * @param name The name of the output group */ export function startGroup(name) { issue('group', name); } /** * End an output group. */ export function endGroup() { issue('endgroup'); } /** * Wrap an asynchronous function call in a group. * * Returns the same type as the function itself. * * @param name The name of the group * @param fn The function to wrap in the group */ export function group(name, fn) { return __awaiter(this, void 0, void 0, function* () { startGroup(name); let result; try { result = yield fn(); } finally { endGroup(); } return result; }); } //----------------------------------------------------------------------- // Wrapper action state //----------------------------------------------------------------------- /** * Saves state for current action, the state can only be retrieved by this action's post job execution. * * @param name name of the state to store * @param value value to store. Non-string values will be converted to a string via JSON.stringify */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export function saveState(name, value) { const filePath = process.env['GITHUB_STATE'] || ''; if (filePath) { return issueFileCommand('STATE', prepareKeyValueMessage(name, value)); } issueCommand('save-state', { name }, toCommandValue(value)); } /** * Gets the value of an state set by this action's main execution. * * @param name name of the state to get * @returns string */ export function getState(name) { return process.env[`STATE_${name}`] || ''; } export function getIDToken(aud) { return __awaiter(this, void 0, void 0, function* () { return yield OidcClient.getIDToken(aud); }); } /** * Summary exports */ export { summary } from './summary.js'; /** * @deprecated use core.summary */ export { markdownSummary } from './summary.js'; /** * Path exports */ export { toPosixPath, toWin32Path, toPlatformPath } from './path-utils.js'; /** * Platform utilities exports */ export * as platform from './platform.js'; //# sourceMappingURL=core.js.map