| App::FuguWeb::CLI(3p) | Perl Library Manual | App::FuguWeb::CLI(3p) |
NAME
App::FuguWeb::CLI - subcommand dispatch for fuguweb
SYNOPSIS
use App::FuguWeb::CLI;
exit App::FuguWeb::CLI->run(@ARGV);
DESCRIPTION
Fugu::CLI parses the command line and dispatches. This class holds the command table, the global options, and one method for each command. Nothing here repeats a Getopt::Long block.
"App::FuguWeb::CLI->run(@argv)" returns the exit code. bin/fuguweb passes it straight to "exit".
Before a command runs, the class applies the global options and loads the site description with App::FuguWeb::Config. A description that is absent or does not parse gives "EXIT_CONFIG_ERROR" and one message on standard error.
See fuguweb(1) for the user documentation of the subcommands.
GLOBAL OPTIONS
- --project dir
- The project root. Without it, the class walks up from the working directory to the first .fuguwebrc.
- --quiet
- Suppress informational output.
SUBCOMMANDS
"build" and "clean" take "--out" dir, which overrides the "out_dir" setting. "init" writes a starter description and is the one command that runs without one.
"mint-key", "import-key" and "promote-key" write one key directory, and App::FuguWeb::Rotate holds the work. Each one takes a "--purpose" word and a "--dir" name. A description with one "keys" block needs no "--dir", and one with several refuses a step without it. "mint-key" and "import-key" take a "--type", which defaults to "signify", and a "--secret" path. "import-key" also takes "--file", the public key file that it publishes. "promote-key" takes "--retiring", the private half of the key that retires.
"mint-key" makes a "signify" key or an "openpgp" key. An OpenPGP mint takes "--email", the one user id of the key, and an optional "--expires" date of the form "YYYY-MM-DD".
"import-key" publishes a key of every type, "x509" included. An issuer makes a certificate, so no verb mints one: "--file" names one PEM certificate, and "--secret" names its unencrypted PEM private key.
One signify key of the directory is the root of trust, and its purpose word is "root". Every step but two takes "--signer", the private half of the current root. A root step takes one "--bind" stem=path for each key in force. The verbs are the commands that sign, so they are the commands that need signify(1), and the command of each other type: gpg(1) for an OpenPGP key and openssl(1) for a certificate. Each one exits "EXIT_TOOL_MISSING" without the command that its step needs.
A directory that publishes its first key holds no "keys" block, because such a block cannot load until a "key" block stands beside it. The first mint therefore takes "--bootstrap" and "--org", and it can take "--dir" and "--url". "--dir" defaults to "keys" for a description that holds no "keys" block, so the first mint of a whole site needs none. One commit carries the block and the key.
"--bootstrap" is the intent to make a key directory, and "mint-key" and "import-key" alone take it. A step without it refuses a "--dir" that no "keys" block names. Each key directory holds a root of trust of its own, so a mistyped "--dir" would otherwise publish a second root in silence.
EXIT CODES
The first five come from Fugu::CLI and mean the same in every Fugu tool. The rest belong to a site build.
0 EXIT_SUCCESS
1 EXIT_ERROR
2 EXIT_INVALID_ARGS
3 EXIT_CONFIG_ERROR
4 EXIT_RENDER_FAILED
5 EXIT_CHECK_FAILED
6 EXIT_TOOL_MISSING
A caller that builds in a container can thus tell a renderer that is not installed from a page that is malformed.
SEE ALSO
fuguweb(1), App::FuguWeb, App::FuguWeb::Config, Fugu::CLI
AUTHOR
Dick Olsson <hi@senzilla.io>
| 2026-10-21 | OpenBSD |