2019-05-16 16:40:21 -04:00
# `@actions/core`
2019-05-16 23:36:45 -04:00
> Core functions for setting results, logging, registering secrets and exporting variables across actions
2019-05-16 16:40:21 -04:00
## Usage
2019-10-01 13:53:09 -04:00
### Import the package
2019-08-04 09:00:04 -04:00
2019-08-20 22:15:05 -07:00
``` js
2019-10-01 13:53:09 -04:00
// javascript
2019-08-04 09:00:04 -04:00
const core = require ( '@actions/core' ) ;
2019-10-01 13:53:09 -04:00
// typescript
import * as core from '@actions/core' ;
```
2019-08-04 09:00:04 -04:00
2019-10-01 13:53:09 -04:00
#### Inputs/Outputs
2021-04-28 15:32:25 -05:00
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.
2019-10-01 13:53:09 -04:00
``` js
const myInput = core . getInput ( 'inputName' , { required : true } ) ;
2021-04-28 15:32:25 -05:00
const myBooleanInput = core . getBooleanInput ( 'booleanInputName' , { required : true } ) ;
2019-08-04 09:00:04 -04:00
core . setOutput ( 'outputKey' , 'outputVal' ) ;
```
2019-08-24 09:17:35 -04:00
#### Exporting variables
2019-08-04 09:00:04 -04:00
2019-10-01 13:53:09 -04:00
Since each step runs in a separate process, you can use `exportVariable` to add it to this step and future steps environment blocks.
2019-08-04 09:00:04 -04:00
2019-08-20 22:15:05 -07:00
``` js
2019-10-01 13:53:09 -04:00
core . exportVariable ( 'envVar' , 'Val' ) ;
```
2019-08-04 09:00:04 -04:00
2019-10-01 17:13:05 -04:00
#### Setting a secret
Setting a secret registers the secret with the runner to ensure it is masked in logs.
2019-08-04 09:00:04 -04:00
2019-10-01 13:53:09 -04:00
``` js
2019-10-01 17:13:05 -04:00
core . setSecret ( 'myPassword' ) ;
2019-08-04 09:00:04 -04:00
```
#### PATH Manipulation
2019-10-01 13:53:09 -04:00
To make a tool's path available in the path for the remainder of the job (without altering the machine or containers state), use `addPath` . The runner will prepend the path given to the jobs PATH.
2019-08-04 09:00:04 -04:00
2019-08-21 01:16:47 -04:00
``` js
2019-10-01 13:53:09 -04:00
core . addPath ( '/path/to/mytool' ) ;
2019-08-04 09:00:04 -04:00
```
#### Exit codes
2019-10-01 13:53:09 -04:00
You should use this library to set the failing exit code for your action. If status is not set and the script runs to completion, that will lead to a success.
2019-08-04 09:00:04 -04:00
2019-08-20 22:15:05 -07:00
``` js
2019-08-04 09:00:04 -04:00
const core = require ( '@actions/core' ) ;
try {
2019-08-06 09:12:30 -04:00
// Do stuff
2019-08-04 09:00:04 -04:00
}
catch ( err ) {
// setFailed logs the message and sets a failing exit code
core . setFailed ( ` Action failed with error ${ err } ` ) ;
}
2021-04-12 14:50:56 +01:00
```
2019-08-04 09:00:04 -04:00
2019-10-01 13:53:09 -04:00
Note that `setNeutral` is not yet implemented in actions V2 but equivalent functionality is being planned.
2019-08-04 09:00:04 -04:00
#### Logging
2019-08-12 17:00:55 -04:00
Finally, this library provides some utilities for logging. Note that debug logging is hidden from the logs by default. This behavior can be toggled by enabling the [Step Debug Logs ](../../docs/action-debugging.md#step-debug-logs ).
2019-08-04 09:00:04 -04:00
2019-08-20 22:15:05 -07:00
``` js
2019-08-04 09:00:04 -04:00
const core = require ( '@actions/core' ) ;
const myInput = core . getInput ( 'input' ) ;
try {
core . debug ( 'Inside try block' ) ;
if ( ! myInput ) {
2019-08-21 15:31:44 -04:00
core . warning ( 'myInput was not set' ) ;
2019-08-04 09:00:04 -04:00
}
2020-03-02 07:45:27 -05:00
if ( core . isDebug ( ) ) {
// curl -v https://github.com
} else {
// curl https://github.com
}
2019-08-04 09:00:04 -04:00
// Do stuff
2020-06-24 10:48:13 -04:00
core . info ( 'Output to the actions build log' )
2019-08-04 09:00:04 -04:00
}
catch ( err ) {
2019-08-13 17:13:12 -05:00
core . error ( ` Error ${ err } , action may still succeed though ` ) ;
2019-08-04 09:00:04 -04:00
}
```
2019-08-28 22:35:27 -04:00
This library can also wrap chunks of output in foldable groups.
``` js
const core = require ( '@actions/core' )
// Manually wrap output
2019-08-28 22:36:17 -04:00
core . startGroup ( 'Do some function' )
2019-08-28 22:35:27 -04:00
doSomeFunction ( )
2019-08-28 22:36:17 -04:00
core . endGroup ( )
2019-08-28 22:35:27 -04:00
// Wrap an asynchronous function call
const result = await core . group ( 'Do something async' , async ( ) => {
const response = await doSomeHTTPRequest ( )
return response
} )
2019-10-03 00:41:30 -04:00
```
2020-09-24 10:38:19 -04:00
#### 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:
2021-04-28 15:32:25 -05:00
2020-09-24 10:38:19 -04:00
``` 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:
2021-04-28 15:32:25 -05:00
2020-09-24 10:38:19 -04:00
``` 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
2021-04-28 15:32:25 -05:00
2020-09-24 10:38:19 -04:00
``` 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!' )
```
2019-10-03 00:41:30 -04:00
#### Action state
2021-04-28 15:32:25 -05:00
You can use this library to save state and get state for sharing information between a given wrapper action:
**action.yml ** :
2019-10-03 00:41:30 -04:00
``` yaml
name : 'Wrapper action sample'
inputs :
name :
default : 'GitHub'
runs :
using : 'node12'
main : 'main.js'
post : 'cleanup.js'
```
In action's `main.js` :
``` js
const core = require ( '@actions/core' ) ;
core . saveState ( "pidToKill" , 12345 ) ;
```
In action's `cleanup.js` :
2021-04-28 15:32:25 -05:00
2019-10-03 00:41:30 -04:00
``` js
const core = require ( '@actions/core' ) ;
var pid = core . getState ( "pidToKill" ) ;
2019-10-03 14:48:21 -04:00
process . kill ( pid ) ;
2020-06-24 10:48:13 -04:00
```