- Get the updates of the dependencies of a project.
- Verify Semver compliance.
Execute the following commands:
sbt "assembly" "application/dependencyList/toFile /tmp/dep-list.log -f"
export DL_FILENAME=/tmp/dep-list.log
export DL_EXCLUSIONS=com.cmartin.learn #comma separated
java -jar application/target/scala-2.13/depAnalyzerApp.jar
Build the image
sbt Docker/publishLocal
Run the app
sbt "application/dependencyList/toFile /tmp/dep-list.log -f"
# TODO set environment variables
docker run --rm --name depanalyzer \
--env DL_FILENAME=/tmp/dep-list.log \
--env DL_EXCLUSIONS=com.cmartin.learn \
--volume "/tmp:/tmp" dependency-analyzer-app:1.0.0-SNAPSHOT
http -v "https://search.maven.org/solrsearch/select?q=g:dev.zio%20AND%20a:zio_2.13&wt=json"
http -v "https://search.maven.org/solrsearch/select?q=g:com.typesafe.akka%20AND%20a:akka-actor_2.13%20AND%20v:2.5.25%20AND%20p:jar&rows=1&wt=json"
- manage
java.io.FileNotFoundException
- manage
429 Too Many Requests
HTTP status code
The App has the following modules:
- FileManager: access to filesystem
- LogicManager: collection processing, filtering, statistics, regex, etc.
- HttpManager: HTTP client
- LoggingManager: logging app operations
Get dependencies test command
curl
curl -s "https://search.maven.org/solrsearch/select?q=g:dev.zio+AND+a:zio_2.13&wt=json" | jq
Analysis
Obtener dependencias y generar un archivo
Lista de tareas previas al caso de uso:
- sbt dependencyList > sbt-dependencies.log
- regex para filtrar líneas con deps:
^[a-z]([a-z0-9-_\.]+:){2}([0-9A-Z-\.]+)
- log con los positivos y negativos para verificar si la regex filtra correctamente
- split del GAV por el caracter ":" (dos puntos)
- añadir las deps a un Set para eliminar duplicados
- obtener del repository todas las dependencias para el par (G,A)
- obtener la última versión
- consultar con maven central para verificar si ha cambiado
- elaborar el report con las dependencias que tienen nueva versión
- Se obtiene la colección de dependencias de un archivo de texto en el que cada línea de texto contiene un dependencia.
- Se realiza el parsing de cada línea mediante una
regex
y se obtiene una colección de resultados coincidentes o no. - Se filtran los casos coincidentes de la colección anterior.
- Se filtran las dependencias que pertenecen a determinados `groupId'.
- Se consultan las versiones de la colección de dependencias final.
- Se obtiene una colección de resultados que contiene la dependencia local y la dependencia remota.
- ZIO Error Management: https://www.youtube.com/watch?v=mGxcaQs3JWI
- Functional Concurrency in Scala with ZIO: https://www.youtube.com/watch?v=m5nas4Hndqo&t=
- Application Modules / ZLayer / Dependency injection
- http://queirozf.com/entries/scala-regular-expressions-examples-reference
- https://logback.qos.ch/manual/configuration.html
- ZIO log example: https://github.com/zio/zio-logging/blob/master/docs/reconfigurable-logger.md#console-logger-with-configuration-by-http-apis