2019-09-09 15:58:49 +00:00
# :: Commands
The [core toolkit package ](https://github.com/actions/toolkit/tree/master/packages/core ) offers a number of convenience functions for
setting results, logging, registering secrets and exporting variables across actions. Sometimes, however, its useful to be able to do
these things in a script or other tool.
2019-10-01 16:56:09 +00:00
To allow this, we provide a special `::` syntax which, if logged to `stdout` on a new line, will allow the runner to perform special behavior on
2019-09-09 15:58:49 +00:00
your commands. The following commands are all supported:
### Set an environment variable
2019-09-25 01:08:02 +00:00
To set an environment variable for future out of process steps, use `::set-env` :
2019-09-09 15:58:49 +00:00
```sh
2019-10-23 15:06:34 +00:00
echo "::set-env name=FOO::BAR"
2019-09-09 15:58:49 +00:00
```
Running `$FOO` in a future step will now return `BAR`
2019-09-25 01:08:02 +00:00
This is wrapped by the core exportVariable method which sets for future steps but also updates the variable for this step
```javascript
export function exportVariable(name: string, val: string): void {}
```
2019-09-09 15:58:49 +00:00
### PATH Manipulation
To prepend a string to PATH, use `::addPath` :
```sh
2019-10-23 15:06:34 +00:00
echo "::add-path::BAR"
2019-09-09 15:58:49 +00:00
```
Running `$PATH` in a future step will now return `BAR:{Previous Path}` ;
2019-09-25 01:08:02 +00:00
This is wrapped by the core addPath method:
```javascript
export function addPath(inputPath: string): void {}
```
2019-09-09 15:58:49 +00:00
### Set outputs
To set an output for the step, use `::set-output` :
```sh
2019-10-23 15:06:34 +00:00
echo "::set-output name=FOO::BAR"
2019-09-09 15:58:49 +00:00
```
Running `steps.[step-id].outputs.FOO` in your Yaml will now give you `BAR`
```yaml
steps:
- name: Set the value
id: step_one
2019-10-23 15:06:34 +00:00
run: echo "::set-output name=FOO::BAR"
2019-09-09 15:58:49 +00:00
- name: Use it
run: echo ${{ steps.step_one.outputs.FOO }}
```
2019-09-25 01:08:02 +00:00
This is wrapped by the core setOutput method:
```javascript
export function setOutput(name: string, value: string): void {}
```
### Register a secret
If a script or action does work to create a secret at runtime, it can be registered with the runner to be masked in logs.
2019-09-09 15:58:49 +00:00
2019-10-01 21:13:05 +00:00
To mask a value in the logs, use `::add-mask` :
2019-09-09 15:58:49 +00:00
```sh
2019-10-23 15:06:34 +00:00
echo "::add-mask::mysecretvalue"
2019-09-25 01:08:02 +00:00
```
2019-10-01 21:13:05 +00:00
This is wrapped by the core setSecret method
2019-09-25 01:08:02 +00:00
```javascript
2019-10-01 21:13:05 +00:00
function setSecret(secret: string): void {}
2019-09-09 15:58:49 +00:00
```
Now, future logs containing BAR will be masked. E.g. running `echo "Hello FOO BAR World"` will now print `Hello FOO **** World` .
2019-11-01 14:05:01 +00:00
**WARNING** The add-mask and setSecret commands only support single line secrets. To register a multiline secrets you must register each line individually otherwise it will not be masked.
**WARNING** Do **not** mask short values if you can avoid it, it could render your output unreadable (and future steps' output as well).
2019-09-09 15:58:49 +00:00
For example, if you mask the letter `l` , running `echo "Hello FOO BAR World"` will now print `He*********o FOO BAR Wor****d`
2019-09-25 01:08:02 +00:00
### Group and Ungroup Log Lines
Emitting a group with a title will instruct the logs to create a collapsable region up to the next ungroup command.
```bash
2019-10-23 15:06:34 +00:00
echo "::group::my title"
echo "::endgroup::"
2019-09-25 01:08:02 +00:00
```
This is wrapped by the core methods:
```javascript
function startGroup(name: string): void {}
function endGroup(): void {}
```
2019-11-06 21:24:16 +00:00
### Problem Matchers
Problems matchers can be used to scan a build's output to automatically surface lines to the user that matches the provided pattern. A file path to a .json Problem Matcher must be provided. See [Problem Matchers ](problem-matchers.md ) for more information on how to define a Problem Matcher.
```bash
echo "::add-matcher::eslint-compact-problem-matcher.json"
2019-11-15 21:02:47 +00:00
echo "::remove-matcher owner=eslint-compact::"
2019-11-06 21:24:16 +00:00
```
`add-matcher` takes a path to a Problem Matcher file
`remove-matcher` removes a Problem Matcher by owner
2019-10-18 19:35:13 +00:00
### Save State
Save state to be used in the corresponding wrapper (finally) post job entry point.
```bash
2019-10-23 15:06:34 +00:00
echo "::save-state name=FOO::foovalue"
2019-10-18 19:35:13 +00:00
```
2019-09-09 15:58:49 +00:00
### Log Level
2020-04-13 17:25:54 +00:00
There are several commands to emit different levels of log output:
2019-09-09 15:58:49 +00:00
| log level | example usage |
|---|---|
2019-11-06 21:24:16 +00:00
| [debug ](action-debugging.md ) | `echo "::debug::My debug message"` |
2019-10-23 15:06:34 +00:00
| warning | `echo "::warning::My warning message"` |
| error | `echo "::error::My error message"` |
2020-04-13 17:25:54 +00:00
### Command Echoing
By default, the echoing of commands to stdout only occurs if [Step Debugging is enabled ](./actions-debugging.md#How-to-Access-Step-Debug-Logs )
You can enable or disable this for the current step by using the `echo` command.
```bash
echo "::echo::on"
```
You can also disable echoing.
```bash
echo "::echo::off"
```
This is wrapped by the core method:
```javascript
function setCommandEcho(enabled: boolean): void {}
```
The `add-mask` , `debug` , `warning` and `error` commands do not support echoing.
2019-10-23 15:06:34 +00:00
### Command Prompt
CMD processes the `"` character differently from other shells when echoing. In CMD, the above snippets should have the `"` characters removed in order to correctly process. For example, the set output command would be:
```cmd
echo ::set-output name=FOO::BAR
```