# Создание стороннего действия CLI

Узнайте, как разработать действие для настройки интерфейса командной строки на GitHub Actions бегунах.

## Введение

Вы можете написать действие, чтобы предоставить пользователям возможность доступа к серверам с помощью настроенной среды ИНТЕРФЕЙСА командной строки в GitHub Actions запусках.

Действие должно отвечать следующим требованиям:

* позволять пользователям легко указывать версию интерфейса CLI для установки;
* поддерживать несколько операционных систем;
* эффективно выполняться для сведения к минимуму затрат времени и ресурсов;
* Работа между GitHubразмещенными и локальными запусками
* по возможности использовать инструменты сообщества.

В этой статье показано, как написать действие, которое получает определенную версию интерфейса CLI, устанавливает ее, добавляет ее по определенному пути и (необязательно) кэширует ее. Действия такого типа (которые устанавливают средство) часто называются `setup-$TOOL`.

## Необходимые компоненты

У вас должно быть представление о написании пользовательских действий. Дополнительные сведения см. в разделе [Управление пользовательскими действиями](/ru/actions/how-tos/create-and-publish-actions/manage-custom-actions).

## Пример

В приведенном ниже скрипте показано, как получить указанную пользователем версию в качестве входных данных, скачать и извлечь эту версию интерфейса CLI, а затем добавить ее по пути.

GitHub предоставляет [`actions/toolkit`](https://github.com/actions/toolkit)набор пакетов, которые помогают создавать действия. В этом примере используются пакеты [`actions/core`](https://github.com/actions/toolkit/tree/main/packages/core) и [`actions/tool-cache`](https://github.com/actions/toolkit/tree/main/packages/tool-cache).

```javascript copy
const core = require('@actions/core');
const tc = require('@actions/tool-cache');

async function setup() {
  // Get version of tool to be installed
  const version = core.getInput('version');

  // Download the specific version of the tool, e.g. as a tarball
  const pathToTarball = await tc.downloadTool(getDownloadURL());

  // Extract the tarball onto the runner
  const pathToCLI = await tc.extractTar(pathToTarball);

  // Expose the tool by adding it to the PATH
  core.addPath(pathToCLI)
}

module.exports = setup
```

Чтобы использовать этот скрипт, замените `getDownloadURL` на функцию, которая скачивает интерфейс CLI. Вам также потребуется создать файл метаданных действия (`action.yml`), который принимает входной аргумент `version` и запускает скрипт. Полные сведения о создании действия см. в разделе [Создание действия JavaScript](/ru/actions/tutorials/create-actions/create-a-javascript-action).

## Дополнительные материалы

Этот шаблон применяется в нескольких действиях. Дополнительные примеры:

* [`ruby/setup-ruby`](https://github.com/ruby/setup-ruby)
* [`google-github-actions/setup-gcloud`](https://github.com/google-github-actions/setup-gcloud)
* [`hashicorp/setup-terraform`](https://github.com/hashicorp/setup-terraform)