GSoC 2026 Final Report: Enhancing openSUSE Git Workflow
- Student: Mario Marín Hinojosa (GitHub • openSUSE Gitea • LinkedIn)
- Organization: openSUSE Project (Large, ~350h)
- Mentor: Daniel García Moreno (@dgarcia)
- Repository:
git-workflow/autogits(Proposal #253)
1. Project Overview & Objectives
In openSUSE, package maintainers rely on the Open Build Service (OBS) to build software packages across multiple distributions and architectures. The autogits repository hosts core automation services for openSUSE’s Gitea forge (src.opensuse.org), including obs-status-service, a Go service deployed at br.opensuse.org that renders build results as SVG badges and matrices for repository READMEs and pull requests.
Proposal Goals & Evolution
The main goal of the proposal was to modernize obs-status-service to make OBS build results more accessible and visually integrated into Gitea.
During the coding period, together with my mentor, we prioritized:
- Refactoring the core engine: Replacing legacy manual XML/SVG string concatenation with modular Go
text/templatearchitecture. - Modern UI & Theming: Incorporating native Gitea light/dark CSS variables and responsive dimensions.
- Scalability & Performance: Optimizing rendering for large distributions with thousands of packages like
openSUSE:Factoryby introducing aggregated Repository Summaries (?mode=repos) and Project Progress Bars (?mode=bars). - Real-time Interactivity: Investigating browser SVG execution environments and creating a client-side polling prototype.
- Ecosystem & Upstream Work: Contributing UI improvements directly to upstream Gitea.
2. Deliverables & Technical Achievements
Pre-GSoC Tooling & Developer Experience
- Offline Mock Test Mode (PR #118 - Merged): Created a
RedisClientinterface mocking strategy loading compressed OBS data (factory.results.json.bz2), enabling offline local testing via the--test-runflag. - Interactive Link Builder (PR #119 - Merged): Replaced the root 404 handler with an interactive Pico CSS web UI that generates direct badge URLs, live SVG previews, and ready-to-copy Markdown snippets.
Core Architecture & Template Engine
- Go
text/template&go:embed(PR #364 - Merged): Replaced manual string formatting with modular, embedded templates (shared.tmpl,status-badge.tmpl,package-summary.tmpl,project-summary.tmpl,project-matrix.tmpl) with explicit XML data escaping and matrix integration tests.
Theming, Responsiveness & Scalability
- Native Gitea Theming (PR #402 - Merged): Extracted official Gitea light/dark theme CSS variables and resolved
:rootselector styling bugs inside SVG containers. - Responsive Compact Mode (PR #402 - Merged): Added
?compact=true|false|autowith 90° rotated headers and square indicator cells for wide matrices. - Repository Summary View (PR #451 - Merged): Implemented
?mode=reposto aggregate builds by repository and architecture, providing a fast and lightweight overview for large distributions likeopenSUSE:Factory. - Project Progress Bars & Unified API (PR #462 - Merged): Added
?mode=barsand unified visualization query endpoints under a clean?mode=parameter (repos,bars,compact,matrix). Fixed link targets withtarget="_top".
Before (Legacy String Concatenation):
After (Go Templates & Native Gitea Theme):
Real-Time SVG Interactivity & Polling
- Browser Security & Execution Research (
test-js): Tested SVG script execution across browser contexts (<img>sandboxes scripts, while<object>tags execute JavaScript in trusted Gitea contexts). - Throttled Polling Prototype (PR #487 - In Review): Embedded client-side JavaScript in SVG templates that uses throttled
setTimeoutpolling against JSON endpoints (Accept: application/json) to update badge text and CSS classes in real time without page reloads.
Upstream Gitea Contributions
- Reputation Labels Frontend (Commit 1e5a39c - Proposal / Initial Implementation): Implemented an initial proposal and frontend implementation for user and organization reputation badges across profile headers and explore pages (
/explore/users,/explore/organizations).
3. Pull Requests & Code Contributions
Primary Repository (git-workflow/autogits)
| PR | Title | Status | Description |
|---|---|---|---|
| #118 | Implement initial test-run option (#113) |
Merged | Mock Redis client and --test-run mode with realistic test data. |
| #119 | Add default landing page with link builder (#114) |
Merged | Root / interactive badge builder UI and Markdown generator. |
| #364 | refactor(obs-status-service): migrate SVG rendering to templates |
Merged | Migration to Go text/template architecture with go:embed. |
| #402 | feat: responsive compact mode, layout fixes & Gitea theming |
Merged | Gitea light/dark colors, dynamic column sizing, and compact view. |
| #451 | feat: Restore Project Matrix SVGs and fix bugs |
Merged | SVG CSS selector fixes, link targets, and repository summaries. |
| #455 | svg_fixes |
In Review | SVG fixes and enhancements branch consolidating recent updates. |
| #462 | feat: Use '?mode=' param for SVG visualizations |
Merged | Unified ?mode= API (repos, bars, compact, matrix). |
| #487 | feat: dynamic SVG status badge polling and DOM updates |
In Review | Real-time client-side polling with throttled setTimeout. |
Upstream & Research Repositories
| Item | Repository | Status | Description |
|---|---|---|---|
| Commit 1e5a39c | mmarhin/gitea |
Proposal | Initial implementation of frontend reputation labels in profiles and explore views. |
| test-js | mmarhin/test-js |
Completed | SVG JavaScript execution testbed across browser contexts. |
4. openSUSE Conference 2026 Presentation
During the program, I was invited to attend the openSUSE Conference 2026 (oSC26) in Nuremberg. I delivered a 4-minute lightning talk showcasing the project architecture, SVG modernization, and real-time status updates, and had the chance to meet and connect in personal with the openSUSE team and community.
- Talk Recording: Watch the Lightning Talk on YouTube (4:02 mark)
Lightning talk at openSUSE Conference 2026
openSUSE Conference 2026 group photo in Nuremberg
5. Current State & Future Work
- Current Status: All primary milestones are completed and tested. The core SVG enhancements and fixes are currently under review in the
svg_fixesbranch (PR #455), alongside the dynamic polling prototype (PR #487). - Next Steps:
- Deploy the refactored service to production on
br.opensuse.org. - Extend real-time polling to project matrix and repository summary views.
- Integrate structured build status summaries into automated Gitea PR comment bots.
- Deploy the refactored service to production on
6. Acknowledgments
I would like to express my deepest gratitude to my mentor Daniel García Moreno (@dgarcia) for his constant mentorship, code reviews, and architectural guidance throughout the summer.
A special thanks to Adam (@adamm), maintainer of the autogits repository, for his valuable feedback and insights on scaling the service for large OBS distributions like openSUSE:Factory.
Finally, thank you to the openSUSE Community and Google Summer of Code for this incredible opportunity.