[![Community Project header](https://github.com/newrelic/open-source-office/raw/master/examples/categories/images/Community_Project.png)](https://github.com/newrelic/open-source-office/blob/master/examples/categories/index.md#category-community-project) # newrelic-cli [![Testing](https://github.com/newrelic/newrelic-cli/workflows/Testing/badge.svg)](https://github.com/newrelic/newrelic-cli/actions) [![Go Report Card](https://goreportcard.com/badge/github.com/newrelic/newrelic-cli?style=flat-square)](https://goreportcard.com/report/github.com/newrelic/newrelic-cli) [![GoDoc](https://godoc.org/github.com/newrelic/newrelic-cli?status.svg)](https://godoc.org/github.com/newrelic/newrelic-cli) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/newrelic/newrelic-cli/blob/main/LICENSE) [![CLA assistant](https://cla-assistant.io/readme/badge/newrelic/newrelic-cli)](https://cla-assistant.io/newrelic/newrelic-cli) [![Release](https://img.shields.io/github/v/release/newrelic/newrelic-cli?sort=semver)](https://github.com/newrelic/newrelic-cli/releases/latest) [![Homebrew](https://img.shields.io/badge/dynamic/json.svg?url=https://formulae.brew.sh/api/formula/newrelic-cli.json&query=$.versions.stable&label=homebrew)](https://formulae.brew.sh/formula/newrelic-cli) [![Docker Stars](https://img.shields.io/docker/stars/newrelic/cli.svg)](https://hub.docker.com/r/newrelic/cli) [![Docker Pulls](https://img.shields.io/docker/pulls/newrelic/cli.svg)](https://hub.docker.com/r/newrelic/cli) [![Docker Size](https://img.shields.io/docker/image-size/newrelic/cli.svg?sort=semver)](https://hub.docker.com/r/newrelic/k8s-operator) [![Docker Version](https://img.shields.io/docker/v/newrelic/cli.svg?sort=semver)](https://hub.docker.com/r/newrelic/k8s-operator) The New Relic CLI is an officially supported command line interface for New Relic, released as part of the [Developer Toolkit](https://developer.newrelic.com). - [Overview](#overview) - [Getting Started](#getting-started) - [New Relic CLI Documentation](docs/cli/newrelic.md) - [Installation](#installation--upgrades) - [MacOS](#macos) - [Windows](#windows) - [Linux](#linux) - [Pre-built binaries](#pre-built-binaries) - [Docker](#docker) - [Example Usage](#example-usage) - [Development](#development) - [Community Support](#community-support) - [Issues / Enhancement Requests](#issues--enhancement-requests) - [Contributing](#contributing) - [Other Resources](#other-resources) - [Open Source License](#open-source-license) ## Overview The New Relic CLI is a project to consolidate some of the tools that New Relic offers for managing resources. Current scope is limited while the framework is being developed, but the tool as-is does perform a subset of tasks. - Entity Search: Search for entities across all your New Relic accounts - Entity Tagging: Manage tags across all of your entities - Deployment Markers: Easily record an APM Application deployment within New Relic. ### Getting Started For a quick guide on getting started with the New Relic CLI, see our [Getting Started](https://github.com/newrelic/newrelic-cli/blob/main/docs/GETTING_STARTED.md) page. ### New Relic CLI Documentation The latest New Relic CLI documentation is available in the repository's [docs](https://github.com/newrelic/newrelic-cli/blob/main/docs/cli/newrelic.md) directory. ## Installation & Upgrades Installation options are available for various platforms. If you're running an older version of the CLI you can use these commands to update to the latest version. ### MacOS #### Automated install `curl -Ls https://download.newrelic.com/install/newrelic-cli/scripts/install.sh | bash` #### Homebrew Install the New Relic CLI on MacOS via [`homebrew`](https://brew.sh/). With `homebrew` installed, run: ``` brew install newrelic-cli ``` ### Windows Installation is supported on 64-bit Windows. #### Automated install `[Net.ServicePointManager]::SecurityProtocol = 'tls12, tls'; (New-Object System.Net.WebClient).DownloadFile("https://download.newrelic.com/install/newrelic-cli/scripts/install.ps1", "$env:TEMP\install.ps1"); & $env:TEMP\install.ps1` #### Scoop ```powershell scoop bucket add newrelic-cli https://github.com/newrelic/newrelic-cli.git scoop install newrelic-cli ``` #### Chocolatey ```powershell choco install newrelic-cli ``` #### Standalone installer A standalone MSI installer is available on the New Relic download site. You can download the installer for the latest version [here](https://download.newrelic.com/install/newrelic-cli). #### Powershell Silent installation of the latest version of the CLI can be achieved via the follwing Powershell command: ```powershell (New-Object System.Net.WebClient).DownloadFile("https://github.com/newrelic/newrelic-cli/releases/latest/download/NewRelicCLIInstaller.msi", "$env:TEMP\NewRelicCLIInstaller.msi"); ` msiexec.exe /qn /i "$env:TEMP\NewRelicCLIInstaller.msi" | Out-Null; ` ``` ### Linux #### Automated install `curl -Ls https://download.newrelic.com/install/newrelic-cli/scripts/install.sh | bash` #### Snapcraft Linux binaries can be installed via [Snapcraft](https://snapcraft.io/). With the `snapd` daemon installed, run: ``` sudo snap install newrelic-cli ``` ### Pre-built binaries Pre-built binaries are available for all of the above platforms. You can download the latest releases [here](https://github.com/newrelic/newrelic-cli/releases/latest). The binaries and their checksums are signed and can be verified against the Developer Toolkit team's [public PGP key](https://newrelic.github.io/observability-as-code/developer-toolkit.asc). Verify that the fingerprint for the downloaded key matches the following: ``` gpg --fingerprint nr-developer-toolkit@users.noreply.github.com D3EE EEE8 80A9 1DEE 209A 82CC 4F9A 9B5B 96EC 30B9 ``` When verifying pre-built binaries and checksums, use the long format (the short format is not secure). For example: ``` gpg --keyid-format long --verify checksums.txt.sig checksums.txt ``` ### Docker There is an official [docker image](https://hub.docker.com/r/newrelic/cli) that can be utilized for running commands as well. ## Example Usage #### Querying an APM application (using the Docker image) ```bash # Pull the latest container $ docker pull newrelic/cli # Run the container interactively, remove it once the command exists # Also must pass $NEW_RELIC_API_KEY to the container $ docker run -it --rm \ -e NEW_RELIC_API_KEY \ newrelic/cli \ apm application get --name WebPortal --accountId 2508259 [ { "AccountID": 2508259, "ApplicationID": 204261368, "Domain": "APM", "EntityType": "APM_APPLICATION_ENTITY", "GUID": "MjUwODI1OXxBUE18QVBQTElDQVRJT058MjA0MjYxMzY4", "Name": "WebPortal", "Permalink": "https://one.newrelic.com/redirect/entity/MjUwODI1OXxBUE18QVBQTElDQVRJT058MjA0MjYxMzY4", "Reporting": true, "Type": "APPLICATION" } ] ``` See the [Getting Started guide](docs/GETTING_STARTED.md) for a more in-depth introduction to the capabilities of the New Relic CLI. ### Getting Help In order to get help about what commands are available, the trusty `--help` flag is here to assist. Alternatively, using just the `help` subcommand also works. ``` newrelic --help newrelic help ``` Help is also available for the nested sub-commands. For example, the with the following command, you can retrieve help for the `apm` sub-command. ``` newrelic apm --help newrelic help apm ``` Using the CLI in this way, users are able to inspect what commands are available, with some instruction on their usage. ### Patterns Throughout the help, you may notice common patterns. The term `describe` is used to perform list or get operations, while the `create` and `delete` terms are used to construct or destroy an item, respectively. ## Development ### Requirements - Go 1.19+ - GNU Make - git ### Building The `newrelic` command will be built in `bin/ARCH/newrelic`, where `ARCH` is either `linux`, `darwin`, or `windows`, depending on your build environment. You can run it directly from there or install it by moving it to a directory in your `PATH`. ``` # Default target is 'build' $ make # Explicitly run build $ make build # Locally test the CI build scripts # make build-ci ``` ### Testing Before contributing, all linting and tests must pass. Tests can be run directly via: ``` # Tests and Linting $ make test # Only unit tests $ make test-unit # Only integration tests $ make test-integration ``` ### Working with recipes #### Core recipe library A core library of installation recipes is included with the CLI for use within the `install` command. Recipe files are syndicated from [open-install-library](https://github.com/newrelic/open-install-library) and embedded in the CLI binary at release time. To fetch the latest recipe library while developing, the following make target can be used: ``` make recipes ``` Recipe files are stored in `internal/install/recipes/files`. Once files have been fetched, they will be included in future CLI builds. If a particular version of the recipe library is desired, the archive download URL can be passed to the make target via the `RECIPES_ARCHIVE_URL` option: ``` make recipes RECIPES_ARCHIVE_URL=https://github.com/newrelic/open-install-library/releases/download/v0.50.0/recipes.zip ``` To clean recipe files, use the `recipes-clean` target: ``` make recipes-clean ``` #### Custom recipe files A path can also be passed to the `--localRecipes` flag when running the `install` command. This will bypass the methods described above and load files from the designated path. ### Commit Messages Using the following format for commit messages allows for auto-generation of the [CHANGELOG](CHANGELOG.md): #### Format: `(): ` | Type | Description | Change log? | | ---------- | --------------------- | :---------: | | `chore` | Maintenance type work | No | | `docs` | Documentation Updates | Yes | | `feat` | New Features | Yes | | `fix` | Bug Fixes | Yes | | `refactor` | Code Refactoring | No | #### Scope This refers to what part of the code is the focus of the work. For example: **General:** - `build` - Work related to the build system (linting, makefiles, CI/CD, etc) - `release` - Work related to cutting a new release **Package Specific:** - `newrelic` - Work related to the New Relic package - `http` - Work related to the `internal/http` package - `alerts` - Work related to the `pkg/alerts` package ### Generating CLI Documentation **Note:** This requires the repo to be in your GOPATH [(godoc issue)](https://github.com/golang/go/issues/26827) ``` $ make docs ``` ## Community Support New Relic hosts and moderates an online forum where you can interact with New Relic employees as well as other customers to get help and share best practices. - [Roadmap](https://newrelic.github.io/developer-toolkit/roadmap/) - As part of the Developer Toolkit, the roadmap for this project follows the same RFC process - [Issues or Enhancement Requests](https://github.com/newrelic/newrelic-cli/issues) - Issues and enhancement requests can be submitted in the Issues tab of this repository. Please search for and review the existing open issues before submitting a new issue. - [Contributors Guide](CONTRIBUTING.md) - Contributions are welcome (and if you submit a Enhancement Request, expect to be invited to contribute it yourself :grin:). - [Community discussion board](https://discuss.newrelic.com/c/build-on-new-relic/developer-toolkit) - Like all official New Relic open source projects, there's a related Community topic in the New Relic Explorers Hub. Please do not report issues with the CLI to New Relic Global Technical Support. Instead, visit the [`Explorers Hub`](https://discuss.newrelic.com/c/build-on-new-relic) for troubleshooting and best-practices. ## Issues / Enhancement Requests Issues and enhancement requests can be submitted in the [Issues tab of this repository](../../issues). Please search for and review the existing open issues before submitting a new issue. ## Contributing Contributions are welcome (and if you submit a Enhancement Request, expect to be invited to contribute it yourself :grin:). Please review our [Contributors Guide](CONTRIBUTING.md). Keep in mind that when you submit your pull request, you'll need to sign the CLA via the click-through using CLA-Assistant. If you'd like to execute our corporate CLA, or if you have any questions, please drop us an email at opensource@newrelic.com. ## Other Resources There are a handful of other useful tools that this does not replace. Here are some useful links to other tools that you might be interested in using at this time. - [NR1 CLI](https://developer.newrelic.com/build-tools/new-relic-one-applications/cli): Command line interface for managing development workflows for custom Nerdpacks on New Relic One. - [New Relic Lambda CLI](https://github.com/newrelic/newrelic-lambda-cli): A CLI to install the New Relic AWS Lambda integration and layers. - [New Relic Diagnostics](https://docs.newrelic.com/docs/agents/manage-apm-agents/troubleshooting/new-relic-diagnostics): A utility that automatically detects common problems with New Relic agents. ## Open Source License This project is distributed under the [Apache 2 license](LICENSE).