-
Task
-
Resolution: Unresolved
-
Normal
-
None
-
None
-
False
-
-
False
-
-
-
None
Summary
The MTA CLI used to analyze and transform applications. As of now, it requires a container runtime due to the analyze and transform commands running in containers.
This enhancement will discuss a new implementation of MTA that does not require a container runtime for analysis. This enhancement will also only focus on the first phase of this implementation: a containerless distribution that will run a Java analysis.
Motivation
MTA currently requires a container runtime. This presents problems for some users.
For example, an organization may have a strict regulations that do not allow installation of container runtimes on company computers. This results in the MTA CLI being unavailable to assist these companies with MTA analysis.
NOTE
This will impact Java analysis
Technical Implementation
A new analyze subcommand can be introduced for MTA to recognize when to start the containerized version of analysis versus the non-containerized option. This could look like `MTA analyze-bin --provider=java <options>`. Another option for starting the analyze subcommand without running containers would be to detect existing packaged requirements at the expected location discussed in the [requirements](#requirements). However, in this case, we would want to provide an option to disable this behavior.
There will be a new package in MTA, `no-container`, that will be added for this case. This package will import the [analyzer](https://github.com/MTA/analyzer-lsp), [external Java provider](https://github.com/MTA/analyzer-lsp/tree/main/external-providers/java-external-provider), and the [static-report](https://github.com/MTA/static-report).
```
.
├── README.md
├── cmd
│ ├── analyze.go
│ ├── analyzr-java.go
│ ├── .....
├── pkg
│ ├── container
│ └── no-container
│ │ ├── no-container.go
│ │ ├── static-report.go
│ ├── java
│ │ ├── internal-java-provider.go
│ ├── dotnet
│ ├── .....
```
With the analyzer and external Java provider imported, MTA will create and init an internal Java provider, which will be defined as an analyzer `InternalProviderClient`. This Java provider will not require an additional binary nor require running outside of the analyzer engine. It will be started as an internal provider rather than a GRPC provider.