Learn how to develop an action to set up a CLI on GitHub Actions runners.
IntroductionYou can write an action to provide a way for users to access your servers via a configured CLI environment on GitHub Actions runners.
Your action should:
This article will demonstrate how to write an action that retrieves a specific version of your CLI, installs it, adds it to the path, and (optionally) caches it. This type of action (an action that sets up a tool) is often named setup-$TOOL
.
You should have an understanding of how to write a custom action. For more information, see Managing custom actions.
ExampleThe following script demonstrates how you can get a user-specified version as input, download and extract the specific version of your CLI, then add the CLI to the path.
GitHub provides actions/toolkit
, which is a set of packages that helps you create actions. This example uses the actions/core
and actions/tool-cache
packages.
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
const core = require('@actions/core');
const tc = require('@actions/tool-cache');
async function setup() {
const version = core.getInput('version');
const pathToTarball = await tc.downloadTool(getDownloadURL());
const pathToCLI = await tc.extractTar(pathToTarball);
core.addPath(pathToCLI)
}
module.exports = setup
To use this script, replace getDownloadURL
with a function that downloads your CLI. You will also need to create an actions metadata file (action.yml
) that accepts a version
input and that runs this script. For full details about how to create an action, see Creating a JavaScript action.
This pattern is employed in several actions. For more examples, see:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4