diff --git a/.gitignore b/.gitignore index 11cf707..d3894b9 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ node_modules/ **/web-ext-artifacts/ **/node/ **/target/ +package-lock.json # Logs **/pnpm-debug.log* diff --git a/apps/sonar-plugin/DEV_TMP.md b/apps/sonar-plugin/DEV_TMP.md new file mode 100644 index 0000000..69387e8 --- /dev/null +++ b/apps/sonar-plugin/DEV_TMP.md @@ -0,0 +1,42 @@ +# FICHIER TEMPORAIRE POUR TEST MANUEL DU DEV + +## Contexte +Ce fichier décrit comment tester manuellement le plugin creedengo-dashboard en cours de développement. +Ceci est valable le temps de la mise en place d'un système automatique de test d'integration avec plusieurs plugins car le pluigin creedengo-dashboard a besoin de : +- un autre plugin creedengo déjà installé (ex : creedengo-python) +- les profils Creendego installés également +- un projet de test analysé et dont les résultats sont disponibles dans SonarQube + +## Pré-requis +- installer Rancher Desktop ou un équivalent pour pouvoir faire du Docker +- récupérer le repository "creedengo-python" qui servira de support pour le SonarQube local + +## Process +- 1 - suivre les instructions pour lancer SonarQube avec Docker et vérifier que le Sonarqube fonctionne + - doc du process : https://github.com/green-code-initiative/creedengo-common/blob/main/doc/HOWTO.md#installing-local-environment-local-sonarqube + - => à suivre jusqu'à la section "HOWTO reinstall SonarQube (if needed)" (sauf la commande "mvn verify" à ne pas lancer ... pas besoin de lancer les tests) + - => OBJECTIF : avoir un SonarQube local avec le plugin creedengo-python installé et fonctionnel +- 2 - lancer l'analyse d'un projet de test "environnement réel" : + - aller dans le répertoire du projet présent dans les source de TI (ex : src/it/test-projects/creedengo-python-plugin-test-project) + - lancer le shell permettant de faire l'analyse : ./tool_send_to_sonar.sh + - vérifier que l'analyse est bien présente dans le SonarQube local (via l'IHM web) +- 3 - builder la partie IHM du plugin creedengo-dashboard + - aller dans le répertoire "creedengo-dashboard" + - lancer la commande : ./tool_build.sh +- 4 - builder le plugin sonar "creedengo-dashboard" en local + - aller dans le répertoire creedengo-dashboard/apps/sonar-plugin + - lancer la commande : ./tool_build.sh +- 5 - installer le plugin buildé dans le sonarqube local (ex : celui de creedengo-python qui est déjà lancé et dispo) + - lancer la commande : ./tool_docker-install-plugin.sh (WARNING : il y a en dur en paramètre interne le fait qu'on utilise le plugin creedengo-python comme support, notamment référence au nom du sonar local pour le python => à variabiliser plus tard) + - lancer la commande de log pour vérifier le bon redémarrage du sonar : ./tool_docker-logs.sh (dans le répertoire "creedengo-python" car c'est lui qui pilote le Sonarqube) + - WARNING : le sonarqube a changé de port !!! (rechecker le port dans docker pour pouvoir se reconnecter à l'IHM web - les credentials sont conservés et l'analyse projet aussi) + - vérifier via l'IHM web que le plugin creedengo-dashboard est bien installé (dans le marketplace de la partier d'admin de sonarqube) + - vérifier que le plugin fonctionne sur l'IHM : aller dans le projet analysé, puis menu "More" + +## TODO DDC +- automatiser ce process de test manuel en automaytique via le système d'integration présent dans creedengo-python par exemple + - différence : un 1er plugin doit être dispo, le profil installé et un projet analysé + - piste : + - utiliser le système de package de github pour y installer les JARs de chaque plugin (en même temps qu'une release via github action) + - voir comment maven peut référencer ces JARs dans les packages github pour pouvoir les utiliser pour le système TI + - cf doc github officielle : https://docs.github.com/fr/packages \ No newline at end of file diff --git a/apps/sonar-plugin/Dockerfile b/apps/sonar-plugin/Dockerfile new file mode 100644 index 0000000..420d04c --- /dev/null +++ b/apps/sonar-plugin/Dockerfile @@ -0,0 +1,43 @@ +# Dockerfile to build a SonarQube plugin with Maven and run it in SonarQube + +ARG MAVEN_BUILDER=3-openjdk-17-slim +ARG SONARQUBE_VERSION=25.9.0.112764-community + +# STEP 1 : build the SonarQube plugin with Maven +#FROM maven:${MAVEN_BUILDER} AS builder + +#USER root +# +#RUN apt-get update && \ +# apt-get install -y curl && \ +# curl -fsSL https://deb.nodesource.com/setup_22.x | bash - && \ +# apt-get install -y nodejs +# +#RUN echo "node -version :" && node --version +#RUN echo "npm -version :" && npm --version +# +#RUN corepack enable && corepack prepare pnpm@10.13.1 --activate +#RUN echo "pnpm -version :" && pnpm --version + +#COPY . /usr/src/creedengo +# +#WORKDIR /usr/src/creedengo +#COPY src src/ +#COPY pom.xml tool_build.sh ./ +# +#RUN echo "********** --- ********** Contenu du dossier - ETAPE 1 :" && ls -l +#RUN echo "********** --- ********** Contenu du dossier 'target' - ETAPE 2 :" && ls -l target +#RUN echo "********** --- ********** Contenu du dossier 'node' - ETAPE 3 :" && ls -l node +#RUN echo "********** --- ********** Contenu du dossier 'node_modules' - ETAPE 4 :" && ls -l node_modules +#RUN echo "********** --- ********** Contenu du dossier 'node_modules/@creedengo' - ETAPE 4 :" && ls -l node_modules/@creedengo +#RUN echo "node -version :" && node --version +#RUN echo "pnpm -version :" && pnpm --version +# +#RUN mvn clean package -DskipTests,docker + +# STEP 2 : create a SonarQube image with the plugin installed +FROM sonarqube:${SONARQUBE_VERSION} + +#COPY --from=builder /usr/src/creedengo/target/creedengo-*.jar /opt/sonarqube/extensions/plugins/ + +USER sonarqube \ No newline at end of file diff --git a/apps/sonar-plugin/docker-compose.yml b/apps/sonar-plugin/docker-compose.yml new file mode 100644 index 0000000..75fd705 --- /dev/null +++ b/apps/sonar-plugin/docker-compose.yml @@ -0,0 +1,57 @@ +# Docker Compose file for SonarQube service for Creedengo Dashboard + +name: sonarqube_creedengo_dashboard + +services: + sonar: + build: . + container_name: sonar_creedengo_dashboard + ports: + - ":9000" + networks: + - sonarnet + depends_on: + db: + condition: service_healthy + environment: + SONAR_JDBC_USERNAME: sonar + SONAR_JDBC_PASSWORD: sonar + SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonarqube + SONAR_ES_BOOTSTRAP_CHECKS_DISABLE: 'true' + env_file: + - path: ./.default.docker.env + required: true + - path: ./.override.docker.env + required: false + volumes: + - "extensions:/opt/sonarqube/extensions" + - "logs:/opt/sonarqube/logs" + - "data:/opt/sonarqube/data" + + db: + image: postgres:12 + container_name: postgresql_creedengo_dashboard + networks: + - sonarnet + volumes: + - pg_data:/var/lib/postgresql/data + environment: + POSTGRES_USER: sonar + POSTGRES_PASSWORD: sonar + POSTGRES_DB: sonarqube + PGDATA: pg_data:/var/lib/postgresql/data/pgdata + healthcheck: + test: [ "CMD-SHELL", "pg_isready -U sonar -d sonarqube" ] + interval: 5s + timeout: 5s + retries: 5 + +networks: + sonarnet: + driver: bridge + +volumes: + data: + logs: + extensions: + pg_data: diff --git a/apps/sonar-plugin/pom.xml b/apps/sonar-plugin/pom.xml index 89eed67..6a7bf50 100644 --- a/apps/sonar-plugin/pom.xml +++ b/apps/sonar-plugin/pom.xml @@ -8,10 +8,12 @@ sonar-plugin - Creedengo Dashboard plugin + Creedengo Dashboard Provides a Creedengo Sustainability Dashboard to have an overview of the status and the main sustainability issue of the projects + 2025 + https://github.com/green-code-initiative/creedengo-dashboard green-code-initiative @@ -173,6 +175,12 @@ javax/annotation/** + + org.apache.commons:commons-lang3:* + + META-INF/** + + diff --git a/apps/sonar-plugin/src/main/java/org/greencodeinitiative/creedengo/dashboard/DashboardPlugin.java b/apps/sonar-plugin/src/main/java/org/greencodeinitiative/creedengo/dashboard/DashboardPlugin.java index bf17c94..8dce205 100644 --- a/apps/sonar-plugin/src/main/java/org/greencodeinitiative/creedengo/dashboard/DashboardPlugin.java +++ b/apps/sonar-plugin/src/main/java/org/greencodeinitiative/creedengo/dashboard/DashboardPlugin.java @@ -1,5 +1,5 @@ /* - * Creedengo Dashboard plugin - Provides dashboard to monitor and help reduce the environmental footprint of your programs + * Creedengo Dashboard - Provides a Creedengo Sustainability Dashboard to have an overview of the status and the main sustainability issue of the projects * Copyright © 2025 Green Code Initiative (https://green-code-initiative.org) * * This program is free software: you can redistribute it and/or modify @@ -18,14 +18,13 @@ package org.greencodeinitiative.creedengo.dashboard; import org.greencodeinitiative.creedengo.dashboard.web.DashboardPageDefinition; +import org.sonar.api.Plugin; public class DashboardPlugin implements Plugin { - public static final String NAME = "Creedengo"; - @Override public void define(Context context) { - context.addExtensions( DashboardPageDefinition.class ); + context.addExtension(DashboardPageDefinition.class); } } \ No newline at end of file diff --git a/apps/sonar-plugin/src/main/java/org/greencodeinitiative/creedengo/dashboard/web/DashboardPageDefinition.java b/apps/sonar-plugin/src/main/java/org/greencodeinitiative/creedengo/dashboard/web/DashboardPageDefinition.java index c1e44a1..a746cf6 100644 --- a/apps/sonar-plugin/src/main/java/org/greencodeinitiative/creedengo/dashboard/web/DashboardPageDefinition.java +++ b/apps/sonar-plugin/src/main/java/org/greencodeinitiative/creedengo/dashboard/web/DashboardPageDefinition.java @@ -1,5 +1,5 @@ /* - * Creedengo Dashboard plugin - Provides dashboard to monitor and help reduce the environmental footprint of your programs + * Creedengo Dashboard - Provides a Creedengo Sustainability Dashboard to have an overview of the status and the main sustainability issue of the projects * Copyright © 2025 Green Code Initiative (https://green-code-initiative.org) * * This program is free software: you can redistribute it and/or modify @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package org.greencodeinitiative.creedengo.dashboard.web.DashboardPageDefinition; +package org.greencodeinitiative.creedengo.dashboard.web; import org.sonar.api.web.page.Context; import org.sonar.api.web.page.Page; @@ -27,9 +27,11 @@ public class DashboardPageDefinition implements PageDefinition { @Override public void define(Context context) { - context.addPage(Page.builder("creedengo/view") - .setName("Creedengo") - .setScope(COMPONENT) - .build()); + context + .addPage(Page.builder("creedengodashboard/view") + .setName("Creedengo") + .setScope(COMPONENT) + .build()) + ; } } diff --git a/apps/sonar-plugin/src/main/js/index.js b/apps/sonar-plugin/src/main/js/index.js index 388546f..e6db880 100644 --- a/apps/sonar-plugin/src/main/js/index.js +++ b/apps/sonar-plugin/src/main/js/index.js @@ -7,7 +7,9 @@ import "@creedengo/vue-dashboard/stylesheet" function start(options) { const rootNode = options.el; rootNode.innerHTML = ` -
+

