Repository navigation
✨ feat: track external contributions and detailed PR/MRs (#52) - #102
Merged
jeanphi-baconnais merged 3 commits intoOct 13, 2026
Conversation
# v1.0.0 (2026-09-23) ## ✨ New Features - [`7882900`](7882900) Add Quarkus app - [`ae46f09`](ae46f09) Organize ressources and schedules - [`d2aa0b6`](d2aa0b6) Add Github lib - [`5646e63`](5646e63) Add GitHub extension and start to call API - [`76bdd09`](76bdd09) Replace library by http client call - [`850b13d`](850b13d) Add GitHub endpoint to get information about user and projects (perso and forked) - [`4e3cd97`](4e3cd97) Github members endpoint : add page - [`69c636d`](69c636d) Add endpoints to get all contribution number for one login on the current Year or a specific year user/{login}/contributions/year/current user/{login}/contributions/year/{year} - [`55f9024`](55f9024) Add endpoint to get all contributions for all members of the Zenika Open Source members. + refactor some packages + init test for GitHubServices but in progress (there is a bug) - [`b061202`](b061202) Add some tests - [`4658d0f`](4658d0f) Add some tests - [`7eaa19c`](7eaa19c) Fix bug and get all members of Zenika Open Source organization - [`55f6db8`](55f6db8) Start PR : add extension and start creating Firestore Adapter - [`2359711`](2359711) Review endpoint and start dev on workflow part (connecting to GCP) - [`b32c53c`](b32c53c) Implement the saving of data for a member - [`b8dd35a`](b8dd35a) Implements saving stats for all Zenika members - [`56d5824`](56d5824) Add Stats ressources - [`291f033`](291f033) Integrate Javelit to build dashboard + configure semantic release (zenika-open-source#28) (Issues: [`zenika-open-source#28`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/28)) - [`de24724`](de24724) ⬆️ Update Java 25 (zenika-open-source#30) (Issues: [`zenika-open-source#30`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/30)) - [`1b8fed6`](1b8fed6) Fix users recuperation to not remove all users before gett… (zenika-open-source#34) (Issues: [`zenika-open-source#34`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/34)) - [`ffa140a`](ffa140a) Add contributions elements and some stats (zenika-open-source#36) (Issues: [`zenika-open-source#36`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/36)) - [`fa1a143`](fa1a143) 🔧 Configure Cloud Run deployment (zenika-open-source#37) (Issues: [`zenika-open-source#37`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/37)) - [`d89b283`](d89b283) Integrate GitLab 🦊 (zenika-open-source#38) (Issues: [`zenika-open-source#38`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/38)) - [`cecece7`](cecece7) Add Organization projects (zenika-open-source#41) (Issues: [`zenika-open-source#41`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/41)) - [`e281c37`](e281c37) 44 update information for only news person (zenika-open-source#45) (Issues: [`zenika-open-source#45`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/45)) - [`b833e5a`](b833e5a) 🎨 Review tabs UI, Add top 5️⃣ projects and hide synchro buttons (zenika-open-source#48) (Issues: [`zenika-open-source#48`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/48)) - [`2779996`](2779996) Prepare project for open source and add some adjustements (zenika-open-source#55) (Issues: [`zenika-open-source#55`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/55)) - [`88fc388`](88fc388) Add Scheduler to refresh data (zenika-open-source#58) (Issues: [`zenika-open-source#58`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/58)) - [`7ace637`](7ace637) Add project activity column (zenika-open-source#81) (Issues: [`zenika-open-source#81`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/81)) ## 🐛 Bug Fixes - [`34e4c79`](34e4c79) Fix gitpod configuration - [`26604c5`](26604c5) Fix enum usage - [`ad37816`](ad37816) Remove deploy command on semantic release (zenika-open-source#31) (Issues: [`zenika-open-source#31`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/31)) - [`ccd40d1`](ccd40d1) Fix/semantic release release note (zenika-open-source#32) (Issues: [`zenika-open-source#32`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/32)) - [`d9f69f4`](d9f69f4) Fix Docker configuration + add doc + remove gitpod configuration (zenika-open-source#33) (Issues: [`zenika-open-source#33`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/33)) - [`57207a4`](57207a4) Fix number of projects recuperation (zenika-open-source#47) (Issues: [`zenika-open-source#47`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/47)) - [`b633686`](b633686) Fix Cron to be executed Monday (zenika-open-source#70) (Issues: [`zenika-open-source#70`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/70)) - [`48adbf6`](48adbf6) Fix update date (zenika-open-source#76) (Issues: [`zenika-open-source#76`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/76)) - [`43c182d`](43c182d) Review and fix schedule (zenika-open-source#78) (Issues: [`zenika-open-source#78`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/78)) - [`c64c906`](c64c906) Fix member selectbox reverting to default option (zenika-open-source#82) (Issues: [`zenika-open-source#82`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/82)) - [`03d49f9`](03d49f9) Fix member edit form rendering and session handling (zenika-open-source#92) (Issues: [`zenika-open-source#92`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/92))
…ource#52) - Extract and store detailed Pull Requests (GitHub GraphQL) and Merge Requests (GitLab REST) - Add ExternalContributionService to identify and filter external open source contributions - Add detailed PR/MR table per collaborator sorted by most recent date first with formatted Date column - Add Latest External Contributions section in ContributionsTab with period, state, limit filters and social post snippet generator - Add External Projects summary in StatsTab - Expose /v1/contributions/details and /v1/contributions/external REST endpoints - Provide start.sh startup script for easy environment launch and update README - Add unit tests for GitLabMergeRequest, ExternalContributionService, and ContributionsTab date sorting
github-actions Bot
pushed a commit
that referenced
this pull request
Oct 13, 2026
# [v1.12.0](v1.11.2...v1.12.0) (2026-10-13) ## ✨ New Features - [`08607c5`](08607c5) feat: track external contributions and detailed PR/MRs (#52) (#102) (Issues: [`#52`](#52) [`#102`](#102) [`#28`](#28) [`#28`](#28) [`#30`](#30) [`#30`](#30) [`#34`](#34) [`#34`](#34) [`#36`](#36) [`#36`](#36) [`#37`](#37) [`#37`](#37) [`#38`](#38) [`#38`](#38) [`#41`](#41) [`#41`](#41) [`#45`](#45) [`#45`](#45) [`#48`](#48) [`#48`](#48) [`#55`](#55) [`#55`](#55) [`#58`](#58) [`#58`](#58) [`#81`](#81) [`#81`](#81) [`#31`](#31) [`#31`](#31) [`#32`](#32) [`#32`](#32) [`#33`](#33) [`#33`](#33) [`#47`](#47) [`#47`](#47) [`#70`](#70) [`#70`](#70) [`#76`](#76) [`#76`](#76) [`#78`](#78) [`#78`](#78) [`#82`](#82) [`#82`](#82) [`#92`](#92) [`#92`](#92) [`#52`](#52))
|
🎉 This PR is included in version 1.12.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
github-actions Bot
pushed a commit
to jeanphi-baconnais/opensource-statistics
that referenced
this pull request
Nov 3, 2026
# v1.0.0 (2026-11-03) ## ✨ New Features - [`7882900`](7882900) Add Quarkus app - [`ae46f09`](ae46f09) Organize ressources and schedules - [`d2aa0b6`](d2aa0b6) Add Github lib - [`5646e63`](5646e63) Add GitHub extension and start to call API - [`76bdd09`](76bdd09) Replace library by http client call - [`850b13d`](850b13d) Add GitHub endpoint to get information about user and projects (perso and forked) - [`4e3cd97`](4e3cd97) Github members endpoint : add page - [`69c636d`](69c636d) Add endpoints to get all contribution number for one login on the current Year or a specific year user/{login}/contributions/year/current user/{login}/contributions/year/{year} - [`55f9024`](55f9024) Add endpoint to get all contributions for all members of the Zenika Open Source members. + refactor some packages + init test for GitHubServices but in progress (there is a bug) - [`b061202`](b061202) Add some tests - [`4658d0f`](4658d0f) Add some tests - [`7eaa19c`](7eaa19c) Fix bug and get all members of Zenika Open Source organization - [`55f6db8`](55f6db8) Start PR : add extension and start creating Firestore Adapter - [`2359711`](2359711) Review endpoint and start dev on workflow part (connecting to GCP) - [`b32c53c`](b32c53c) Implement the saving of data for a member - [`b8dd35a`](b8dd35a) Implements saving stats for all Zenika members - [`56d5824`](56d5824) Add Stats ressources - [`291f033`](291f033) Integrate Javelit to build dashboard + configure semantic release (zenika-open-source#28) (Issues: [`zenika-open-source#28`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/28)) - [`de24724`](de24724) ⬆️ Update Java 25 (zenika-open-source#30) (Issues: [`zenika-open-source#30`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/30)) - [`1b8fed6`](1b8fed6) Fix users recuperation to not remove all users before gett… (zenika-open-source#34) (Issues: [`zenika-open-source#34`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/34)) - [`ffa140a`](ffa140a) Add contributions elements and some stats (zenika-open-source#36) (Issues: [`zenika-open-source#36`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/36)) - [`fa1a143`](fa1a143) 🔧 Configure Cloud Run deployment (zenika-open-source#37) (Issues: [`zenika-open-source#37`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/37)) - [`d89b283`](d89b283) Integrate GitLab 🦊 (zenika-open-source#38) (Issues: [`zenika-open-source#38`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/38)) - [`cecece7`](cecece7) Add Organization projects (zenika-open-source#41) (Issues: [`zenika-open-source#41`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/41)) - [`e281c37`](e281c37) 44 update information for only news person (zenika-open-source#45) (Issues: [`zenika-open-source#45`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/45)) - [`b833e5a`](b833e5a) 🎨 Review tabs UI, Add top 5️⃣ projects and hide synchro buttons (zenika-open-source#48) (Issues: [`zenika-open-source#48`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/48)) - [`2779996`](2779996) Prepare project for open source and add some adjustements (zenika-open-source#55) (Issues: [`zenika-open-source#55`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/55)) - [`88fc388`](88fc388) Add Scheduler to refresh data (zenika-open-source#58) (Issues: [`zenika-open-source#58`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/58)) - [`7ace637`](7ace637) Add project activity column (zenika-open-source#81) (Issues: [`zenika-open-source#81`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/81)) - [`08607c5`](08607c5) feat: track external contributions and detailed PR/MRs (zenika-open-source#52) (zenika-open-source#102) (Issues: [`zenika-open-source#52`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/52) [`zenika-open-source#102`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/102) [`zenika-open-source#28`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/28) [`zenika-open-source#28`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/28) [`zenika-open-source#30`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/30) [`zenika-open-source#30`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/30) [`zenika-open-source#34`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/34) [`zenika-open-source#34`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/34) [`zenika-open-source#36`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/36) [`zenika-open-source#36`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/36) [`zenika-open-source#37`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/37) [`zenika-open-source#37`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/37) [`zenika-open-source#38`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/38) [`zenika-open-source#38`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/38) [`zenika-open-source#41`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/41) [`zenika-open-source#41`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/41) [`zenika-open-source#45`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/45) [`zenika-open-source#45`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/45) [`zenika-open-source#48`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/48) [`zenika-open-source#48`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/48) [`zenika-open-source#55`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/55) [`zenika-open-source#55`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/55) [`zenika-open-source#58`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/58) [`zenika-open-source#58`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/58) [`zenika-open-source#81`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/81) [`zenika-open-source#81`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/81) [`zenika-open-source#31`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/31) [`zenika-open-source#31`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/31) [`zenika-open-source#32`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/32) [`zenika-open-source#32`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/32) [`zenika-open-source#33`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/33) [`zenika-open-source#33`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/33) [`zenika-open-source#47`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/47) [`zenika-open-source#47`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/47) [`zenika-open-source#70`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/70) [`zenika-open-source#70`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/70) [`zenika-open-source#76`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/76) [`zenika-open-source#76`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/76) [`zenika-open-source#78`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/78) [`zenika-open-source#78`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/78) [`zenika-open-source#82`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/82) [`zenika-open-source#82`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/82) [`zenika-open-source#92`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/92) [`zenika-open-source#92`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/92) [`zenika-open-source#52`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/52)) ## 🐛 Bug Fixes - [`34e4c79`](34e4c79) Fix gitpod configuration - [`26604c5`](26604c5) Fix enum usage - [`ad37816`](ad37816) Remove deploy command on semantic release (zenika-open-source#31) (Issues: [`zenika-open-source#31`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/31)) - [`ccd40d1`](ccd40d1) Fix/semantic release release note (zenika-open-source#32) (Issues: [`zenika-open-source#32`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/32)) - [`d9f69f4`](d9f69f4) Fix Docker configuration + add doc + remove gitpod configuration (zenika-open-source#33) (Issues: [`zenika-open-source#33`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/33)) - [`57207a4`](57207a4) Fix number of projects recuperation (zenika-open-source#47) (Issues: [`zenika-open-source#47`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/47)) - [`b633686`](b633686) Fix Cron to be executed Monday (zenika-open-source#70) (Issues: [`zenika-open-source#70`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/70)) - [`48adbf6`](48adbf6) Fix update date (zenika-open-source#76) (Issues: [`zenika-open-source#76`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/76)) - [`43c182d`](43c182d) Review and fix schedule (zenika-open-source#78) (Issues: [`zenika-open-source#78`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/78)) - [`c64c906`](c64c906) Fix member selectbox reverting to default option (zenika-open-source#82) (Issues: [`zenika-open-source#82`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/82)) - [`03d49f9`](03d49f9) Fix member edit form rendering and session handling (zenika-open-source#92) (Issues: [`zenika-open-source#92`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/92)) - [`45ca8f7`](45ca8f7) ⬆️ Bump quarkus.platform.version from 3.38.2 to 3.39.4 (zenika-open-source#93) (Issues: [`zenika-open-source#93`](https://github.com/jeanphi-baconnais/opensource-statistics/issues/93))
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📝 Description
This PR introduces comprehensive tracking and display of open source contributions across external projects and individual members, addressing issue #52.
It adds detailed Pull Request and Merge Request extraction from GitHub and GitLab, enriches the contributions database schema with contribution details and timestamps, sorts member PRs/MRs by date (most recent first) with formatted date indicators, and introduces a dedicated Latest External Contributions section with real-time filters and social media snippet generation for communication.
🚀 Main Changes
1. Backend & Data Models
ContributionDetail: Stores project name/fullName/URL, PR/MR title, URL, state, and creation timestamp (createdAt).ExternalContribution: Represents external open-source contributions with normalized states, formatted dates, and social post generation helpers.PullRequestContributions,PullRequestContributionNode,PullRequestNode, andPullRequestRepositorywith updated GraphQL queries to retrieve detailed public PR information.GitLabMergeRequestto extract MR metadata and map directly toContributionDetail.StatsContribution& Mappers: UpdatedStatsContributionandStatsMapperto persist and mapcontributionsDetailsper member/month.2. Services & APIs
ExternalContributionService: Filters external vs internal/member projects, applies state normalization, deduplication, and chronological sorting (newest first).ContributionsRessources:/v1/contributions/details: Returns detailed PR/MR contributions sorted by creation date descending./v1/contributions/external: Endpoint for external contributions with query parameters (year,state,memberId,limit).3. UI Dashboard (Javelit)
compareContributionDetailsByDateDesc), with fallback to month/year ifcreatedAtis absent.Date(YYYY-MM-DDor month) as the first column of the table.4. Developer Experience & Docs
start.shto automatically export.envand.gcloud-conf.jsoncredentials and launch Quarkus dev mode.README.mdwith API and startup script instructions.🧪 Verification & Testing
ContributionsTabTest: Verifies month parsing, sort key generation, date formatting, and descending date comparison.ExternalContributionServiceTest: Tests external project detection, filtering, limit, and newest-first sorting.GitLabMergeRequestTest: Tests conversion of GitLab MR JSON toContributionDetail.mvn test-compile.🔗 Related Issues