My name is Fikri, a software developer with a background in Python and JavaScript/TypeScript.
I’m interested in applying for the Plugin Modernizer Stats Visualization project for GSoC 2026.
I’ve spent time exploring the plugin-modernizer-tool repository and the
metadata-plugin-modernizer data repo. The pipeline is already collecting rich data — migration
statuses, PR merge rates, recipe success/failure counts, code change stats across 435+ plugins, but all of it lives as raw JSON, CSV, and Markdown with no visual layer on top. That gap is
exactly what excites me. Building a static dashboard that makes this data explorable and
actionable feels like genuinely useful work for the Jenkins ecosystem.
I started exploring the codebase and submitted my first small contribution: a bug fix in
validate_metadata.py, where a misplaced comma inside a string literal caused Python to silently
concatenate two migration IDs into one, effectively removing both FetchMetadata and
MergeGitIgnoreRecipe from validation — Fix string concatenation bug in validate_metadata.py - Pull Request #1653
My questions for mentors
Is there a preferred JS/TS framework or charting library for the visualization dashboard, or
Is that open to proposal?
Are there existing design mockups or requirements I should be aware of before drafting a
proposal?
Looking forward to connecting with the community and learning more.
Hey everyone! It’s been a busy few weeks since my intro post, so I wanted to share what I’ve
been up to in the plugin-modernizer-tool codebase.
You can find all my PRs here and all my issues here.
Python scripts (March)
Started by getting familiar with the scripts/ directory and cleaning up a few rough edges:
#1653 - Fix silent string concatenation bug in validate_metadata.py that was quietly
dropping two recipe IDs from validation
#1655 - Replace bare except with except Exception for safer error handling
#1654 - Add JSON summary report output to generate_reports.py
#1656 - Handle invalid JSON files gracefully so one corrupted file doesn’t crash the whole
run
#1658 - Add Ruff linter CI workflow so these kinds of issues get caught automatically
going forward
Java core (March–April)
Then I moved into the Java side, which has been a really fun challenge. For each of these I
first opened an issue to document the bug before submitting the fix:
#1660 - Spotted JGit resource leaks in GHService.getDiffStats() - ObjectReader, DiffFormatter, and RevWalk all left unclosed
#1661 - Fixed the leaks by extracting the logic into a proper try-with-resources pattern
#1676 - Found that AddProperty was referencing RemoveProperty.class in its logger and had no recipe-level unit test at all
#1677 - Fixed the logger reference and added the missing test
#1678 - Tracked down an NPE crash when jenkinsVersion is null in PluginModernizer
#1679 - Fixed it with a proper null check
New feature
#1697 - Add --top-plugins N CLI flag so you can run a recipe against the N most-installed Jenkins plugins without having to list them manually
Currently in review
#1696 - Fix three silent-failure bugs where the tool was swallowing errors and continuing
to fork/commit with broken output - all CI green, waiting on merge!
It’s been great going from the Python scripts layer all the way into the Java core and CLI.
Really enjoying the codebase and the community, looking forward to what’s next with GSoC!