Some checks failed
Server CI / Postgres (shard 0) (push) Has been skipped
Server CI / Postgres (shard 3) (push) Has been skipped
BuildEnv Docker Image / build-image (push) Failing after 4s
BuildEnv Docker Image / build-image-fips (push) Failing after 4s
Migration Review & Release Notes / Generate migration review & release notes (push) Failing after 3s
Server CI / Build Environment (push) Failing after 3s
Server CI / Postgres (shard 1) (push) Has been skipped
Tools CI / check-style (mattermost-govet) (push) Failing after 4s
Server CI / Postgres (shard 2) (push) Has been skipped
Tools CI / check-style (mmgotool) (push) Failing after 3s
Server CI / Elasticsearch v8 Compatibility (push) Has been skipped
Server CI / OpenSearch v2 Compatibility (push) Has been skipped
Server CI / Postgres FIPS (shard 0) (push) Has been skipped
Tools CI / Test (mattermost-govet) (push) Failing after 3s
Server CI / Postgres FIPS (shard 1) (push) Has been skipped
Server CI / Postgres FIPS (shard 2) (push) Has been skipped
Tools CI / Test (mmgotool) (push) Failing after 3s
Server CI / Postgres FIPS (shard 3) (push) Has been skipped
Server CI / Run mmctl tests (push) Has been skipped
Server CI / Run mmctl tests (FIPS) (push) Has been skipped
Server CI / Merge Postgres Test Results (push) Has been skipped
Server CI / Merge Postgres FIPS Test Results (push) Has been skipped
Server CI / Check backport migrations (push) Has been skipped
Server CI / Check generated files (push) Has been skipped
Server CI / check-style (push) Has been skipped
Server CI / Vet API (push) Has been skipped
Server CI / Build mattermost server app (push) Has been skipped
Server CI / Server CI Complete (push) Failing after 2s
Server CI / Server CI Artifacts (push) Has been skipped
Server CI / Sentry Upload (push) Has been skipped
Server CI / Server CI Report (push) Failing after 5m1s
Server CI Nightly Race / Race Detector (push) Has been skipped
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Webapp CI Cache Warm / Warm Webapp node_modules Cache (push) Has been cancelled
E2E CI Cache Warm / Warm E2E npm Registry Cache (push) Has been cancelled
API / build (push) Has been cancelled
Web App CI / check-types (push) Has been cancelled
Web App CI / check-lint (push) Has been cancelled
Web App CI / check-i18n (push) Has been cancelled
Web App CI / check-external-links (push) Has been cancelled
Web App CI / test (platform) (push) Has been cancelled
Web App CI / test (mattermost-redux) (push) Has been cancelled
Web App CI / test (channels shard 1/4) (push) Has been cancelled
Web App CI / test (channels shard 2/4) (push) Has been cancelled
Web App CI / test (channels shard 3/4) (push) Has been cancelled
Web App CI / test (channels shard 4/4) (push) Has been cancelled
Web App CI / upload-coverage (push) Has been cancelled
Web App CI / build (push) Has been cancelled
YAML Lint / yamllint (push) Has been cancelled
Push mirrored docker images / cd/Push mirrored docker images (push) Has been cancelled
docs-cd / Build and deploy docs (push) Has been cancelled
Docs CI / build (push) Has been cancelled
E2E Cache Warm: Cypress deps / Warm Cypress deps cache (push) Has been cancelled
Scorecards supply-chain security / Scorecard analysis (push) Has been cancelled
Server CI Weekly / Postgres FIPS (push) Has been skipped
Server CI Weekly / Run mmctl tests (FIPS) (push) Has been skipped
Server CI Weekly / Postgres with binary parameters (push) Has been skipped
Server CI Weekly / Build Environment (push) Failing after 1s
Server CI Cache Warm / Warm Go Module and Build Cache (push) Failing after 2s
Server CI Nightly Race / Build Environment (push) Failing after 1s
101 lines
3.8 KiB
Markdown
101 lines
3.8 KiB
Markdown
---
|
|
title: "CLI commands"
|
|
sidebar_position: 5
|
|
---
|
|
|
|
As of 6.0, Mattermost CLI has been replaced by [mmctl](https://github.com/mattermost/mmctl). `mmctl` is built to enable access to Mattermost server from the command line. The tool leverages the public API so that administrator and user tasks can be performed.
|
|
|
|
Since `mmctl` uses the public API, an authorization mechanism is required. Which means the access rights are managed on the server side. There is a pre-run check to read credentials and use it in the client. In addition to authentication via credentials, `mmctl` can communicate to a local server without any authentication. This must be enabled via server configuration and both `mmctl` and `mattermost/server` needs to be running in the same machine.
|
|
|
|
In addition to provide more functionality towards testing and development, `db` subcommand has been added Mattermost server binary.
|
|
|
|
The CLI interface is written using [Cobra](https://github.com/spf13/cobra), a
|
|
powerful and modern CLI creation library. If you have never used Cobra before, it is
|
|
well documented in its [GitHub Repository](https://github.com/spf13/cobra).
|
|
|
|
The source code used to build our CLI interface is written in the `commands` directory of the [mmctl](https://github.com/mattermost/mmctl) repository.
|
|
|
|
Each "command" of the CLI is stored in a different file of the
|
|
`commands` directory. Within each file, you can find
|
|
multiple "subcommands".
|
|
|
|
## Add a new subcommand
|
|
|
|
If you want to add a new subcommand in an existing mattermost command, first find the relevant file. For example, if you want to add a `show` command to
|
|
the `channel` command, go to `commands/channel.go` and add your subcommand there.
|
|
|
|
To add the subcommand, start by creating a new `Command` instance, for example:
|
|
|
|
```go
|
|
var ChannelShowCmd = &cobra.Command{
|
|
Use: "show",
|
|
Short: "Show channel info",
|
|
Long: "Show channel information, including the name, header, purpose and the number of members.",
|
|
Example: " channel show --team myteam --channel mychannel"
|
|
RunE: showChannelCmdF,
|
|
}
|
|
```
|
|
|
|
Then implement the subcommand function, in this example `showChannelCmdF`.
|
|
|
|
```go
|
|
func showChannelCmdF(c client.Client, cmd *cobra.Command, args []string) error {
|
|
// Your code implementing the command itself
|
|
newChannel, _, err := c.ShowChannel(channel)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
```
|
|
|
|
Now, you set the flags of your subcommand and register it in the command. In our case we register our new `ChannelShowCmd` flag in `ChannelCmd`.
|
|
|
|
```go
|
|
func init() {
|
|
...
|
|
|
|
ChannelShowCmd.Flags().String("team", "", "Team name or ID")
|
|
ChannelShowCmd.Flags().String("channel", "", "Channel name or ID")
|
|
...
|
|
ChannelCmd.AddCommand(
|
|
...
|
|
ChannelShowCmd,
|
|
)
|
|
...
|
|
}
|
|
```
|
|
|
|
Finally, implement unit tests in `commands/channel_test.go` and end-to-end tests to commands/channel_e2e_test.go`.
|
|
|
|
## Add a new command
|
|
|
|
If you want to add a new command to `mmctl`, first create a file for the command.
|
|
For example, if you want to add a new `emoji` command to manage emojis in
|
|
Mattermost from the CLI, create `commands/emoji.go`
|
|
and add your command and your subcommands there.
|
|
|
|
A command is exactly the same as a subcommand, so you can follow the same
|
|
steps of the previous section. However, you must also register the new command in the
|
|
"Root" command as follows:
|
|
|
|
```go
|
|
var EmojiCmd = &cobra.Command{
|
|
Use: "emoji",
|
|
Short: "Emoji management",
|
|
Long: "Lists, creates and deletes custom emoji",
|
|
}
|
|
func init() {
|
|
...
|
|
RootCmd.AddCommand(EmojiCmd)
|
|
...
|
|
}
|
|
```
|
|
|
|
Usually, you would then add several subcommands to perform various tasks.
|
|
|
|
## Submit your pull request
|
|
|
|
Please submit a pull request against the [mattermost/mmctl](https://github.com/mattermost/mmctl) repository by [following these instructions](/developers/contribute/more-info/server/developer-workflow).
|