[Epic] [v2.0] Refactor Integration Get*Settings to use Dedicated Structs
Overview
As discussed in !2670 (merged) , we are moving away from the generic Integration struct for service-specific settings. The current approach, using a generic struct, forces users to handle map[string]any the properties field, leading to poor Developer Experience (DX) and a lack of type safety.
This Epic tracks the refactoring of all Get*Settings endpoints to return integration-specific structs (e.g., HarborIntegration, JiraIntegration) that embed the base Integration struct.
Proposed Strategy
To balance velocity with review capacity during the v2.0 window (and the current Hackathon), I propose batching these refactors by domain rather than opening 50+ individual MRs. This ensures a more manageable review process for maintainers and keeps the repository history clean.
Batched Implementation Plan
|
Batch |
Domain |
Integrations Included |
Status |
|
0 |
Reference |
Harbor (Pattern defined in !2670 (merged)) |
Done |
|
1 |
High Priority |
|
|
|
2 |
Chat & Notify |
|
|
|
3 |
CI/CD & Monitoring |
Buildkite, Drone CI, TeamCity, Datadog, Prometheus |
|
|
4 |
Issue Trackers |
Bugzilla, Redmine, Asana, ClickUp, YouTrack |
|
|
5 |
Utilities |
Emails on Push, Pipeline Status Emails, Slash Commands |
|
Proposed Pattern
Each implementation will follow the pattern established in the Harbor MR:
- Define a specific
ServiceIntegrationstruct embeddingIntegration. - Define a typed
ServiceIntegrationPropertiesstruct. - Update
GetProjectServiceSettingsandGetGroupServiceSettingsreturn signatures. - Update interface definitions and regenerate mocks.
Maintainer Feedback Requested
@timofurrer @PatrickRice @heidi.berry — Before I proceed with creating the individual batch issues:
- Does this batched approach work better for your review bandwidth compared to individual issues/MRs?
- Are there specific integrations you would like to see prioritized for the 2.0 release?
- For integrations with missing/unclear API documentation for
properties, do you prefer we usemap[string]anyas a placeholder or wait for further research?