# codacy/codacy-analysis-cli architecture

> Architecture diagram of the GitHub repository codacy/codacy-analysis-cli, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/codacy/codacy-analysis-cli
- Repository: https://github.com/codacy/codacy-analysis-cli

## Overview

This legacy Codacy CLI runs local static analysis and optionally uploads results. The main workflow is command parsing, configuration and tool selection, source-file collection, issue/metrics/duplication execution, result formatting, then optional upload. Separate branches cover remote tool/pattern configuration, local cache, Git validation, and configuration validation. The README documents those analysis categories and formats; sampled excerpts do not expose all wiring, so uncertain links are omitted.

Main entry points: [`cli/src/main/scala/com/codacy/analysis/cli/command/AnalyseCommand.scala`](https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/command/AnalyseCommand.scala) (Analyze command), [`cli/src/main/scala/com/codacy/analysis/cli/analysis/AnalyseExecutor.scala`](https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/analysis/AnalyseExecutor.scala) (Analysis executor), [`toolRepository-remote/src/main/scala/com/codacy/toolRepository/remote/ToolRepositoryRemote.scala`](https://github.com/codacy/codacy-analysis-cli/blob/master/toolRepository-remote/src/main/scala/com/codacy/toolRepository/remote/ToolRepositoryRemote.scala) (Remote tool catalog), [`cli/src/main/scala/com/codacy/analysis/cli/Main.scala`](https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/Main.scala) (CLI dispatcher)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["CLI and configuration"]
  node_main["CLI dispatcher<br/>[Main.scala]"]
  node_commands["Analyze command"]
  node_validation["Config validation"]
  node_configuration["CLI configuration"]
  node_configfile["Project config"]
  node_git["Git validation<br/>[Repository.scala]"]
end

subgraph group_analysis["Analysis execution"]
  node_executor["Analysis executor"]
  node_collector["File collection"]
  node_analyser["Plugin analyser"]
  node_metrics["Metrics analysis<br/>[MetricsTool.scala]"]
  node_duplication["Duplication analysis"]
end

subgraph group_tools["Tool catalog"]
  node_toolspec["Tool specifications"]
  node_remote["Remote tool catalog"]
  node_cache[("Tool cache<br/>[DataStorage.scala]")]
end

subgraph group_results["Results and upload"]
  node_formatter["Result formatting<br/>[Formatter.scala]"]
  node_formats["Text JSON SARIF<br/>[Json.scala]"]
  node_uploader["Results uploader"]
  node_client["Codacy client<br/>[CodacyClient.scala]"]
end

node_user(("CLI user"))
node_codacy["Codacy API"]

node_user -->|"invokes"| node_main
node_main -->|"dispatches"| node_commands
node_commands -->|"builds"| node_configuration
node_commands -->|"loads"| node_configfile
node_commands -->|"validates commit"| node_git
node_commands -->|"runs"| node_executor
node_commands -->|"uploads results"| node_uploader
node_commands -->|"constructs catalog"| node_remote
node_executor -->|"collects files"| node_collector
node_executor -->|"selects tools"| node_toolspec
node_executor -->|"runs issues"| node_analyser
node_executor -->|"runs metrics"| node_metrics
node_executor -->|"runs clones"| node_duplication
node_remote -->|"fetches tools"| node_codacy
node_remote -->|"reads/writes cache"| node_cache
node_executor -->|"emits results"| node_formatter
node_formatter -->|"selects format"| node_formats
node_uploader -->|"sends batches"| node_client
node_client -->|"posts results"| node_codacy
node_validation -->|"validates settings"| node_configfile

click node_main "https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/Main.scala"
click node_commands "https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/command/AnalyseCommand.scala"
click node_validation "https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/command/ValidateConfigurationCommand.scala"
click node_configuration "https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/configuration/CLIConfiguration.scala"
click node_configfile "https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/configuration/CodacyConfigurationFile.scala"
click node_git "https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/git/Repository.scala"
click node_executor "https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/analysis/AnalyseExecutor.scala"
click node_collector "https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/files/FileCollector.scala"
click node_analyser "https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/analysis/CodacyPluginsAnalyser.scala"
click node_metrics "https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/tools/MetricsTool.scala"
click node_duplication "https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/tools/DuplicationTool.scala"
click node_toolspec "https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/tools/ToolRepository.scala"
click node_remote "https://github.com/codacy/codacy-analysis-cli/blob/master/toolRepository-remote/src/main/scala/com/codacy/toolRepository/remote/ToolRepositoryRemote.scala"
click node_cache "https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/storage/DataStorage.scala"
click node_formatter "https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/formatter/Formatter.scala"
click node_formats "https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/formatter/Json.scala"
click node_uploader "https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/upload/ResultsUploader.scala"
click node_client "https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/clients/CodacyClient.scala"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_commands,node_validation,node_configuration,node_configfile,node_git,node_user toneBlue
class node_executor,node_collector,node_analyser,node_metrics,node_duplication toneAmber
class node_toolspec,node_remote,node_cache,node_codacy toneMint
class node_formatter,node_formats,node_uploader,node_client toneRose
```

## Components

### CLI and configuration

- [CLI dispatcher](https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/Main.scala): `cli/src/main/scala/com/codacy/analysis/cli/Main.scala`
- [Analyze command](https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/command/AnalyseCommand.scala): `cli/src/main/scala/com/codacy/analysis/cli/command/AnalyseCommand.scala`
- [Config validation](https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/command/ValidateConfigurationCommand.scala): `cli/src/main/scala/com/codacy/analysis/cli/command/ValidateConfigurationCommand.scala`
- [CLI configuration](https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/configuration/CLIConfiguration.scala): `cli/src/main/scala/com/codacy/analysis/cli/configuration/CLIConfiguration.scala`
- [Project config](https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/configuration/CodacyConfigurationFile.scala): `core/src/main/scala/com/codacy/analysis/core/configuration/CodacyConfigurationFile.scala`
- [Git validation](https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/git/Repository.scala): `core/src/main/scala/com/codacy/analysis/core/git/Repository.scala`

### Analysis execution

- [Analysis executor](https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/analysis/AnalyseExecutor.scala): `cli/src/main/scala/com/codacy/analysis/cli/analysis/AnalyseExecutor.scala`
- [File collection](https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/files/FileCollector.scala): `core/src/main/scala/com/codacy/analysis/core/files/FileCollector.scala`
- [Plugin analyser](https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/analysis/CodacyPluginsAnalyser.scala): `core/src/main/scala/com/codacy/analysis/core/analysis/CodacyPluginsAnalyser.scala`
- [Metrics analysis](https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/tools/MetricsTool.scala): `core/src/main/scala/com/codacy/analysis/core/tools/MetricsTool.scala`
- [Duplication analysis](https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/tools/DuplicationTool.scala): `core/src/main/scala/com/codacy/analysis/core/tools/DuplicationTool.scala`

### Tool catalog

- [Tool specifications](https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/tools/ToolRepository.scala): `core/src/main/scala/com/codacy/analysis/core/tools/ToolRepository.scala`
- [Remote tool catalog](https://github.com/codacy/codacy-analysis-cli/blob/master/toolRepository-remote/src/main/scala/com/codacy/toolRepository/remote/ToolRepositoryRemote.scala): `toolRepository-remote/src/main/scala/com/codacy/toolRepository/remote/ToolRepositoryRemote.scala`
- [Tool cache](https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/storage/DataStorage.scala): `core/src/main/scala/com/codacy/analysis/core/storage/DataStorage.scala`

### Results and upload

- [Result formatting](https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/formatter/Formatter.scala): `cli/src/main/scala/com/codacy/analysis/cli/formatter/Formatter.scala`
- [Text JSON SARIF](https://github.com/codacy/codacy-analysis-cli/blob/master/cli/src/main/scala/com/codacy/analysis/cli/formatter/Json.scala): `cli/src/main/scala/com/codacy/analysis/cli/formatter/Json.scala`
- [Results uploader](https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/upload/ResultsUploader.scala): `core/src/main/scala/com/codacy/analysis/core/upload/ResultsUploader.scala`
- [Codacy client](https://github.com/codacy/codacy-analysis-cli/blob/master/core/src/main/scala/com/codacy/analysis/core/clients/CodacyClient.scala): `core/src/main/scala/com/codacy/analysis/core/clients/CodacyClient.scala`

### Other components

- **CLI user**
- **Codacy API**

## Connections

- CLI user → CLI dispatcher: invokes
- CLI dispatcher → Analyze command: dispatches
- Analyze command → CLI configuration: builds
- Analyze command → Project config: loads
- Analyze command → Git validation: validates commit
- Analyze command → Analysis executor: runs
- Analyze command → Results uploader: uploads results
- Analyze command → Remote tool catalog: constructs catalog
- Analysis executor → File collection: collects files
- Analysis executor → Tool specifications: selects tools
- Analysis executor → Plugin analyser: runs issues
- Analysis executor → Metrics analysis: runs metrics
- Analysis executor → Duplication analysis: runs clones
- Remote tool catalog → Codacy API: fetches tools
- Remote tool catalog → Tool cache: reads/writes cache
- Analysis executor → Result formatting: emits results
- Result formatting → Text JSON SARIF: selects format
- Results uploader → Codacy client: sends batches
- Codacy client → Codacy API: posts results
- Config validation → Project config: validates settings