Creedengo Dashboard - TOTO 1

+
+

Creedengo Dashboard - TOTO 2

`; return () => stop(rootNode) } @@ -17,4 +19,4 @@ function stop(rootNode) { rootNode.innerHTML = '' } -window.registerExtension('creedengo/view', start, true) \ No newline at end of file +window.registerExtension('creedengodashboard/view', start, true) \ No newline at end of file diff --git a/apps/sonar-plugin/tool_build.sh b/apps/sonar-plugin/tool_build.sh new file mode 100755 index 0000000..bfac031 --- /dev/null +++ b/apps/sonar-plugin/tool_build.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +mvn clean package -DskipTests diff --git a/apps/sonar-plugin/tool_docker-clean.sh b/apps/sonar-plugin/tool_docker-clean.sh new file mode 100755 index 0000000..2eadb2e --- /dev/null +++ b/apps/sonar-plugin/tool_docker-clean.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +docker-compose down --volumes diff --git a/apps/sonar-plugin/tool_docker-init.sh b/apps/sonar-plugin/tool_docker-init.sh new file mode 100755 index 0000000..96a5428 --- /dev/null +++ b/apps/sonar-plugin/tool_docker-init.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env sh + +# docker-compose up --build -d + +# pour avoir les logs de ce qui se passe dans le container lors de sa construction et deploiement +# Build avec logs visibles +docker-compose build --progress=plain --no-cache +# Puis lancer en détaché +docker-compose up -d diff --git a/apps/sonar-plugin/tool_docker-install-plugin.sh b/apps/sonar-plugin/tool_docker-install-plugin.sh new file mode 100755 index 0000000..0564992 --- /dev/null +++ b/apps/sonar-plugin/tool_docker-install-plugin.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env sh + +#NOM_CONTAINER=sonar_creedengo_dashboard +NOM_CONTAINER=sonar_creedengo_python +REPERTOIRE_EXTENSIONS=/opt/sonarqube/extensions/plugins/. + +echo "********** AVANT installation du plugin (répertoire '') :" +docker exec $NOM_CONTAINER ls $REPERTOIRE_EXTENSIONS + +echo "********** Installation du plugin 'creedengo-dashboard' :" +docker cp target/creedengo-dashboard-plugin-*.jar $NOM_CONTAINER:$REPERTOIRE_EXTENSIONS + +echo "********** Installation du plugin 'creedengo-python' :" +docker cp ../creedengo-python-plugin-*.jar $NOM_CONTAINER:$REPERTOIRE_EXTENSIONS + +echo "********** APRES installation du plugin :" +docker exec $NOM_CONTAINER ls $REPERTOIRE_EXTENSIONS + +echo "********** Redémarrage du container pour prise en compte du nouveau plugin" +docker restart $NOM_CONTAINER diff --git a/apps/sonar-plugin/tool_docker-logs.sh b/apps/sonar-plugin/tool_docker-logs.sh new file mode 100755 index 0000000..2b082e9 --- /dev/null +++ b/apps/sonar-plugin/tool_docker-logs.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +docker-compose logs -f diff --git a/apps/sonar-plugin/vite.config.js b/apps/sonar-plugin/vite.config.js index 895d62a..6d01d97 100644 --- a/apps/sonar-plugin/vite.config.js +++ b/apps/sonar-plugin/vite.config.js @@ -18,8 +18,10 @@ export default defineConfig({ rollupOptions: { external: [], output: { - entryFileNames: `assets/view.js`, - assetFileNames: `assets/view.css` +// entryFileNames: `assets/view.js`, +// assetFileNames: `assets/view.css` + entryFileNames: `assets/static/view.js`, + assetFileNames: `assets/static/view.css` } } } diff --git a/apps/vue-app/package.json b/apps/vue-app/package.json index 91e2758..0ae8136 100644 --- a/apps/vue-app/package.json +++ b/apps/vue-app/package.json @@ -11,8 +11,8 @@ "nodeVersion": "22.17.1" }, "exports": { - "./script": "./dist/view.js", - "./stylesheet": "./dist/view.css" + "./script": "./dist/assets/view.js", + "./stylesheet": "./dist/assets/view.css" }, "scripts": { "preinstall": "npx only-allow pnpm", diff --git a/apps/vue-app/vite.config.js b/apps/vue-app/vite.config.js index 81f03fe..6dd2ba3 100644 --- a/apps/vue-app/vite.config.js +++ b/apps/vue-app/vite.config.js @@ -1,8 +1,7 @@ -import { fileURLToPath, URL } from 'node:url' - -import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import VueDevTools from 'vite-plugin-vue-devtools' +import { defineConfig } from 'vite' +import { fileURLToPath } from 'url' // https://vitejs.dev/config/ export default defineConfig({ @@ -21,5 +20,13 @@ export default defineConfig({ alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) } + }, + build: { + rollupOptions: { + output: { + entryFileNames: `assets/view.js`, + assetFileNames: `assets/view.css` + } + } } }) diff --git a/package.json b/package.json index 38cf66e..f4ecd05 100644 --- a/package.json +++ b/package.json @@ -40,5 +40,5 @@ "prettier": "^3.6.2", "turbo": "^2.5.6" }, - "packageManager": "pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b" + "packageManager": "pnpm@10.19.0+sha512.c9fc7236e92adf5c8af42fd5bf1612df99c2ceb62f27047032f4720b33f8eacdde311865e91c411f2774f618d82f320808ecb51718bfa82c060c4ba7c76a32b8" } diff --git a/tool_build.sh b/tool_build.sh new file mode 100755 index 0000000..60a7297 --- /dev/null +++ b/tool_build.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env sh + +pnpm install +pnpm build