feat: Add Harness integration starter components#3120
feat: Add Harness integration starter components#31200vertake wants to merge 8 commits intosuperplanehq:mainfrom
Conversation
Signed-off-by: Milos Jovanovic <milosjovanovic519@gmail.com>
Signed-off-by: Milos Jovanovic <milosjovanovic519@gmail.com>
Signed-off-by: Milos Jovanovic <milosjovanovic519@gmail.com>
Signed-off-by: Milos Jovanovic <milosjovanovic519@gmail.com>
Signed-off-by: Milos Jovanovic <milosjovanovic519@gmail.com>
Signed-off-by: Milos Jovanovic <milosjovanovic519@gmail.com>
Signed-off-by: Milos Jovanovic <milosjovanovic519@gmail.com>
Signed-off-by: Milos Jovanovic <milosjovanovic519@gmail.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.
|
Hey @0vertake - thanks for opening this one. We have a lot of What is the purpose of the We have the webhook secret to fill in, but we are providing the webhook URL only once you create a trigger component? Order is a bit confusing. The connection needs to be as simple as possible and automated as much as the tool we're integrating allows. All in all, the inexperienced user (me) needs to be able to connect this without too much thinking or digging through the Harness docs and UI. Should be clear an unambiguous - go here, do this. Alternatively, if it helps, you can start with integration that will work with a single simpler component only ( |
|
Hey @AleksandarCole, thanks a lot for the detailed feedback. You’re absolutely right that the connection flow currently exposes too many implementation details. Fields like Account ID, Org ID, and Project ID exist because Harness scopes most resources by account → org → project, so the API requires them. But from a user perspective there’s no reason they should have to find and type these manually. Based on your feedback, I’m planning to simplify the connection flow to something like this:
Internally I’ll still store the account/org/project identifiers, but they’ll be derived automatically instead of being manual inputs. The Account ID can be fetched directly from the API key, so that field doesn’t need to be visible at all. I also agree that webhook configuration shouldn’t appear in the connection step. The better flow is to keep the connection minimal and only deal with webhooks when a trigger is created. Harness allows creating webhooks via API. A safe webhook secret would be automatically generated and hidden from the user. In some accounts the events needed to trigger them (for example pipeline completion events) may not be delivered due to account configuration or feature flags, so I’m planning to implement a polling fallback to ensure the trigger still works. This is mentioned in the Harness documentation around EventRelay generic webhook triggers. I’ll also add an Advanced section that allows setting a base URL in case users are self-hosting Harness or using a custom domain. For the Run Pipeline action, I’m also planning to simplify the node UI to reduce cognitive load for new users. The idea is to keep the main flow minimal and move more technical options under Advanced: Run Pipeline
Advanced
This should make the common case straightforward while still allowing full control when needed. For the On Pipeline Completed trigger, I’m also planning to keep the main configuration focused only on trigger conditions (pipeline and statuses), and move less commonly used options like custom run title under an Advanced section to keep the primary setup simple and clear. Let me know if this direction sounds good! |
Implements #2998
Summary
This PR adds a new Harness integration to SuperPlane with two starter components:
harness.onPipelineCompletedharness.runPipelineThe goal is to let users build workflows that react to Harness pipeline completions and start Harness pipelines from SuperPlane.
Connection Method
Chose API key-based integration via Harness REST APIs (
x-api-key), with optional org/project scoping for resource listing and execution calls.For trigger security, added optional webhook secret validation using:
Authorization: Bearer <secret>(recommended)X-Harness-Webhook-TokenX-Api-KeyWhat Was Implemented
Backend
pkg/integrations/harness/pkg/server/server.gocompleted,nodeStatus, etc.).Components
succeeded,failed,aborted,expired)refFrontend
web_src/src/pages/workflowv2/mappers/harness/Docs
docs/components/Harness.mdxValidation Performed
pkg/integrations/harnesspass.runPipelinesuccess pathrunPipelinefailure pathonPipelineCompletedwebhook trigger firingAuthorization: Bearer <secret>)Demo
Notes
localhostrequires tunneling, e.g. ngrok, during development).