From abaf74b75479db6070f02c5721e8e74a5cb8791b Mon Sep 17 00:00:00 2001 From: Dthery Date: Mon, 10 Nov 2025 22:04:35 +0100 Subject: [PATCH 1/3] fix dev config # Conflicts: # package.json # pnpm-lock.yaml --- .../vscode-sonar-extension/.vscode/tasks.json | 52 ++++++++++++++++--- apps/vue-app/package.json | 3 +- pnpm-lock.yaml | 8 +-- pnpm-workspace.yaml | 14 +++-- 4 files changed, 61 insertions(+), 16 deletions(-) diff --git a/apps/vscode-sonar-extension/.vscode/tasks.json b/apps/vscode-sonar-extension/.vscode/tasks.json index e9cbb20..123d580 100644 --- a/apps/vscode-sonar-extension/.vscode/tasks.json +++ b/apps/vscode-sonar-extension/.vscode/tasks.json @@ -1,17 +1,53 @@ { + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + // these commands will appear in Task > Run Tasks menu. "version": "2.0.0", "tasks": [ { - "label": "watch", - "type": "npm", - "script": "watch", - "presentation": { - "reveal": "never" - }, + "label": "verify", + "type": "shell", + "command": "mvn -B verify", + "group": "build" + }, + { + "label": "mvn:test", + "type": "shell", + "command": "mvn -B test", + "group": "test" + }, + { + "label": "atlas-debug", + "type": "shell", + "command": "atlas-debug", + "group": "build" + }, + { + "label": "atlas-run", + "type": "shell", + "command": "atlas-run", + "group": "build", + "problemMatcher": [] + }, + { + /* + * this requires an already-running instance, via atlas-run or atlas-debug + * once run, this will repackage the plugin artifact and will be detected. + */ + "label": "quick-reload", + "type": "shell", + "command": "atlas-mvn package", "group": { "kind": "build", "isDefault": true - } + }, + "problemMatcher": [] }, + { + "label": "atlas test", + "type": "shell", + "command": "atlas-mvn test", + "group": "test" + } ] -} +} \ No newline at end of file diff --git a/apps/vue-app/package.json b/apps/vue-app/package.json index 7e2416d..c813cf5 100644 --- a/apps/vue-app/package.json +++ b/apps/vue-app/package.json @@ -32,13 +32,12 @@ "build-storybook": "storybook build -o docs" }, "dependencies": { + "@creedengo/core-services": "workspace: *", "@creedengo/sonar-services": "workspace:*", "@creedengo/vue-ui": "workspace: *", "vue": "^3.5.30" }, "devDependencies": { - "@creedengo/core-services": "workspace: *", - "@creedengo/sonar-services": "workspace: *", "@creedengo/eslint-config": "workspace: *", "@creedengo/playwright-config": "workspace:*", "@creedengo/vitest-config": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8917132..d421ee4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,6 +27,8 @@ importers: specifier: ^2.8.17 version: 2.8.17 + apps/confluence-plugin: {} + apps/sonar-plugin: dependencies: '@creedengo/vue-dashboard': @@ -79,6 +81,9 @@ importers: apps/vue-app: dependencies: + '@creedengo/core-services': + specifier: 'workspace: *' + version: link:../../shared/core-services '@creedengo/sonar-services': specifier: workspace:* version: link:../../shared/sonar-services @@ -89,9 +94,6 @@ importers: specifier: ^3.5.30 version: 3.5.30(typescript@5.9.3) devDependencies: - '@creedengo/core-services': - specifier: 'workspace: *' - version: link:../../shared/core-services '@creedengo/eslint-config': specifier: 'workspace: *' version: link:../../configs/eslint-config diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index cba40af..6c68040 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,5 +1,13 @@ packages: -- 'apps/*' -- 'configs/*' -- 'shared/*' + - apps/* + - configs/* + - shared/* + +onlyBuiltDependencies: + - '@vscode/vsce-sign' + - esbuild + - keytar + - msw + - unrs-resolver + useNodeVersion: 22.17.1 From 691b05fa7be3a0da5e3638612fe54371e5178124 Mon Sep 17 00:00:00 2001 From: Dthery Date: Mon, 10 Nov 2025 22:17:20 +0100 Subject: [PATCH 2/3] first skeleton version plugin version avec 3 macro + dashboard --- .github/agents/confluenceAgent.agent.md | 8 + .github/copilot-instructions.md | 129 ++++ .github/instructions/java.instructions.md | 81 +++ apps/confluence-plugin/LICENSE | 674 ++++++++++++++++++ apps/confluence-plugin/README | 11 + apps/confluence-plugin/package.json | 5 + apps/confluence-plugin/pom.xml | 133 ++++ .../plugin/api/MyPluginComponent.java | 5 + .../plugin/impl/MyPluginComponentImpl.java | 31 + .../confluence/plugin/macro/Dashboard.java | 109 +++ .../confluence/plugin/macro/EcoScore.java | 141 ++++ .../confluence/plugin/macro/MacroHelper.java | 79 ++ .../plugin/macro/PieChartMacro.java | 227 ++++++ .../plugin/macro/PriorityRulesMacro.java | 203 ++++++ .../plugin/service/PieChartService.java | 99 +++ .../plugin/service/PriorityRulesService.java | 71 ++ .../plugin/service/ScoreService.java | 177 +++++ .../plugin/sonar/SonarApiException.java | 32 + .../confluence/plugin/sonar/SonarClient.java | 208 ++++++ .../plugin/sonar/SonarConstants.java | 51 ++ .../confluence/plugin/sonar/SonarService.java | 97 +++ .../plugin/sonar/api/SonarIssuesApi.java | 294 ++++++++ .../plugin/sonar/api/SonarMeasuresApi.java | 81 +++ .../sonar/api/SonarProjectBranchesApi.java | 69 ++ .../plugin/sonar/api/SonarProjectInfoApi.java | 69 ++ .../api/SonarProjectPullRequestsApi.java | 69 ++ .../plugin/sonar/api/SonarRulesApi.java | 112 +++ .../META-INF/spring/plugin-context.xml | 10 + .../src/main/resources/atlassian-plugin.xml | 131 ++++ .../creedengo-confluence-plugin.properties | 109 +++ ...eedengo-confluence-plugin_fr_FR.properties | 99 +++ .../css/creedengo-confluence-plugin.css | 484 +++++++++++++ .../src/main/resources/images/creedengo.png | Bin 0 -> 14843 bytes .../resources/images/creedengoPluginIcon.png | Bin 0 -> 12086 bytes .../resources/images/creedengoPluginLogo.png | Bin 0 -> 8512 bytes .../resources/images/dashboard-widgets.png | Bin 0 -> 336916 bytes .../images/dashboard-widgets_920x450.png | Bin 0 -> 142504 bytes .../src/main/resources/images/favicon.png | Bin 0 -> 722 bytes .../images/icons/creedengoScoreMacroIcon.png | Bin 0 -> 14843 bytes .../js/creedengo-confluence-plugin.js | 23 + .../myplugin/images/icons/MyMacroIcon.png | Bin 0 -> 14843 bytes .../images/icons/creedengo-ecoscore-icon.png | Bin 0 -> 10353 bytes .../plugin/MyComponentWiredTest.java | 25 + .../plugin/score/ScoreServiceIT.java | 219 ++++++ .../plugin/sonar/MockSonarServer.java | 266 +++++++ .../plugin/sonar/SonarClientIT.java | 133 ++++ .../plugin/sonar/SonarIssuesApiIT.java | 131 ++++ .../plugin/sonar/SonarMeasuresApiIT.java | 46 ++ .../sonar/SonarProjectBranchesApiIT.java | 74 ++ .../sonar/SonarProjectPullRequestsApiIT.java | 83 +++ .../plugin/sonar/SonarRulesApiIT.java | 97 +++ .../plugin/MyComponentUnitTest.java | 15 + .../src/test/resources/atlassian-plugin.xml | 14 + 53 files changed, 5224 insertions(+) create mode 100644 .github/agents/confluenceAgent.agent.md create mode 100644 .github/copilot-instructions.md create mode 100644 .github/instructions/java.instructions.md create mode 100644 apps/confluence-plugin/LICENSE create mode 100644 apps/confluence-plugin/README create mode 100644 apps/confluence-plugin/package.json create mode 100644 apps/confluence-plugin/pom.xml create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/api/MyPluginComponent.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/impl/MyPluginComponentImpl.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/macro/Dashboard.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/macro/EcoScore.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/macro/MacroHelper.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/macro/PieChartMacro.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/macro/PriorityRulesMacro.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/service/PieChartService.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/service/PriorityRulesService.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/service/ScoreService.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/sonar/SonarApiException.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/sonar/SonarClient.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/sonar/SonarConstants.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/sonar/SonarService.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/sonar/api/SonarIssuesApi.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/sonar/api/SonarMeasuresApi.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/sonar/api/SonarProjectBranchesApi.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/sonar/api/SonarProjectInfoApi.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/sonar/api/SonarProjectPullRequestsApi.java create mode 100644 apps/confluence-plugin/src/main/java/org/greencodeinitiative/creedengo/confluence/plugin/sonar/api/SonarRulesApi.java create mode 100644 apps/confluence-plugin/src/main/resources/META-INF/spring/plugin-context.xml create mode 100644 apps/confluence-plugin/src/main/resources/atlassian-plugin.xml create mode 100644 apps/confluence-plugin/src/main/resources/creedengo-confluence-plugin.properties create mode 100644 apps/confluence-plugin/src/main/resources/creedengo-confluence-plugin_fr_FR.properties create mode 100644 apps/confluence-plugin/src/main/resources/css/creedengo-confluence-plugin.css create mode 100644 apps/confluence-plugin/src/main/resources/images/creedengo.png create mode 100644 apps/confluence-plugin/src/main/resources/images/creedengoPluginIcon.png create mode 100644 apps/confluence-plugin/src/main/resources/images/creedengoPluginLogo.png create mode 100644 apps/confluence-plugin/src/main/resources/images/dashboard-widgets.png create mode 100644 apps/confluence-plugin/src/main/resources/images/dashboard-widgets_920x450.png create mode 100644 apps/confluence-plugin/src/main/resources/images/favicon.png create mode 100644 apps/confluence-plugin/src/main/resources/images/icons/creedengoScoreMacroIcon.png create mode 100644 apps/confluence-plugin/src/main/resources/js/creedengo-confluence-plugin.js create mode 100644 apps/confluence-plugin/src/main/resources/myplugin/images/icons/MyMacroIcon.png create mode 100644 apps/confluence-plugin/src/main/resources/myplugin/images/icons/creedengo-ecoscore-icon.png create mode 100644 apps/confluence-plugin/src/test/java/it/org/greencodeinitiative/creedengo/confluence/plugin/MyComponentWiredTest.java create mode 100644 apps/confluence-plugin/src/test/java/it/org/greencodeinitiative/creedengo/confluence/plugin/score/ScoreServiceIT.java create mode 100644 apps/confluence-plugin/src/test/java/it/org/greencodeinitiative/creedengo/confluence/plugin/sonar/MockSonarServer.java create mode 100644 apps/confluence-plugin/src/test/java/it/org/greencodeinitiative/creedengo/confluence/plugin/sonar/SonarClientIT.java create mode 100644 apps/confluence-plugin/src/test/java/it/org/greencodeinitiative/creedengo/confluence/plugin/sonar/SonarIssuesApiIT.java create mode 100644 apps/confluence-plugin/src/test/java/it/org/greencodeinitiative/creedengo/confluence/plugin/sonar/SonarMeasuresApiIT.java create mode 100644 apps/confluence-plugin/src/test/java/it/org/greencodeinitiative/creedengo/confluence/plugin/sonar/SonarProjectBranchesApiIT.java create mode 100644 apps/confluence-plugin/src/test/java/it/org/greencodeinitiative/creedengo/confluence/plugin/sonar/SonarProjectPullRequestsApiIT.java create mode 100644 apps/confluence-plugin/src/test/java/it/org/greencodeinitiative/creedengo/confluence/plugin/sonar/SonarRulesApiIT.java create mode 100644 apps/confluence-plugin/src/test/java/ut/org/greencodeinitiative/creedengo/confluence/plugin/MyComponentUnitTest.java create mode 100644 apps/confluence-plugin/src/test/resources/atlassian-plugin.xml diff --git a/.github/agents/confluenceAgent.agent.md b/.github/agents/confluenceAgent.agent.md new file mode 100644 index 0000000..4f4f53c --- /dev/null +++ b/.github/agents/confluenceAgent.agent.md @@ -0,0 +1,8 @@ +--- +name: confluenceAgent +description: Describe what this custom agent does and when to use it. +argument-hint: The inputs this agent expects, e.g., "a task to implement" or "a question to answer". +# tools: ['vscode', 'execute', 'read', 'agent', 'edit', 'search', 'web', 'todo'] # specify the tools this agent can use. If not set, all enabled tools are allowed. +--- + +Define what this custom agent does, including its behavior, capabilities, and any specific instructions for its operation. diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000..18a4b15 --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,129 @@ +# Creedengo Dashboard — Agent Instructions + +## Project Overview + +**Creedengo Dashboard** is a Green IT / sustainable code dashboard (Green Code Initiative). +It displays the sustainability impact of un-remediated SonarQube issues and helps prioritize fixes. +The same Vue 3 app can be embedded in SonarQube, VSCode, Confluence, or any other host. + +--- + +## Architecture + +Monorepo managed with **pnpm workspaces** and **Turborepo**. Three workspace scopes: + +| Folder | Contents | +| ---------- | ------------------------------------------------------------------------------------------------- | +| `apps/` | Deployable applications (Vue app, SonarQube plugin, Confluence plugin, VSCode extension) | +| `shared/` | Internal libraries (`@creedengo/core-services`, `@creedengo/sonar-services`, `@creedengo/vue-ui`) | +| `configs/` | Shared configs (ESLint, Playwright, Vitest) | + +Key files: + +- [turbo.json](../turbo.json) — task graph and caching +- [pnpm-workspace.yaml](../pnpm-workspace.yaml) — workspace definition +- [apps/confluence-plugin/pom.xml](../apps/confluence-plugin/pom.xml) — Atlassian OSGi bundle +- [apps/sonar-plugin/pom.xml](../apps/sonar-plugin/pom.xml) — SonarQube plugin + +--- + +## Build & Test + +### JavaScript / TypeScript (all packages) + +```sh +pnpm install # install dependencies (pnpm only — enforced via preinstall) +turbo build # build all packages in topological order +turbo dev # dev mode with hot-reload +turbo test:unit # Vitest unit tests across all packages +turbo test:e2e # Playwright E2E tests (requires prior build) +turbo lint # ESLint across all packages +pnpm ci # lint + test:unit + test:e2e (full CI) +``` + +Node.js `22.17.1` is required (`.nvmrc`). Use `pnpm`, never `npm` or `yarn`. + +### Confluence plugin (Atlassian SDK + Maven) + +```sh +atlas-run # Start Confluence locally with the plugin loaded +atlas-debug # Same in debug mode (port 5005) +atlas-mvn package # Quick reload (hot-swap without restart) +mvn -B verify # Full build + tests +mvn -B test # Tests only +``` + +See VS Code tasks in `.vscode/` for `atlas-run`, `atlas-debug`, `quick-reload`. + +### SonarQube plugin (Maven + embedded frontend) + +```sh +mvn -B verify # Full build: installs Node locally via frontend-maven-plugin, bundles Vue app, then packages JAR +mvn -B test # Tests only +``` + +--- + +## Java / Atlassian Plugin Development + +### Confluence plugin specifics + +- **Packaging**: `atlassian-plugin` (OSGi bundle via AMPS `9.1.1`) +- **Java version**: source/target `1.8` +- **Target**: Confluence `8.5.4` +- **DI**: `atlassian-spring-scanner 2.2.4` — use `@Scanned` on implementations, `@ComponentImport` to import Atlassian components +- **Tests**: JUnit `4.10` + `atlassian-plugins-osgi-testrunner` +- **OSGi export**: only `org.greencodeinitiative.creedengo.confluence.plugin.api` + +Package structure under `org.greencodeinitiative.creedengo.confluence.plugin`: + +``` +api/ ← public OSGi interfaces +impl/ ← Spring-scanned implementations +macro/ ← Confluence macros (Dashboard, EcoScore, PriorityRulesMacro) +service/ ← business logic (ScoreService, PriorityRulesService) +sonar/ ← SonarQube HTTP client and API sub-calls + api/ ← per-endpoint API classes (issues, measures, branches, rules…) +``` + +- All macros extend `BaseMacro` and use `MacroHelper` for common rendering logic. +- `SonarClient` is the HTTP entry point; domain-specific calls are in `sonar/api/`. +- GPL-3 license headers are **mandatory** on every `.java` file (enforced by `license-maven-plugin` in the sonar-plugin; apply the same convention in the confluence-plugin). + +### SonarQube plugin specifics + +- **Packaging**: `sonar-plugin` (fat JAR via `maven-shade-plugin`) +- **Java**: compile `11`, JDK min `17` +- **SonarQube API**: `9.14.0.375` +- **Tests**: JUnit Jupiter `5.10.3` + Mockito `5.12` + AssertJ `3.26` +- **Coverage**: JaCoCo `0.8.11` +- Plugin entry point: `org.greencodeinitiative.creedengo.dashboard.DashboardPlugin` + +--- + +## Frontend Conventions + +- **Vue 3** (Composition API + `