Add Cloudsmith to your DevOps Toolkit
Tags: cloudsmith, cli, devops
Published: 2020-04-29 20:19:17

At Cloudsmith, we are all about automation and we believe that first-class command line tooling makes up a significant part of that. With that in mind, we are continually improving the Cloudsmith Command Line Interface (CLI). This short post will guide you through installing / setting up the CLI and show you some examples of the things you can achieve with it!

# Setup
The Cloudsmith CLI is built in Python atop the Cloudsmith API and as well as the API powering the CLI, we have designed the API so that it is fully compatible with Swagger and OpenAPI 2.0, allowing us to generate bindings in more or less any programming language.

If you have Python set up already, then it is super simple to install the CLI from pip using:

`pip install cloudsmith-cli`

This will install the Cloudsmith CLI itself and any required dependencies.
Once installed you can then configure the CLI it with:

`cloudsmith login`

This command will prompt you for your Cloudsmith username and password, and it will then retrieve your Cloudsmith API key and set up the required configuration and credential files automatically:
![cloudsmith login](https://dev-to-uploads.s3.amazonaws.com/i/bjpbln13vuyowo15b4pm.png)

To check that it was all installed and configured correctly, use the command:

cloudsmith whoami

This will return the current user that the CLI is authenticating as:
![cloudsmith whoami](https://dev-to-uploads.s3.amazonaws.com/i/kdwibxix73fazw55htxt.png)


# Let's try some commands!
Once you have the CLI installed and configured you can start to try out some of the operations. To get a list of the supported commands, just do:

`cloudsmith`

![cloudsmith commands](https://dev-to-uploads.s3.amazonaws.com/i/39cw17wf205skesxklem.png)

There is a LOT you (or the systems you are automating!) can do with the Cloudsmith CLI, but rather than explore every single command here how about we start with what is sure to be a very common use-case - uploading (pushing) a package.

We can see above that the command will be `cloudsmith push`, and you can get additional help and information on any command by using the `-h` flag:

![cloudsmith push npm -h](https://dev-to-uploads.s3.amazonaws.com/i/2k6jzfte7t8ujne8uz4d.png)

OK, that makes more sense now! So to push an `npm` package we need the push command, the repository owner (namespace), repository identifier, and the package file name! Easy:

`cloudsmith push npm OWNER/REPO PACKAGE_FILE`

![cloudsmith push npm](https://dev-to-uploads.s3.amazonaws.com/i/zivwlqupav87j5p9kb0v.png)

Right, that works! The CLI has now uploaded the files, created the package and waited for synchronisation to complete (synchronisation is where we extract the metadata and files associated with the package, and make the package available for download).

Remembering that all Cloudsmith repositories are fully multi-format, i.e you can upload any of the package types that we support into the same repository, we can then push a Python package using the command:

`cloudsmith push python OWNER/REPO PACKAGE_FILE`

![cloudsmith push python](https://dev-to-uploads.s3.amazonaws.com/i/pdmkz2luudrljju253u1.png)

And to push a Cargo crate it would be:

`cloudsmith push cargo OWNER/REPO PACKAGE_FILE`

![cloudsmith push cargo](https://dev-to-uploads.s3.amazonaws.com/i/itb3uuvuwx0grgqt4z89.png)

I'm sure you're sensing a theme here... :-) . Some other formats (such as Debian or Maven) have additional requirements that change the command used, but help is always available using the `-h` flag.

The point is, it's simple, quick and easy! The whole idea of the Cloudsmith CLI is to enable your automation, not get in your way. It supposed to make your life using Cloudsmith easier!

# Some other commands!
So what else can we do with the Cloudsmith CLI. Well, lots of things! Let's start by seeing how we can list the contents of a repository. To do this we use the command:

`cloudsmith list pkgs OWNER/REPO`

Like so:

![cloudsmith list pkgs](https://dev-to-uploads.s3.amazonaws.com/i/langmnry3pjtec2101iz.png)

Again, it's Easy! It will probably come as no surprise at all at this point that the command to get a list of all repositories for an account is just:
`cloudsmith list repos OWNER`

And similarily, the command to retreive a list of all the Entitlement Tokens created in a repository is simply:
`cloudsmith list ents OWNER/REPO`

We've also got the following resources to help you:

[CLI Documentation](https://help.cloudsmith.io/docs/cli) - for additional help.
[CLI GitHub Repository](https://github.com/cloudsmith-io/cloudsmith-cli) - to see how it is built.
[CLI Cloudsmith Repository](CLI Cloudsmith Repository) - for pre-releases of the CLI.

{% youtube R-g8ZhDwTKk %}

Finally, we wish you well on your path to better software and better DevOps. Remember - **Be Awesome, Automate Everything**.