I'm looking for ideas on how to design a "generic" bug-tracker integration architecture for Kiwi TCMS (opensource test case management system).
Background: at the moment we support integration with several systems: Bugzilla, JIRA, GitHub and GitLab. Behaviours are: - link existing bugs to test cases/test executions - add comments to existing bugs when TE fails - create new bugs from a TE (semi-automatically now) - display a link to open all reported bugs in a list format (if supported by the other system)
Other features required: - fully automatic creation of new bugs on failure - richer display of information from bug-tracker inside Kiwi TCMS.
Currently we have an interface class which defines the entry points to these actions and then separate implementation for every one of the 3rd party systems. This also means different settings for them and different 3rd party libraries we need to ship in our code.
This also means whenever somebody requests a different system we don't have a ready solution.
For systems which ship multiple versions, e.g. Jira, some of the API may not be compatible with the current version of the library we're using.
I am looking for something that will make it possible to integrate more easily with anything out there (in terms of link & display) b/c this is what most people use. Maybe Open Graph Protocol will help us here although none of the systems seems to support it (except GitHub).
Then for comments and auto creation I'm thinking webhooks but not really sure how to define anything else. 3rd party systems can be vastly different from one another, the list of required fields is also different. So while it is easier to just execute a web-hook I have no idea how to let the user properly configure its payload. There can be also the case where you need to make several HTTP calls (e.g. login, create, add/update) to complete the operation.
Ultimately I'd like to make this part of the software easier on the maintainers and also a bit easier for admins who would need to integrate these 3rd party systems with our software.
What do you reckon ? Has anyone done something similar for a web app?