# Команды рабочего процесса для GitHub Actions

При выполнении команд оболочки в рабочем процессе или в коде действия можно использовать команды рабочего процесса.

## Общие сведения о командах рабочего процесса

GitHub Actions могут связываться с компьютером выполнения, чтобы задавать переменные среды, выводить значения, используемые другими действиями, добавлять сообщения отладки в журналы выходных данных и выполнять другие задачи.

Большинство команд рабочего процесса используют команду `echo` в определенном формате, остальные вызываются путем записи в файл. Дополнительные сведения см. в разделе [Файлы среды](#environment-files).

### Пример команды рабочего процесса

<div class="ghd-tool bash">

```bash copy
echo "::workflow-command parameter1={data},parameter2={data}::{command value}"
```

</div>

<div class="ghd-tool powershell">

```powershell copy
Write-Output "::workflow-command parameter1={data},parameter2={data}::{command value}"
```

</div>

> \[!NOTE]
> Команды рабочего процесса и имена параметров не учитывает регистр.

> \[!WARNING]
> Если вы используете командную строку, не указывайте двойные кавычки (`"`) при использовании команд рабочего процесса.

## Использование команд рабочего процесса для доступа к возможностям набора средств

В [actions/toolkit](https://github.com/actions/toolkit) содержится ряд функций, которые можно выполнять как команды рабочего процесса. Используйте синтаксис `::`, чтобы выполнить команды рабочего процесса в файле YAML. Затем они отправляются в средство выполнения через `stdout`.

Например, вместо использования кода для создания заметки об ошибке, как показано ниже:

```javascript copy
core.error('Missing semicolon', {file: 'app.js', startLine: 1})
```

### Пример. Создание заметки для ошибки

Чтобы создать ту же заметку об ошибках, можно использовать `error` команду в рабочем процессе:

<div class="ghd-tool bash">

```yaml copy
      - name: Create annotation for build error
        run: echo "::error file=app.js,line=1::Missing semicolon"
```

</div>

<div class="ghd-tool powershell">

```yaml copy
      - name: Create annotation for build error
        run: Write-Output "::error file=app.js,line=1::Missing semicolon"
```

</div>

В следующей таблице перечислены функции набора средств, которые доступны в рабочем процессе:

| Функция набора средств | Аналогичная команда рабочего процесса                   |
| ---------------------- | ------------------------------------------------------- |
| `core.addPath`         | Доступно с помощью файла среды `GITHUB_PATH`            |
| `core.debug`           | `debug`                                                 |
| `core.notice`          | `notice`                                                |
| `core.error`           | `error`                                                 |
| `core.endGroup`        | `endgroup`                                              |
| `core.exportVariable`  | Доступно с помощью файла среды `GITHUB_ENV`             |
| `core.getInput`        | Доступно с помощью переменной среды `INPUT_{NAME}`      |
| `core.getState`        | Доступно с помощью переменной среды `STATE_{NAME}`      |
| `core.isDebug`         | Доступно с помощью переменной среды `RUNNER_DEBUG`      |
| `core.summary`         | Доступно с помощью файла среды `GITHUB_STEP_SUMMARY`    |
| `core.saveState`       | Доступно с помощью файла среды `GITHUB_STATE`           |
| `core.setCommandEcho`  | `echo`                                                  |
| `core.setFailed`       | Используется в качестве ярлыка для `::error` и `exit 1` |
| `core.setOutput`       | Доступно с помощью файла среды `GITHUB_OUTPUT`          |
| `core.setSecret`       | `add-mask`                                              |
| `core.startGroup`      | `group`                                                 |
| `core.warning`         | `warning`                                               |

## Задание сообщения отладки

Записывает сообщение отладки в журнал. Чтобы просмотреть в журнале сообщения отладки, заданные этой командой, необходимо создать секрет под названием `ACTIONS_STEP_DEBUG` со значением `true`. Дополнительные сведения см. в разделе [Включение ведения журналов отладки](/ru/actions/how-tos/monitor-workflows/enable-debug-logging).

```text copy
::debug::{message}
```

### Пример: задание сообщения отладки

<div class="ghd-tool bash">

```bash copy
echo "::debug::Set the Octocat variable"
```

</div>

<div class="ghd-tool powershell">

```powershell copy
Write-Output "::debug::Set the Octocat variable"
```

</div>

## Задание сообщения уведомления

Создает сообщение уведомления и записывает его в журнал. Это сообщение создаст заметку, которая может связать его с определенным файлом в репозитории. При необходимости сообщение может указать позицию в файле.

```text copy
::notice file={name},line={line},endLine={endLine},title={title}::{message}
```

| Параметр    | Значение                   | Обязательное поле | По умолчанию. |
| :---------- | :------------------------- | :---------------- | :------------ |
| `title`     | Настраиваемый заголовок    | No                | нет           |
| `file`      | Имя файла                  | No                | `.github`     |
| `col`       | Номер столбца, начиная с 1 | No                | нет           |
| `endColumn` | Номер конечного столбца    | No                | нет           |
| `line`      | Номер строки, начиная с 1  | No                | `1`           |
| `endLine`   | Номер конечной строки      | No                | `1`           |

### Пример: задание сообщения уведомления

<div class="ghd-tool bash">

```bash copy
echo "::notice file=app.js,line=1,col=5,endColumn=7::Missing semicolon"
```

</div>

<div class="ghd-tool powershell">

```powershell copy
Write-Output "::notice file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
```

</div>

## Задание сообщения предупреждения

Создает сообщение предупреждения и записывает его в журнал. Это сообщение создаст заметку, которая может связать его с определенным файлом в репозитории. При необходимости сообщение может указать позицию в файле.

```text copy
::warning file={name},line={line},endLine={endLine},title={title}::{message}
```

| Параметр    | Значение                   | Обязательное поле | По умолчанию. |
| :---------- | :------------------------- | :---------------- | :------------ |
| `title`     | Настраиваемый заголовок    | No                | нет           |
| `file`      | Имя файла                  | No                | `.github`     |
| `col`       | Номер столбца, начиная с 1 | No                | нет           |
| `endColumn` | Номер конечного столбца    | No                | нет           |
| `line`      | Номер строки, начиная с 1  | No                | `1`           |
| `endLine`   | Номер конечной строки      | No                | `1`           |

### Пример: задание сообщения предупреждения

<div class="ghd-tool bash">

```bash copy
echo "::warning file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
```

</div>

<div class="ghd-tool powershell">

```powershell copy
Write-Output "::warning file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
```

</div>

## Задание сообщения об ошибке

Создает сообщение об ошибке и записывает его в журнал. Это сообщение создаст заметку, которая может связать его с определенным файлом в репозитории. При необходимости сообщение может указать позицию в файле.

```text copy
::error file={name},line={line},endLine={endLine},title={title}::{message}
```

| Параметр    | Значение                   | Обязательное поле | По умолчанию. |
| :---------- | :------------------------- | :---------------- | :------------ |
| `title`     | Настраиваемый заголовок    | No                | нет           |
| `file`      | Имя файла                  | No                | `.github`     |
| `col`       | Номер столбца, начиная с 1 | No                | нет           |
| `endColumn` | Номер конечного столбца    | No                | нет           |
| `line`      | Номер строки, начиная с 1  | No                | `1`           |
| `endLine`   | Номер конечной строки      | No                | `1`           |

### Пример: задание сообщения об ошибке

<div class="ghd-tool bash">

```bash copy
echo "::error file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
```

</div>

<div class="ghd-tool powershell">

```powershell copy
Write-Output "::error file=app.js,line=1,col=5,endColumn=7,title=YOUR-TITLE::Missing semicolon"
```

</div>

## Группировка строк журнала

Создает группу с возможностью развертывания в журнале. Чтобы создать группу, воспользуйтесь командой `group` и укажите `title`. Любые данные, которые вы введете между командами `group` и `endgroup`, будут вложены в расширяемую запись журнала.

```text copy
::group::{title}
::endgroup::
```

### Пример: группировка строк журнала

<div class="ghd-tool bash">

```yaml copy
jobs:
  bash-example:
    runs-on: ubuntu-latest
    steps:
      - name: Group of log lines
        run: |
            echo "::group::My title"
            echo "Inside group"
            echo "::endgroup::"
```

</div>

<div class="ghd-tool powershell">

```yaml copy
jobs:
  powershell-example:
    runs-on: windows-latest
    steps:
      - name: Group of log lines
        run: |
            Write-Output "::group::My title"
            Write-Output "Inside group"
            Write-Output "::endgroup::"
```

</div>

![Снимок экрана: журнал для шага рабочего процесса. Вторая строка", "Мой заголовок", представляет собой расширенную группу. Следующая строка "Внутри группы" указана ниже.](/assets/images/help/actions/actions-log-group.png)

## Маскирование значения в журнале

```text copy
::add-mask::{value}
```

Маскирование значения предотвращает запись строки или переменной в журнал. Каждое замаскированное слово, отделенное пробелом, заменяется символом `*`. Для `value` маски можно использовать переменную среды или строку. Это нужно делать один раз на каждое значение на задание. Когда вы маскируете значение, оно обрабатывается как секрет и будет скрыто в средстве выполнения. Например, после маскирования значения вы не сможете задать его в качестве выходных данных.

### Пример: маскирование строки

Если вы введете в журнале `"Mona The Octocat"`, вы увидите `"***"`.

<div class="ghd-tool bash">

```bash copy
echo "::add-mask::Mona The Octocat"
```

</div>

<div class="ghd-tool powershell">

```powershell copy
Write-Output "::add-mask::Mona The Octocat"
```

</div>

> \[!WARNING]
> Прежде чем выводить секрет в журналах сборки или использовать его в других командах рабочего процесса, зарегистрируйте секрет с помощью add-mask.

### Пример: маскирование переменной среды

Если вы введете в журнале переменную `MY_NAME` или значение `"Mona The Octocat"`, вы увидите `"***"` вместо `"Mona The Octocat"`.

<div class="ghd-tool bash">

```yaml copy
jobs:
  bash-example:
    runs-on: ubuntu-latest
    env:
      MY_NAME: "Mona The Octocat"
    steps:
      - name: bash-version
        run: echo "::add-mask::$MY_NAME"
```

</div>

<div class="ghd-tool powershell">

```yaml copy
jobs:
  powershell-example:
    runs-on: windows-latest
    env:
      MY_NAME: "Mona The Octocat"
    steps:
      - name: powershell-version
        run: Write-Output "::add-mask::$env:MY_NAME"
```

</div>

### Пример. Маскирование созданных выходных данных в одном задании

Если вам не нужно передавать секрет из одного задания в другое задание, можно:

1. Создайте секрет (без вывода).
2. Маскировка ее с `add-mask`помощью .
3. Используйте `GITHUB_OUTPUT` , чтобы сделать секрет доступным для других шагов в задании.

<div class="ghd-tool bash">

```yaml copy
on: push
jobs:
  generate-a-secret-output:
    runs-on: ubuntu-latest
    steps:
      - id: sets-a-secret
        name: Generate, mask, and output a secret
        run: |
          the_secret=$((RANDOM))
          echo "::add-mask::$the_secret"
          echo "secret-number=$the_secret" >> "$GITHUB_OUTPUT"
      - name: Use that secret output (protected by a mask)
        run: |
          echo "the secret number is ${{ steps.sets-a-secret.outputs.secret-number }}"
```

</div>

<div class="ghd-tool powershell">

```yaml copy
on: push
jobs:
  generate-a-secret-output:
    runs-on: ubuntu-latest
    steps:
      - id: sets-a-secret
        name: Generate, mask, and output a secret
        shell: pwsh
        run: |
          Set-Variable -Name TheSecret -Value (Get-Random)
          Write-Output "::add-mask::$TheSecret"
          "secret-number=$TheSecret" >> $env:GITHUB_OUTPUT
      - name: Use that secret output (protected by a mask)
        shell: pwsh
        run: |
          Write-Output "the secret number is ${{ steps.sets-a-secret.outputs.secret-number }}"
```

</div>

### Пример: маскирование и передача секрета между заданиями или рабочими процессами

Если вы хотите передать маскированные секреты между заданиями или рабочими процессами, необходимо сохранить секрет в хранилище, а затем получить его в последующем задании или рабочем процессе.

#### Настройка

1. Настройте хранилище секретов для хранения секрета, который будет создан во время рабочего процесса. Например, Хранилище.
2. Создайте ключ для чтения и записи в это хранилище секретов. Сохраните ключ в качестве секрета репозитория. В следующем примере рабочего процесса используется `SECRET_STORE_CREDENTIALS`имя секрета. Дополнительные сведения см. в разделе [Использование секретов в GitHub Actions](/ru/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).

#### Рабочий процесс

> \[!NOTE]
> Этот рабочий процесс использует мнимое хранилище секретов, `secret-store`которое содержит мнимые `store-secret` команды и `retrieve-secret`.
> `some/secret-store@ 27b31702a0e7fc50959f5ad993c78deac1bdfc29` — это мнимое действие, которое устанавливает `secret-store` приложение и настраивает его для подключения к объекту `instance``credentials`.

<div class="ghd-tool bash">

```yaml copy
on: push

jobs:
  secret-generator:
    runs-on: ubuntu-latest
    outputs:
      handle: ${{ steps.generate-secret.outputs.handle }}
    steps:
    - uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29
      with:
        credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }}
        instance: ${{ secrets.SECRET_STORE_INSTANCE }}
    - name: generate secret
      id: generate-secret
      shell: bash
      run: |
        GENERATED_SECRET=$((RANDOM))
        echo "::add-mask::$GENERATED_SECRET"
        SECRET_HANDLE=$(secret-store store-secret "$GENERATED_SECRET")
        echo "handle=$SECRET_HANDLE" >> "$GITHUB_OUTPUT"
  secret-consumer:
    runs-on: macos-latest
    needs: secret-generator
    steps:
    - uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29
      with:
        credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }}
        instance: ${{ secrets.SECRET_STORE_INSTANCE }}
    - name: use secret
      shell: bash
      run: |
        SECRET_HANDLE="${{ needs.secret-generator.outputs.handle }}"
        RETRIEVED_SECRET=$(secret-store retrieve-secret "$SECRET_HANDLE")
        echo "::add-mask::$RETRIEVED_SECRET"
        echo "We retrieved our masked secret: $RETRIEVED_SECRET"
```

</div>

<div class="ghd-tool powershell">

```yaml copy
on: push

jobs:
  secret-generator:
    runs-on: ubuntu-latest
    steps:
    - uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29
      with:
        credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }}
        instance: ${{ secrets.SECRET_STORE_INSTANCE }}
    - name: generate secret
      shell: pwsh
      run: |
        Set-Variable -Name Generated_Secret -Value (Get-Random)
        Write-Output "::add-mask::$Generated_Secret"
        Set-Variable -Name Secret_Handle -Value (Store-Secret "$Generated_Secret")
        "handle=$Secret_Handle" >> $env:GITHUB_OUTPUT
  secret-consumer:
    runs-on: macos-latest
    needs: secret-generator
    steps:
    - uses: some/secret-store@27b31702a0e7fc50959f5ad993c78deac1bdfc29
      with:
        credentials: ${{ secrets.SECRET_STORE_CREDENTIALS }}
        instance: ${{ secrets.SECRET_STORE_INSTANCE }}
    - name: use secret
      shell: pwsh
      run: |
        Set-Variable -Name Secret_Handle -Value "${{ needs.secret-generator.outputs.handle }}"
        Set-Variable -Name Retrieved_Secret -Value (Retrieve-Secret "$Secret_Handle")
        echo "::add-mask::$Retrieved_Secret"
        echo "We retrieved our masked secret: $Retrieved_Secret"
```

</div>

## Остановка и запуск команд рабочего процесса

Останавливает обработку всех команд рабочего процесса. Эта специальная команда позволяет записывать в журнал любые данные без риска случайно запустить команду рабочего процесса. Например, можно остановить ведение журнала, чтобы вывести целый скрипт с комментариями.

```text copy
::stop-commands::{endtoken}
```

Чтобы остановить обработку команд рабочего процесса, передайте `stop-commands` уникальный маркер. Чтобы возобновить обработку команд рабочего процесса, передайте тот же маркер, с помощью которого вы остановили обработку.

> \[!WARNING]
> Убедитесь, что маркер, который вы используете, создается случайным образом и уникален для каждого запуска.

```text copy
::{endtoken}::
```

### Пример: остановка и запуск команд рабочего процесса

<div class="ghd-tool bash">

```yaml copy
jobs:
  workflow-command-job:
    runs-on: ubuntu-latest
    steps:
      - name: Disable workflow commands
        run: |
          echo '::warning:: This is a warning message, to demonstrate that commands are being processed.'
          stopMarker=$(uuidgen)
          echo "::stop-commands::$stopMarker"
          echo '::warning:: This will NOT be rendered as a warning, because stop-commands has been invoked.'
          echo "::$stopMarker::"
          echo '::warning:: This is a warning again, because stop-commands has been turned off.'
```

</div>

<div class="ghd-tool powershell">

```yaml copy
jobs:
  workflow-command-job:
    runs-on: windows-latest
    steps:
      - name: Disable workflow commands
        run: |
          Write-Output '::warning:: This is a warning message, to demonstrate that commands are being processed.'
          $stopMarker = New-Guid
          Write-Output "::stop-commands::$stopMarker"
          Write-Output '::warning:: This will NOT be rendered as a warning, because stop-commands has been invoked.'
          Write-Output "::$stopMarker::"
          Write-Output '::warning:: This is a warning again, because stop-commands has been turned off.'
```

</div>

## Отправка значений в предварительные и завершающие действия

Переменные среды можно создавать для совместного использования с рабочим процессом `pre:` или `post:` действиями, записывая в файл, расположенный по адресу `GITHUB_STATE`. Например, можно создать файл действием `pre:`, передать расположение файла действию `main:`, а затем использовать действие `post:` для удаления файла. Также можно создать файл действием `main:`, передать его расположение действию `post:` и с помощью этого же действия `post:` удалить файл.

Если у вас несколько `pre:` или `post:` действия, вы можете получить доступ только к сохраненному значению в действии, в котором оно было записано `GITHUB_STATE`. Дополнительные сведения о действии `post:` см. в разделе [Справочник по синтаксису метаданных](/ru/actions/reference/workflows-and-actions/metadata-syntax#runspost).

Файл `GITHUB_STATE` доступен только в действии. Сохраненное значение хранится в виде значения среды с префиксом `STATE_`.

В этом примере используется JavaScript для записи в `GITHUB_STATE` файл. Итоговая переменная среды называется `STATE_processID` со значением `12345`:

```javascript copy
import * as fs from 'fs'
import * as os from 'os'

fs.appendFileSync(process.env.GITHUB_STATE, `processID=12345${os.EOL}`, {
  encoding: 'utf8'
})
```

Затем переменная `STATE_processID` становится доступной только скрипту очистки, который выполняется в рамках действия `main`. Этот пример выполняется в `main` и использует JavaScript для отображения значения, назначенного переменной среды `STATE_processID`:

```javascript copy
console.log("The running PID from the main action is: " + process.env.STATE_processID);
```

## Файлы среды

Во время выполнения рабочего процесса средство выполнения создает временные файлы, с помощью которых можно совершать определенные действия. Путь к этим файлам можно получить и изменить с помощью переменных среды по умолчанию GitHub. См [. раздел AUTOTITLE](/ru/actions/reference/workflows-and-actions/variables#default-environment-variables). Чтобы обеспечить правильную обработку команд, при записи в эти файлы понадобится кодировка UTF-8. В один файл можно записать несколько команд, разделенных новыми строками.
Чтобы использовать переменные среды в GitHub Action, создайте или измените `.env` файлы с помощью определенных команд GitHub Actions.

Это делается следующим образом:

```yaml copy
name: Example Workflow for Environment Files

on: push

jobs:
  set_and_use_env_vars:
    runs-on: ubuntu-latest
    steps:
      - name: Set environment variable
        run: echo "MY_ENV_VAR=myValue" >> $GITHUB_ENV

      - name: Use environment variable
        run: |
          echo "The value of MY_ENV_VAR is $MY_ENV_VAR"

```

Другой пример — использовать его для хранения метаданных, таких как метки времени сборки, фиксация SHAs или имена артефактов:

```yaml copy
steps:
  - name: Store build timestamp
    run: echo "BUILD_TIME=$(date +'%T')" >> $GITHUB_ENV

  - name: Deploy using stored timestamp
    run: echo "Deploying at $BUILD_TIME"
```

<div class="ghd-tool powershell">

> \[!NOTE]
> PowerShell версии 5.1 и ниже (`shell: powershell`) не используют UTF-8 по умолчанию, поэтому необходимо указать кодировку UTF-8. Например:
>
> ```yaml copy
> jobs:
>   legacy-powershell-example:
>     runs-on: windows-latest
>     steps:
>       - shell: powershell
>         run: |
>           "mypath" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
> ```
>
> В PowerShell Core версии 6 и более поздних (`shell: pwsh`) используется кодировка UTF-8 по умолчанию. Например:
>
> ```yaml copy
> jobs:
>   powershell-core-example:
>     runs-on: windows-latest
>     steps:
>       - shell: pwsh
>         run: |
>           "mypath" >> $env:GITHUB_PATH
> ```

</div>

## Указание переменной среды

> \[!NOTE]
> Чтобы избежать проблем, рекомендуется рассматривать переменные среды как конфиденциальные регистры независимо от поведения операционной системы и используемой оболочки.

<div class="ghd-tool bash">

```bash copy
echo "{environment_variable_name}={value}" >> "$GITHUB_ENV"
```

</div>

<div class="ghd-tool powershell">

* С PowerShell версии 6 и более поздних:

  ```powershell copy
  "{environment_variable_name}={value}" >> $env:GITHUB_ENV
  ```

* С PowerShell версии 5.1 и более ранних:

  ```powershell copy
  "{environment_variable_name}={value}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
  ```

</div>

Можно создать переменную среды, доступную всем последующим шагам в задании рабочего процесса. Для этого необходимо определить или обновить переменную среды и записать ее в файл среды `GITHUB_ENV`. Шаг, на котором переменная среды создается или обновляется, не будет иметь доступа к новому значению, но доступ получат все последующие шаги в задании.

Нельзя перезаписать значение переменных среды по умолчанию с именем `GITHUB_*` и `RUNNER_*`. В настоящее время можно перезаписать значение переменной `CI` . Однако это не гарантируется, что это всегда будет возможно. Для получения дополнительной информации о стандартных переменных среды см. [Справочник по переменным](/ru/actions/reference/workflows-and-actions/variables#default-environment-variables).

> \[!NOTE]
> Из-за ограничений `GITHUB_ENV` безопасности нельзя использовать для задания переменной `NODE_OPTIONS` среды.

### Пример записи переменной среды в `GITHUB_ENV`

<div class="ghd-tool bash">

```yaml copy
steps:
  - name: Set the value
    id: step_one
    run: |
      echo "action_state=yellow" >> "$GITHUB_ENV"
  - name: Use the value
    id: step_two
    run: |
      printf '%s\n' "$action_state" # This will output 'yellow'
```

</div>

<div class="ghd-tool powershell">

```yaml copy
steps:
  - name: Set the value
    id: step_one
    run: |
      "action_state=yellow" >> $env:GITHUB_ENV
  - name: Use the value
    id: step_two
    run: |
      Write-Output "$env:action_state" # This will output 'yellow'
```

</div>

### Многострочные строки

В многострочных строках можно использовать разделитель со следующим синтаксисом.

```text copy
{name}<<{delimiter}
{value}
{delimiter}
```

> \[!WARNING]
> Убедитесь, что разделитель, который вы используете, не будет выполняться в строке собственного значения. Если значение является полностью произвольным, этот формат не следует использовать. Вместо этого запишите значение в файл.

#### Пример многостройной строки

Этот пример используется `EOF` в качестве разделителя и задает `JSON_RESPONSE` переменную среды значением `curl` ответа.

<div class="ghd-tool bash">

```yaml copy
steps:
  - name: Set the value in bash
    id: step_one
    run: |
      {
        echo 'JSON_RESPONSE<<EOF'
        curl https://example.com
        echo EOF
      } >> "$GITHUB_ENV"
```

</div>

<div class="ghd-tool powershell">

```yaml copy
steps:
  - name: Set the value in pwsh
    id: step_one
    run: |
      $EOF = (New-Guid).Guid
      "JSON_RESPONSE<<$EOF" >> $env:GITHUB_ENV
      (Invoke-WebRequest -Uri "https://example.com").Content >> $env:GITHUB_ENV
      "$EOF" >> $env:GITHUB_ENV
    shell: pwsh
```

</div>

## Задание параметра вывода

Задает выходной параметр шага. Обратите внимание, что шагу потребуется `id` определить, чтобы позже получить выходное значение. Вы можете задать значения выходных данных с несколькими строками[, используя тот же метод, используемый в ](/ru/actions/reference/workflows-and-actions/workflow-commands#multiline-strings)разделе "Многострочный" для определения переменных среды с несколькими строками.

<div class="ghd-tool bash">

```bash copy
echo "{name}={value}" >> "$GITHUB_OUTPUT"
```

</div>

<div class="ghd-tool powershell">

```powershell copy
"{name}=value" >> $env:GITHUB_OUTPUT
```

</div>

### Пример задания выходного параметра

<div class="ghd-tool bash">

В этом примере показано, как задать выходной `SELECTED_COLOR` параметр и получить его позже:

```yaml copy
      - name: Set color
        id: color-selector
        run: echo "SELECTED_COLOR=green" >> "$GITHUB_OUTPUT"
      - name: Get color
        env:
          SELECTED_COLOR: ${{ steps.color-selector.outputs.SELECTED_COLOR }}
        run: echo "The selected color is $SELECTED_COLOR"
```

</div>

<div class="ghd-tool powershell">

В этом примере показано, как задать выходной `SELECTED_COLOR` параметр и получить его позже:

```yaml copy
      - name: Set color
        id: color-selector
        run: |
            "SELECTED_COLOR=green" >> $env:GITHUB_OUTPUT
      - name: Get color
        env:
          SELECTED_COLOR: ${{ steps.color-selector.outputs.SELECTED_COLOR }}
        run: Write-Output "The selected color is $env:SELECTED_COLOR"
```

</div>

## Добавление сводки по заданию

<div class="ghd-tool bash">

```bash copy
echo "{markdown content}" >> $GITHUB_STEP_SUMMARY
```

</div>

<div class="ghd-tool powershell">

```powershell copy
"{markdown content}" >> $env:GITHUB_STEP_SUMMARY
```

</div>

Для каждого задания можно задать пользовательский Markdown, который будет отображаться на странице сводок о выполнении рабочего процесса. С помощью сводок по заданиям можно отображать и группировать уникальное содержимое, например сводки по результатам тестов, чтобы при просмотре результатов выполнения рабочего процесса пользователю не приходилось открывать журналы для получения важной информации, такой как сбои.

Сводки заданий поддерживают [GitHub оформленный Markdown](https://github.github.com/gfm/), и вы можете добавить свой контент Markdown для шага в `GITHUB_STEP_SUMMARY` файл окружения.
`GITHUB_STEP_SUMMARY` является уникальным для каждого шага задания. Дополнительные сведения о файле на шаге, который `GITHUB_STEP_SUMMARY` ссылается, см. в разделе ["Файлы](#environment-files) среды".

При завершении задания сводки по всем шагам группируются в единую сводку по заданию и отображаются на странице сводок о выполнении рабочего процесса. Если сводки создаются несколькими заданиями, они сортируются по времени завершения задания.

### Пример добавления сводки задания

<div class="ghd-tool bash">

```bash copy
echo "### Hello world! :rocket:" >> $GITHUB_STEP_SUMMARY
```

</div>

<div class="ghd-tool powershell">

```powershell copy
"### Hello world! :rocket:" >> $env:GITHUB_STEP_SUMMARY
```

</div>

![Снимок экрана: страница сводки запуска рабочего процесса. В разделе "Пример сводки" — "Hello world!" и ракета эмодзи.](/assets/images/help/actions/actions-job-summary-simple-example.png)

### Многострочное содержимое Markdown

Для поддержки многострочного содержимого Markdown можно использовать `>>`, чтобы непрерывно добавлять содержимое на текущем шаге. С каждой операцией добавления автоматически вставляется символ новой строки.

#### Пример содержимого Multiline Markdown

<div class="ghd-tool bash">

```yaml
- name: Generate list using Markdown
  run: |
    echo "This is the lead in sentence for the list" >> $GITHUB_STEP_SUMMARY
    echo "" >> $GITHUB_STEP_SUMMARY # this is a blank line
    echo "- Lets add a bullet point" >> $GITHUB_STEP_SUMMARY
    echo "- Lets add a second bullet point" >> $GITHUB_STEP_SUMMARY
    echo "- How about a third one?" >> $GITHUB_STEP_SUMMARY
```

</div>

<div class="ghd-tool powershell">

```yaml
- name: Generate list using Markdown
  run: |
    "This is the lead in sentence for the list" >> $env:GITHUB_STEP_SUMMARY
    "" >> $env:GITHUB_STEP_SUMMARY # this is a blank line
    "- Lets add a bullet point" >> $env:GITHUB_STEP_SUMMARY
    "- Lets add a second bullet point" >> $env:GITHUB_STEP_SUMMARY
    "- How about a third one?" >> $env:GITHUB_STEP_SUMMARY
```

</div>

### Перезапись сводок по заданиям

Чтобы очистить все содержимое для текущего шага, можно использовать `>` для перезаписи любого ранее добавленного содержимого в Bash или удаления `-Append` в PowerShell.

#### Пример перезаписи сводок заданий

<div class="ghd-tool bash">

```yaml
- name: Overwrite Markdown
  run: |
    echo "Adding some Markdown content" >> $GITHUB_STEP_SUMMARY
    echo "There was an error, we need to clear the previous Markdown with some new content." > $GITHUB_STEP_SUMMARY
```

</div>

<div class="ghd-tool powershell">

```yaml
- name: Overwrite Markdown
  run: |
    "Adding some Markdown content" >> $env:GITHUB_STEP_SUMMARY
    "There was an error, we need to clear the previous Markdown with some new content." >> $env:GITHUB_STEP_SUMMARY
```

</div>

### Удаление сводок по заданиям

Чтобы окончательно удалить сводку по текущему шагу, можно удалить файл, на который ссылается `GITHUB_STEP_SUMMARY`.

#### Пример удаления сводок заданий

<div class="ghd-tool bash">

```yaml
- name: Delete all summary content
  run: |
    echo "Adding Markdown content that we want to remove before the step ends" >> $GITHUB_STEP_SUMMARY
    rm $GITHUB_STEP_SUMMARY
```

</div>

<div class="ghd-tool powershell">

```yaml
- name: Delete all summary content
  run: |
    "Adding Markdown content that we want to remove before the step ends" >> $env:GITHUB_STEP_SUMMARY
    Remove-Item $env:GITHUB_STEP_SUMMARY
```

</div>

После завершения шага сводки по заданиям отправляются, и последующие шаги не могут изменить ранее отправленное содержимое Markdown. В сводках автоматически маскируются все секреты, которые могли в них случайно попасть. Если сводка по заданию содержит конфиденциальную информацию, которую необходимо удалить, можно удалить запуск рабочего процесса, чтобы удалить все его сводки. Дополнительные сведения см. в разделе [Удаление выполнения рабочего процесса](/ru/actions/how-tos/manage-workflow-runs/delete-a-workflow-run).

### Разделение и ограничения шагов

Сводки по заданиям разделяются между шагами, а размер каждого шага не может превышать 1 МиБ. Разделение между шагами применяется для того, чтобы потенциально поврежденный Markdown одного шага не мог прервать вывод Markdown последующих шагов. Если для шага добавлено более 1 МиБ содержимого, отправка завершится сбоем и будет создана заметка об ошибке. Сбои отправки для сводок по заданиям не влияют на общее состояние шага или задания. Для каждого задания отображается не более 20 пошаговых сводок.

## Добавление системного пути

Добавляет каталог к системной переменной `PATH` и автоматически открывает к ней доступ всем последующим действиям в текущем задании, кроме выполняемого в настоящий момент действия. Чтобы просмотреть определенные на текущий момент пути для задания, можно использовать `echo "$PATH"` в шаге или действии.

### Пример добавления системного пути

<div class="ghd-tool bash">

В этом примере показывается, как добавить пользовательский каталог `$HOME/.local/bin` в `PATH`:

```bash copy
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
```

</div>

<div class="ghd-tool powershell">

В этом примере показывается, как добавить пользовательский каталог `$env:HOMEPATH/.local/bin` в `PATH`:

```powershell copy
"$env:HOMEPATH/.local/bin" | Out-File -FilePath "$env:GITHUB_PATH" -Append
```

</div>