@actions/core
Advanced tools
Comparing version 1.2.6 to 1.9.1
@@ -1,2 +0,2 @@ | ||
interface CommandProperties { | ||
export interface CommandProperties { | ||
[key: string]: any; | ||
@@ -16,2 +16,1 @@ } | ||
export declare function issue(name: string, message?: string): void; | ||
export {}; |
"use strict"; | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||
}) : (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
o[k2] = m[k]; | ||
})); | ||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
}) : function(o, v) { | ||
o["default"] = v; | ||
}); | ||
var __importStar = (this && this.__importStar) || function (mod) { | ||
if (mod && mod.__esModule) return mod; | ||
var result = {}; | ||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||
result["default"] = mod; | ||
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
__setModuleDefault(result, mod); | ||
return result; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.issue = exports.issueCommand = void 0; | ||
const os = __importStar(require("os")); | ||
@@ -11,0 +24,0 @@ const utils_1 = require("./utils"); |
@@ -7,2 +7,4 @@ /** | ||
required?: boolean; | ||
/** Optional. Whether leading/trailing whitespace will be trimmed for the input. Defaults to true */ | ||
trimWhitespace?: boolean; | ||
} | ||
@@ -23,2 +25,33 @@ /** | ||
/** | ||
* Optional properties that can be sent with annotatation commands (notice, error, and warning) | ||
* See: https://docs.github.com/en/rest/reference/checks#create-a-check-run for more information about annotations. | ||
*/ | ||
export interface AnnotationProperties { | ||
/** | ||
* A title for the annotation. | ||
*/ | ||
title?: string; | ||
/** | ||
* The path of the file for which the annotation should be created. | ||
*/ | ||
file?: string; | ||
/** | ||
* The start line for the annotation. | ||
*/ | ||
startLine?: number; | ||
/** | ||
* The end line for the annotation. Defaults to `startLine` when `startLine` is provided. | ||
*/ | ||
endLine?: number; | ||
/** | ||
* The start column for the annotation. Cannot be sent when `startLine` and `endLine` are different values. | ||
*/ | ||
startColumn?: number; | ||
/** | ||
* The start column for the annotation. Cannot be sent when `startLine` and `endLine` are different values. | ||
* Defaults to `startColumn` when `startColumn` is provided. | ||
*/ | ||
endColumn?: number; | ||
} | ||
/** | ||
* Sets env variable for this action and future actions in the job | ||
@@ -40,3 +73,5 @@ * @param name the name of the variable to set | ||
/** | ||
* Gets the value of an input. The value is also trimmed. | ||
* 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. | ||
* | ||
@@ -49,2 +84,22 @@ * @param name name of the input to get | ||
/** | ||
* 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 declare function getMultilineInput(name: string, options?: InputOptions): string[]; | ||
/** | ||
* 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 declare function getBooleanInput(name: string, options?: InputOptions): boolean; | ||
/** | ||
* Sets the value of an output. | ||
@@ -80,10 +135,18 @@ * | ||
* @param message error issue message. Errors will be converted to string via toString() | ||
* @param properties optional properties to add to the annotation. | ||
*/ | ||
export declare function error(message: string | Error): void; | ||
export declare function error(message: string | Error, properties?: AnnotationProperties): void; | ||
/** | ||
* Adds an warning issue | ||
* 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 declare function warning(message: string | Error): void; | ||
export declare function warning(message: string | Error, properties?: AnnotationProperties): void; | ||
/** | ||
* 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 declare function notice(message: string | Error, properties?: AnnotationProperties): void; | ||
/** | ||
* Writes info to log with console.log. | ||
@@ -128,1 +191,14 @@ * @param message info message | ||
export declare function getState(name: string): string; | ||
export declare function getIDToken(aud?: string): Promise<string>; | ||
/** | ||
* Summary exports | ||
*/ | ||
export { summary } from './summary'; | ||
/** | ||
* @deprecated use core.summary | ||
*/ | ||
export { markdownSummary } from './summary'; | ||
/** | ||
* Path exports | ||
*/ | ||
export { toPosixPath, toWin32Path, toPlatformPath } from './path-utils'; |
127
lib/core.js
"use strict"; | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||
}) : (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
o[k2] = m[k]; | ||
})); | ||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
}) : function(o, v) { | ||
o["default"] = v; | ||
}); | ||
var __importStar = (this && this.__importStar) || function (mod) { | ||
if (mod && mod.__esModule) return mod; | ||
var result = {}; | ||
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
__setModuleDefault(result, mod); | ||
return result; | ||
}; | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
@@ -11,10 +30,4 @@ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
}; | ||
var __importStar = (this && this.__importStar) || function (mod) { | ||
if (mod && mod.__esModule) return mod; | ||
var result = {}; | ||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||
result["default"] = mod; | ||
return result; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.getIDToken = exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.notice = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0; | ||
const command_1 = require("./command"); | ||
@@ -25,2 +38,4 @@ const file_command_1 = require("./file-command"); | ||
const path = __importStar(require("path")); | ||
const uuid_1 = require("uuid"); | ||
const oidc_utils_1 = require("./oidc-utils"); | ||
/** | ||
@@ -54,3 +69,10 @@ * The code to exit an action | ||
if (filePath) { | ||
const delimiter = '_GitHubActionsFileCommandDelimeter_'; | ||
const delimiter = `ghadelimiter_${uuid_1.v4()}`; | ||
// 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 (name.includes(delimiter)) { | ||
throw new Error(`Unexpected input: name should not contain the delimiter "${delimiter}"`); | ||
} | ||
if (convertedVal.includes(delimiter)) { | ||
throw new Error(`Unexpected input: value should not contain the delimiter "${delimiter}"`); | ||
} | ||
const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`; | ||
@@ -88,3 +110,5 @@ file_command_1.issueCommand('ENV', commandValue); | ||
/** | ||
* Gets the value of an input. The value is also trimmed. | ||
* 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. | ||
* | ||
@@ -100,2 +124,5 @@ * @param name name of the input to get | ||
} | ||
if (options && options.trimWhitespace === false) { | ||
return val; | ||
} | ||
return val.trim(); | ||
@@ -105,2 +132,39 @@ } | ||
/** | ||
* 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[] | ||
* | ||
*/ | ||
function getMultilineInput(name, options) { | ||
const inputs = getInput(name, options) | ||
.split('\n') | ||
.filter(x => x !== ''); | ||
return inputs; | ||
} | ||
exports.getMultilineInput = getMultilineInput; | ||
/** | ||
* 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 | ||
*/ | ||
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\``); | ||
} | ||
exports.getBooleanInput = getBooleanInput; | ||
/** | ||
* Sets the value of an output. | ||
@@ -113,2 +177,3 @@ * | ||
function setOutput(name, value) { | ||
process.stdout.write(os.EOL); | ||
command_1.issueCommand('set-output', { name }, value); | ||
@@ -160,16 +225,27 @@ } | ||
* @param message error issue message. Errors will be converted to string via toString() | ||
* @param properties optional properties to add to the annotation. | ||
*/ | ||
function error(message) { | ||
command_1.issue('error', message instanceof Error ? message.toString() : message); | ||
function error(message, properties = {}) { | ||
command_1.issueCommand('error', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); | ||
} | ||
exports.error = error; | ||
/** | ||
* Adds an warning issue | ||
* 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. | ||
*/ | ||
function warning(message) { | ||
command_1.issue('warning', message instanceof Error ? message.toString() : message); | ||
function warning(message, properties = {}) { | ||
command_1.issueCommand('warning', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); | ||
} | ||
exports.warning = warning; | ||
/** | ||
* 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. | ||
*/ | ||
function notice(message, properties = {}) { | ||
command_1.issueCommand('notice', utils_1.toCommandProperties(properties), message instanceof Error ? message.toString() : message); | ||
} | ||
exports.notice = notice; | ||
/** | ||
* Writes info to log with console.log. | ||
@@ -246,2 +322,25 @@ * @param message info message | ||
exports.getState = getState; | ||
function getIDToken(aud) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
return yield oidc_utils_1.OidcClient.getIDToken(aud); | ||
}); | ||
} | ||
exports.getIDToken = getIDToken; | ||
/** | ||
* Summary exports | ||
*/ | ||
var summary_1 = require("./summary"); | ||
Object.defineProperty(exports, "summary", { enumerable: true, get: function () { return summary_1.summary; } }); | ||
/** | ||
* @deprecated use core.summary | ||
*/ | ||
var summary_2 = require("./summary"); | ||
Object.defineProperty(exports, "markdownSummary", { enumerable: true, get: function () { return summary_2.markdownSummary; } }); | ||
/** | ||
* Path exports | ||
*/ | ||
var path_utils_1 = require("./path-utils"); | ||
Object.defineProperty(exports, "toPosixPath", { enumerable: true, get: function () { return path_utils_1.toPosixPath; } }); | ||
Object.defineProperty(exports, "toWin32Path", { enumerable: true, get: function () { return path_utils_1.toWin32Path; } }); | ||
Object.defineProperty(exports, "toPlatformPath", { enumerable: true, get: function () { return path_utils_1.toPlatformPath; } }); | ||
//# sourceMappingURL=core.js.map |
"use strict"; | ||
// For internal use, subject to change. | ||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); | ||
}) : (function(o, m, k, k2) { | ||
if (k2 === undefined) k2 = k; | ||
o[k2] = m[k]; | ||
})); | ||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | ||
Object.defineProperty(o, "default", { enumerable: true, value: v }); | ||
}) : function(o, v) { | ||
o["default"] = v; | ||
}); | ||
var __importStar = (this && this.__importStar) || function (mod) { | ||
if (mod && mod.__esModule) return mod; | ||
var result = {}; | ||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||
result["default"] = mod; | ||
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | ||
__setModuleDefault(result, mod); | ||
return result; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.issueCommand = void 0; | ||
// We use any as a valid input type | ||
@@ -12,0 +25,0 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ |
@@ -0,1 +1,3 @@ | ||
import { AnnotationProperties } from './core'; | ||
import { CommandProperties } from './command'; | ||
/** | ||
@@ -6,1 +8,8 @@ * Sanitizes an input into a string so it can be passed into issueCommand safely | ||
export declare function toCommandValue(input: any): string; | ||
/** | ||
* | ||
* @param annotationProperties | ||
* @returns The command properties to send with the actual annotation command | ||
* See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646 | ||
*/ | ||
export declare function toCommandProperties(annotationProperties: AnnotationProperties): CommandProperties; |
@@ -5,2 +5,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.toCommandProperties = exports.toCommandValue = void 0; | ||
/** | ||
@@ -20,2 +21,22 @@ * Sanitizes an input into a string so it can be passed into issueCommand safely | ||
exports.toCommandValue = toCommandValue; | ||
/** | ||
* | ||
* @param annotationProperties | ||
* @returns The command properties to send with the actual annotation command | ||
* See IssueCommandProperties: https://github.com/actions/runner/blob/main/src/Runner.Worker/ActionCommandManager.cs#L646 | ||
*/ | ||
function toCommandProperties(annotationProperties) { | ||
if (!Object.keys(annotationProperties).length) { | ||
return {}; | ||
} | ||
return { | ||
title: annotationProperties.title, | ||
file: annotationProperties.file, | ||
line: annotationProperties.startLine, | ||
endLine: annotationProperties.endLine, | ||
col: annotationProperties.startColumn, | ||
endColumn: annotationProperties.endColumn | ||
}; | ||
} | ||
exports.toCommandProperties = toCommandProperties; | ||
//# sourceMappingURL=utils.js.map |
{ | ||
"name": "@actions/core", | ||
"version": "1.2.6", | ||
"version": "1.9.1", | ||
"description": "Actions core lib", | ||
@@ -38,5 +38,10 @@ "keywords": [ | ||
}, | ||
"dependencies": { | ||
"@actions/http-client": "^2.0.1", | ||
"uuid": "^8.3.2" | ||
}, | ||
"devDependencies": { | ||
"@types/node": "^12.0.2" | ||
"@types/node": "^12.0.2", | ||
"@types/uuid": "^8.3.4" | ||
} | ||
} |
200
README.md
@@ -19,7 +19,10 @@ # `@actions/core` | ||
Action inputs can be read with `getInput`. Outputs can be set with `setOutput` which makes them available to be mapped into inputs of other actions to ensure they are decoupled. | ||
Action inputs can be read with `getInput` which returns a `string` or `getBooleanInput` which parses a boolean based on the [yaml 1.2 specification](https://yaml.org/spec/1.2/spec.html#id2804923). If `required` set to be false, the input should have a default value in `action.yml`. | ||
Outputs can be set with `setOutput` which makes them available to be mapped into inputs of other actions to ensure they are decoupled. | ||
```js | ||
const myInput = core.getInput('inputName', { required: true }); | ||
const myBooleanInput = core.getBooleanInput('booleanInputName', { required: true }); | ||
const myMultilineInput = core.getMultilineInput('multilineInputName', { required: true }); | ||
core.setOutput('outputKey', 'outputVal'); | ||
@@ -66,7 +69,6 @@ ``` | ||
} | ||
``` | ||
Note that `setNeutral` is not yet implemented in actions V2 but equivalent functionality is being planned. | ||
``` | ||
#### Logging | ||
@@ -95,2 +97,4 @@ | ||
core.info('Output to the actions build log') | ||
core.notice('This is a message that will also emit an annotation') | ||
} | ||
@@ -119,7 +123,119 @@ catch (err) { | ||
#### Annotations | ||
This library has 3 methods that will produce [annotations](https://docs.github.com/en/rest/reference/checks#create-a-check-run). | ||
```js | ||
core.error('This is a bad error. This will also fail the build.') | ||
core.warning('Something went wrong, but it\'s not bad enough to fail the build.') | ||
core.notice('Something happened that you might want to know about.') | ||
``` | ||
These will surface to the UI in the Actions page and on Pull Requests. They look something like this: | ||
![Annotations Image](../../docs/assets/annotations.png) | ||
These annotations can also be attached to particular lines and columns of your source files to show exactly where a problem is occuring. | ||
These options are: | ||
```typescript | ||
export interface AnnotationProperties { | ||
/** | ||
* A title for the annotation. | ||
*/ | ||
title?: string | ||
/** | ||
* The name of the file for which the annotation should be created. | ||
*/ | ||
file?: string | ||
/** | ||
* The start line for the annotation. | ||
*/ | ||
startLine?: number | ||
/** | ||
* The end line for the annotation. Defaults to `startLine` when `startLine` is provided. | ||
*/ | ||
endLine?: number | ||
/** | ||
* The start column for the annotation. Cannot be sent when `startLine` and `endLine` are different values. | ||
*/ | ||
startColumn?: number | ||
/** | ||
* The start column for the annotation. Cannot be sent when `startLine` and `endLine` are different values. | ||
* Defaults to `startColumn` when `startColumn` is provided. | ||
*/ | ||
endColumn?: number | ||
} | ||
``` | ||
#### Styling output | ||
Colored output is supported in the Action logs via standard [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code). 3/4 bit, 8 bit and 24 bit colors are all supported. | ||
Foreground colors: | ||
```js | ||
// 3/4 bit | ||
core.info('\u001b[35mThis foreground will be magenta') | ||
// 8 bit | ||
core.info('\u001b[38;5;6mThis foreground will be cyan') | ||
// 24 bit | ||
core.info('\u001b[38;2;255;0;0mThis foreground will be bright red') | ||
``` | ||
Background colors: | ||
```js | ||
// 3/4 bit | ||
core.info('\u001b[43mThis background will be yellow'); | ||
// 8 bit | ||
core.info('\u001b[48;5;6mThis background will be cyan') | ||
// 24 bit | ||
core.info('\u001b[48;2;255;0;0mThis background will be bright red') | ||
``` | ||
Special styles: | ||
```js | ||
core.info('\u001b[1mBold text') | ||
core.info('\u001b[3mItalic text') | ||
core.info('\u001b[4mUnderlined text') | ||
``` | ||
ANSI escape codes can be combined with one another: | ||
```js | ||
core.info('\u001b[31;46mRed foreground with a cyan background and \u001b[1mbold text at the end'); | ||
``` | ||
> Note: Escape codes reset at the start of each line | ||
```js | ||
core.info('\u001b[35mThis foreground will be magenta') | ||
core.info('This foreground will reset to the default') | ||
``` | ||
Manually typing escape codes can be a little difficult, but you can use third party modules such as [ansi-styles](https://github.com/chalk/ansi-styles). | ||
```js | ||
const style = require('ansi-styles'); | ||
core.info(style.color.ansi16m.hex('#abcdef') + 'Hello world!') | ||
``` | ||
#### Action state | ||
You can use this library to save state and get state for sharing information between a given wrapper action: | ||
You can use this library to save state and get state for sharing information between a given wrapper action: | ||
**action.yml** | ||
**action.yml**: | ||
```yaml | ||
@@ -145,2 +261,3 @@ name: 'Wrapper action sample' | ||
In action's `cleanup.js`: | ||
```js | ||
@@ -153,1 +270,72 @@ const core = require('@actions/core'); | ||
``` | ||
#### OIDC Token | ||
You can use these methods to interact with the GitHub OIDC provider and get a JWT ID token which would help to get access token from third party cloud providers. | ||
**Method Name**: getIDToken() | ||
**Inputs** | ||
audience : optional | ||
**Outputs** | ||
A [JWT](https://jwt.io/) ID Token | ||
In action's `main.ts`: | ||
```js | ||
const core = require('@actions/core'); | ||
async function getIDTokenAction(): Promise<void> { | ||
const audience = core.getInput('audience', {required: false}) | ||
const id_token1 = await core.getIDToken() // ID Token with default audience | ||
const id_token2 = await core.getIDToken(audience) // ID token with custom audience | ||
// this id_token can be used to get access token from third party cloud providers | ||
} | ||
getIDTokenAction() | ||
``` | ||
In action's `actions.yml`: | ||
```yaml | ||
name: 'GetIDToken' | ||
description: 'Get ID token from Github OIDC provider' | ||
inputs: | ||
audience: | ||
description: 'Audience for which the ID token is intended for' | ||
required: false | ||
outputs: | ||
id_token1: | ||
description: 'ID token obtained from OIDC provider' | ||
id_token2: | ||
description: 'ID token obtained from OIDC provider' | ||
runs: | ||
using: 'node12' | ||
main: 'dist/index.js' | ||
``` | ||
#### Filesystem path helpers | ||
You can use these methods to manipulate file paths across operating systems. | ||
The `toPosixPath` function converts input paths to Posix-style (Linux) paths. | ||
The `toWin32Path` function converts input paths to Windows-style paths. These | ||
functions work independently of the underlying runner operating system. | ||
```js | ||
toPosixPath('\\foo\\bar') // => /foo/bar | ||
toWin32Path('/foo/bar') // => \foo\bar | ||
``` | ||
The `toPlatformPath` function converts input paths to the expected value on the runner's operating system. | ||
```js | ||
// On a Windows runner. | ||
toPlatformPath('/foo/bar') // => \foo\bar | ||
// On a Linux runner. | ||
toPlatformPath('\\foo\\bar') // => /foo/bar | ||
``` |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 3 instances in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
76612
24
1385
336
2
2
14
+ Added@actions/http-client@^2.0.1
+ Addeduuid@^8.3.2
+ Added@actions/http-client@2.2.3(transitive)
+ Added@fastify/busboy@2.1.1(transitive)
+ Addedtunnel@0.0.6(transitive)
+ Addedundici@5.28.4(transitive)
+ Addeduuid@8.3.2(transitive)