The Fastly CLI requires Go 1.16 or above. Clone this repo
to any path and type make
to run all of the tests and generate a development
build locally.
git clone git@github.com:fastly/cli
cd cli
make
./fastly version
The make
task requires the following executables to exist in your $PATH
:
If you have none of them installed, or don't mind them being upgraded automatically, you can run make dependencies
to install them.
There are two ways to scaffold a new command, that is intended to be a non-composite command (i.e. a straight 1-1 mapping to an underlying Fastly API endpoint):
make scaffold
: e.g.fastly foo <create|delete|describe|update>
make scaffold-category
: e.g.fastly foo bar <create|delete|describe|update>
The latter Makefile
target is for commands we want to group under a common category (in the above example foo
is the category and bar
is the command). A real example of a category command would be fastly logging
, where logging
is the category and within that category are multiple logging provider commands (e.g. fastly logging splunk
, where splunk
is the command).
The logging
category is an otherwise non-functional command (i.e. if you execute fastly logging
, then all you see is help output describing the available commands under the logging category).
Makefile target structure:
CLI_PACKAGE=... CLI_COMMAND=... CLI_API=... make scaffold
CLI_CATEGORY=... CLI_CATEGORY_COMMAND=... CLI_PACKAGE=... CLI_COMMAND=... CLI_API=... make scaffold-category
Example usage:
Imagine you want to add the following top-level command fastly foo-bar
with CRUD commands beneath it (e.g. fastly foo <create|delete|describe|list|update>
), then you would execute:
CLI_PACKAGE=foobar CLI_COMMAND=foo-bar CLI_API=Bar make scaffold
NOTE: Go package names shouldn't have special characters, hence the difference between
foobar
and the commandfoo-bar
. Also, theCLI_API
value will be interpolated into CRUD verbs (CreateBar
,DeleteBar
etc), along with their inputs (fastly.CreateBarInput
,fastly.DeleteBarInput
etc).
Now imagine you want to add a new subcommand to an existing category such as 'logging' fastly logging foo-bar
with CRUD commands beneath it (e.g. fastly logging foo-bar <create|delete|describe|list|update>
), then you would execute a similar command but you would change to the scaffold-category
target and also prefix two additional inputs:
CLI_CATEGORY=logging CLI_CATEGORY_COMMAND=logging CLI_PACKAGE=foobar CLI_COMMAND=foo-bar CLI_API=Bar make scaffold-category
NOTE: Within the generated files, keep an eye out for any
<...>
references that need to be manually updated.