codacy / codacy-analysis-cli

The Codacy Analysis CLI is a command line interface that enables you to execute Codacy code analysis locally.
https://www.codacy.com
GNU Affero General Public License v3.0
94 stars 33 forks source link
codacy command-line command-line-app command-line-interface command-line-tool lint linter scala static-analysis

Codacy Analysis CLI

Codacy Badge Codacy Badge CircleCI Docker Version Maven Central

Command line interface to execute Codacy code analysis locally.

With a single command you can:

Prerequisites

Usage

Development

Install

curl -L https://github.com/codacy/codacy-analysis-cli/archive/master.tar.gz | tar xvz
cd codacy-analysis-cli-* && sudo make install

Windows

Pre-Requisites

Docker Configuration

Once the pre-requisites are met, it’s time to enable the connectivity between bash and docker.

It’s mandatory that the daemon is exposed without TLS. In order to do that go to Docker Settings -> General. Just click on the checkbox with the label 'Expose daemon on tcp://localhost:2375 without TLS' and docker will reload.

Preparing docker client on bash

Now it’s time to go to the bash and install and configure the docker client.

If you are using Windows 10 (build above 1803) the following command will make the docker client available from the bash sudo ln -s "/mnt/c/Program Files/Docker/Docker/resources/bin/docker.exe" /usr/local/bin/docker

If you are using a previous version of Windows 10, here you can find a very easy tutorial to follow.

Since you’ll be using the WSL, the variable DOCKER_HOST needs to be configured to tcp://0.0.0.0:2375, in order to do that just type the following command on the bash

export DOCKER_HOST=tcp://0.0.0.0:2375

It’s also possible to add this variable to your .bashrc or .bash_profile files so that the variable is always ready when you start the bash

echo "export DOCKER_HOST=tcp://0.0.0.0:2375" >> ~/.bash_profile

echo "export DOCKER_HOST=tcp://0.0.0.0:2375" >> ~/.bashrc

Mac

If you are using Apple silicon, please make sure to:

Installing codacy-analysis-cli

At this point, codacy-analysis-cli is ready to be installed.

In bash, go to the folder you want to download the tool into and type the following commands:

sudo apt-get install make

curl -L https://github.com/codacy/codacy-analysis-cli/archive/master.tar.gz | tar xvz

cd codacy-analysis-cli-*

Once again, due to the use of the WSL, it’s mandatory to add the two highlighted lines to the Makefile in this directory.

Before the test section:

export DOCKER_HOST=tcp://0.0.0.0:2375

and, in the install, section:

docker login

Finally, just type the following command and the installation will start

sudo make install

When Docker’s username is required, be sure to write the username and not the e-mail because depending on how you’ve created your docker account, they might be different.

Usage

Script

codacy-analysis-cli analyze \
  --tool <TOOL-SHORT-NAME> \
  --directory <SOURCE-CODE-PATH>

Java

java -jar codacy-analysis-cli-assembly-{VERSION}.jar analyze \
  --tool <TOOL-SHORT-NAME> \
  --directory <SOURCE-CODE-PATH> \
  # other options

Local

sbt "codacyAnalysisCli/runMain com.codacy.analysis.cli.Main analyze --tool <TOOL-SHORT-NAME> --directory <SOURCE-CODE-PATH>"

Docker

docker run \
  --rm=true \
  --env CODACY_CODE="$CODACY_CODE" \
  --volume /var/run/docker.sock:/var/run/docker.sock \
  --volume "$CODACY_CODE":"$CODACY_CODE" \
  --volume /tmp:/tmp \
  codacy/codacy-analysis-cli \
    analyze --tool <TOOL-SHORT-NAME>

Output

The default format for the CLI output is text and is divided into 3 categories:

Issues

Issues reported by the tools that vary between 3 different levels (Error, Warning and Info). Example:

Found [Error] `Expected "#E1675A" to be "#e1675a" (color-hex-case)` in styles/variables.less:4 (Stylelint_color-hex-case)
Found [Warning] `'object short notation' is available in ES6 (use esnext option) or Mozilla JS extensions (use moz).` in scripts/main.js:28 (iterator)
Found [Info] `Missing semicolon.` in views/components/Progress.jsx:18 (asi)

Metrics

The metrics data is printed for each file and contains 5 types of data:

Example:

Found [Metrics] in generic/Test.java:
  CC - 33
  LOC - 778
  CLOC - 864
  #methods - 3
  #classes - 1

Clones

Each clone found is printed with information about the total number of lines, number of tokens and all the occurrences (the lines where it starts and where it ends). Example:

Found [Clone] 7 duplicated lines with 10 tokens:
  generic/test.rb
    l. 681 - 687
    l. 693 - 699
  generic/another_test.rb
    l. 601 - 607
    l. 193 - 199

Exit Status Codes

Configuration

Commands and Configuration

Environment Variables

Local configuration

To perform certain advanced configurations, Codacy allows to create a configuration file. Check our documentation for more details.

Remote configuration

To run locally the same analysis that Codacy does in your code you can request remotely the configuration.

Project Token

See how to generate a project token.

⚠️ Warning: For security reasons we recommend that you store your project API token in the environment variable CODACY_PROJECT_TOKEN instead of setting --project-token.

codacy-analysis-cli analyze \
  --project-token <PROJECT-TOKEN> \
  --tool <TOOL-SHORT-NAME> \
  --directory <SOURCE-CODE-PATH>

API Token

See how to generate an account API token.

⚠️ Warning: For security reasons we recommend that you store your account API token in the environment variable CODACY_API_TOKEN instead of setting --api-token.

The provider, username, and project name can be retrieved from the URL in Codacy.

codacy-analysis-cli analyze \
  --api-token <API-TOKEN> \
  --provider <PROVIDER> \
  --username <USERNAME> \
  --project <PROJECT-NAME> \
  --tool <TOOL-SHORT-NAME> \
  --directory <SOURCE-CODE-PATH>

Build

Compile

Test

sbt test

Format Code

sbt scalafmtAll scalafmtSbt

Dependency Updates

sbt dependencyUpdates

Static Analysis

sbt scapegoat
sbt scalafix

Coverage

sbt coverage test
sbt coverageReport
sbt coverageAggregate
export CODACY_PROJECT_TOKEN="<TOKEN>"
sbt codacyCoverage

Docker

Library

Breaking Changes

What is Codacy

Codacy is a platform that monitors your technical debt, helps you improve your code quality and security, teaches best practices to your developers, and helps you save time in code reviews. We help developers ship billions of lines of code per day by automating and standardizing code reviews.
Integrating seamlessly into workflows, Codacy helps engineering teams save time in code reviews and find, fix, and prevent coding defects that would otherwise stack up as technical debt. Our platform uses Artificial Intelligence to suggest code quality fixes. Codacy supports 40+ languages & frameworks and is available in free open-source.

Start a free trial to learn more.

Among Codacy’s features

Codacy also helps keep track of Code coverage, Code duplication, and Code complexity.

Codacy supports PHP, Python, Ruby, Java, JavaScript, and Scala, among others.

Free for Open Source

Codacy is free for Open Source projects.