github.com/jfrog/frogbot@v1.1.1-0.20231221090046-821a26f50338/action/node_modules/@actions/core/README.md (about)

     1  # `@actions/core`
     2  
     3  > Core functions for setting results, logging, registering secrets and exporting variables across actions
     4  
     5  ## Usage
     6  
     7  ### Import the package
     8  
     9  ```js
    10  // javascript
    11  const core = require('@actions/core');
    12  
    13  // typescript
    14  import * as core from '@actions/core';
    15  ```
    16  
    17  #### Inputs/Outputs
    18  
    19  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`.
    20  
    21  Outputs can be set with `setOutput` which makes them available to be mapped into inputs of other actions to ensure they are decoupled.
    22  
    23  ```js
    24  const myInput = core.getInput('inputName', { required: true });
    25  const myBooleanInput = core.getBooleanInput('booleanInputName', { required: true });
    26  const myMultilineInput = core.getMultilineInput('multilineInputName', { required: true });
    27  core.setOutput('outputKey', 'outputVal');
    28  ```
    29  
    30  #### Exporting variables
    31  
    32  Since each step runs in a separate process, you can use `exportVariable` to add it to this step and future steps environment blocks.
    33  
    34  ```js
    35  core.exportVariable('envVar', 'Val');
    36  ```
    37  
    38  #### Setting a secret
    39  
    40  Setting a secret registers the secret with the runner to ensure it is masked in logs.
    41  
    42  ```js
    43  core.setSecret('myPassword');
    44  ```
    45  
    46  #### PATH Manipulation
    47  
    48  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.
    49  
    50  ```js
    51  core.addPath('/path/to/mytool');
    52  ```
    53  
    54  #### Exit codes
    55  
    56  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.
    57  
    58  ```js
    59  const core = require('@actions/core');
    60  
    61  try {
    62    // Do stuff
    63  }
    64  catch (err) {
    65    // setFailed logs the message and sets a failing exit code
    66    core.setFailed(`Action failed with error ${err}`);
    67  }
    68  ```
    69  
    70  Note that `setNeutral` is not yet implemented in actions V2 but equivalent functionality is being planned.
    71  
    72  #### Logging
    73  
    74  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).
    75  
    76  ```js
    77  const core = require('@actions/core');
    78  
    79  const myInput = core.getInput('input');
    80  try {
    81    core.debug('Inside try block');
    82    
    83    if (!myInput) {
    84      core.warning('myInput was not set');
    85    }
    86    
    87    if (core.isDebug()) {
    88      // curl -v https://github.com
    89    } else {
    90      // curl https://github.com
    91    }
    92  
    93    // Do stuff
    94    core.info('Output to the actions build log')
    95  
    96    core.notice('This is a message that will also emit an annotation')
    97  }
    98  catch (err) {
    99    core.error(`Error ${err}, action may still succeed though`);
   100  }
   101  ```
   102  
   103  This library can also wrap chunks of output in foldable groups.
   104  
   105  ```js
   106  const core = require('@actions/core')
   107  
   108  // Manually wrap output
   109  core.startGroup('Do some function')
   110  doSomeFunction()
   111  core.endGroup()
   112  
   113  // Wrap an asynchronous function call
   114  const result = await core.group('Do something async', async () => {
   115    const response = await doSomeHTTPRequest()
   116    return response
   117  })
   118  ```
   119  
   120  #### Annotations
   121  
   122  This library has 3 methods that will produce [annotations](https://docs.github.com/en/rest/reference/checks#create-a-check-run). 
   123  ```js
   124  core.error('This is a bad error. This will also fail the build.')
   125  
   126  core.warning('Something went wrong, but it\'s not bad enough to fail the build.')
   127  
   128  core.notice('Something happened that you might want to know about.')
   129  ```
   130  
   131  These will surface to the UI in the Actions page and on Pull Requests. They look something like this:
   132  
   133  ![Annotations Image](../../docs/assets/annotations.png)
   134  
   135  These annotations can also be attached to particular lines and columns of your source files to show exactly where a problem is occuring. 
   136  
   137  These options are: 
   138  ```typescript
   139  export interface AnnotationProperties {
   140    /**
   141     * A title for the annotation.
   142     */
   143    title?: string
   144  
   145    /**
   146     * The name of the file for which the annotation should be created.
   147     */
   148    file?: string
   149  
   150    /**
   151     * The start line for the annotation.
   152     */
   153    startLine?: number
   154  
   155    /**
   156     * The end line for the annotation. Defaults to `startLine` when `startLine` is provided.
   157     */
   158    endLine?: number
   159  
   160    /**
   161     * The start column for the annotation. Cannot be sent when `startLine` and `endLine` are different values.
   162     */
   163    startColumn?: number
   164  
   165    /**
   166     * The start column for the annotation. Cannot be sent when `startLine` and `endLine` are different values.
   167     * Defaults to `startColumn` when `startColumn` is provided.
   168     */
   169    endColumn?: number
   170  }
   171  ```
   172  
   173  #### Styling output
   174  
   175  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.
   176  
   177  Foreground colors:
   178  
   179  ```js
   180  // 3/4 bit
   181  core.info('\u001b[35mThis foreground will be magenta')
   182  
   183  // 8 bit
   184  core.info('\u001b[38;5;6mThis foreground will be cyan')
   185  
   186  // 24 bit
   187  core.info('\u001b[38;2;255;0;0mThis foreground will be bright red')
   188  ```
   189  
   190  Background colors:
   191  
   192  ```js
   193  // 3/4 bit
   194  core.info('\u001b[43mThis background will be yellow');
   195  
   196  // 8 bit
   197  core.info('\u001b[48;5;6mThis background will be cyan')
   198  
   199  // 24 bit
   200  core.info('\u001b[48;2;255;0;0mThis background will be bright red')
   201  ```
   202  
   203  Special styles:
   204  
   205  ```js
   206  core.info('\u001b[1mBold text')
   207  core.info('\u001b[3mItalic text')
   208  core.info('\u001b[4mUnderlined text')
   209  ```
   210  
   211  ANSI escape codes can be combined with one another:
   212  
   213  ```js
   214  core.info('\u001b[31;46mRed foreground with a cyan background and \u001b[1mbold text at the end');
   215  ```
   216  
   217  > Note: Escape codes reset at the start of each line
   218  
   219  ```js
   220  core.info('\u001b[35mThis foreground will be magenta')
   221  core.info('This foreground will reset to the default')
   222  ```
   223  
   224  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).
   225  
   226  ```js
   227  const style = require('ansi-styles');
   228  core.info(style.color.ansi16m.hex('#abcdef') + 'Hello world!')
   229  ```
   230  
   231  #### Action state
   232  
   233  You can use this library to save state and get state for sharing information between a given wrapper action:
   234  
   235  **action.yml**:
   236  
   237  ```yaml
   238  name: 'Wrapper action sample'
   239  inputs:
   240    name:
   241      default: 'GitHub'
   242  runs:
   243    using: 'node12'
   244    main: 'main.js'
   245    post: 'cleanup.js'
   246  ```
   247  
   248  In action's `main.js`:
   249  
   250  ```js
   251  const core = require('@actions/core');
   252  
   253  core.saveState("pidToKill", 12345);
   254  ```
   255  
   256  In action's `cleanup.js`:
   257  
   258  ```js
   259  const core = require('@actions/core');
   260  
   261  var pid = core.getState("pidToKill");
   262  
   263  process.kill(pid);
   264  ```
   265  
   266  #### OIDC Token
   267  
   268  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.
   269  
   270  **Method Name**: getIDToken()
   271  
   272  **Inputs**
   273  
   274  audience : optional
   275  
   276  **Outputs**
   277  
   278  A [JWT](https://jwt.io/) ID Token
   279  
   280  In action's `main.ts`:
   281  ```js
   282  const core = require('@actions/core');
   283  async function getIDTokenAction(): Promise<void> {
   284    
   285     const audience = core.getInput('audience', {required: false})
   286     
   287     const id_token1 = await core.getIDToken()            // ID Token with default audience
   288     const id_token2 = await core.getIDToken(audience)    // ID token with custom audience
   289     
   290     // this id_token can be used to get access token from third party cloud providers
   291  }
   292  getIDTokenAction()
   293  ```
   294  
   295  In action's `actions.yml`:
   296  
   297  ```yaml
   298  name: 'GetIDToken'
   299  description: 'Get ID token from Github OIDC provider'
   300  inputs:
   301    audience:  
   302      description: 'Audience for which the ID token is intended for'
   303      required: false
   304  outputs:
   305    id_token1: 
   306      description: 'ID token obtained from OIDC provider'
   307    id_token2: 
   308      description: 'ID token obtained from OIDC provider'
   309  runs:
   310    using: 'node12'
   311    main: 'dist/index.js'
   312  ```
   313  
   314  #### Filesystem path helpers
   315  
   316  You can use these methods to manipulate file paths across operating systems.
   317  
   318  The `toPosixPath` function converts input paths to Posix-style (Linux) paths.
   319  The `toWin32Path` function converts input paths to Windows-style paths. These
   320  functions work independently of the underlying runner operating system.
   321  
   322  ```js
   323  toPosixPath('\\foo\\bar') // => /foo/bar
   324  toWin32Path('/foo/bar') // => \foo\bar
   325  ```
   326  
   327  The `toPlatformPath` function converts input paths to the expected value on the runner's operating system.
   328  
   329  ```js
   330  // On a Windows runner.
   331  toPlatformPath('/foo/bar') // => \foo\bar
   332  
   333  // On a Linux runner.
   334  toPlatformPath('\\foo\\bar') // => /foo/bar
   335  ```