Skip to content

Add Jira Data Center automation event source#136

Merged
ak684 merged 2 commits into
mainfrom
alona/jira-dc-automations
May 22, 2026
Merged

Add Jira Data Center automation event source#136
ak684 merged 2 commits into
mainfrom
alona/jira-dc-automations

Conversation

@ak684
Copy link
Copy Markdown
Contributor

@ak684 ak684 commented May 22, 2026

Summary

Adds a built-in jira_dc automation event source for OpenHands-forwarded Jira Data Center webhook events.

  • registers a Jira DC event parser using the webhook webhookEvent field
  • reserves jira_dc so it cannot be used as a custom webhook source
  • reuses the built-in automation webhook secret path for signed OpenHands forwarding
  • adds coverage for parsing, filtering, reserved source validation, and DB-backed event router behavior

Validation

  • uv run pytest tests/test_event_schemas.py tests/test_webhook_router.py -q
  • uv run ruff check openhands/automation/event_schemas/jira_dc.py openhands/automation/event_schemas/__init__.py openhands/automation/schemas.py openhands/automation/utils/webhook.py tests/test_event_schemas.py tests/test_webhook_router.py tests/test_event_router.py
  • uv run ruff format --check openhands/automation/event_schemas/jira_dc.py openhands/automation/event_schemas/__init__.py openhands/automation/schemas.py openhands/automation/utils/webhook.py tests/test_event_schemas.py tests/test_webhook_router.py tests/test_event_router.py
  • CI passed: Docker, ci, Run tests (pytest tests/)
  • OHE E2E on replicated-02: built-in jira_dc comment_created event was received by automation, matched 1/1, dispatched run 17b66b18-8e16-4660-9fa4-5510cc0ca8e7, and completed successfully.
  • OHE E2E on replicated-02: built-in jira_dc jira:issue_updated event was received by automation, matched 1/1, dispatched run 4c17c4b2-e7e1-4c37-a11a-39c06cc49258, and completed successfully.

Local note: the DB-backed event router test depends on Docker/Testcontainers, so it was not run from the local workstation. It is covered by CI's full pytest tests/ run and by the OHE E2E checks above.

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 22, 2026

Coverage

Coverage Report
FileStmtsMissCoverMissing
__init__.py10100% 
app.py1518345%41, 44, 47, 53, 55, 58, 61–64, 67, 72–74, 76, 81–82, 84, 86–88, 90, 94, 96–97, 99–100, 103–109, 112–113, 116, 123–124, 127–128, 132, 140–141, 144, 151–152, 154, 157–158, 161, 166–174, 176–178, 284–286, 291–292, 294–295, 297, 300–302, 304–305, 307–308, 313–314, 318, 321, 323
auth.py147795%84, 112, 121, 158, 311, 319–320
config.py1580100% 
constants.py170100% 
db.py672956%60, 74–75, 78–80, 82, 89, 92–93, 96, 104, 111, 144, 147–148, 152–153, 161, 169, 174, 201, 204–210
dispatcher.py1864575%70, 82, 84–85, 137, 199–202, 237, 240, 255–256, 262–264, 281–282, 288–292, 295–297, 307, 373–374, 399–406, 426, 441–442, 456–457, 466–467, 469
event_router.py591967%83, 88, 119–121, 137–138, 156, 158, 160–161, 163, 173, 179–181, 184, 186, 188
exceptions.py40100% 
execution.py22013339%39–41, 76–79, 87–91, 93, 101–103, 108–112, 114, 128–131, 133, 135, 137–140, 142–147, 149, 151–158, 160–161, 163, 199–201, 207–209, 220–223, 229–231, 271–275, 284, 292, 296, 298–299, 304–305, 310, 388–389, 473–475, 477–483, 486–487, 489, 491–493, 496, 499, 502–505, 507, 510–511, 514–516, 520–521, 525–528, 530, 538–539, 543–545, 547–553, 557, 559, 568–570, 572–574
filter_eval.py50296%161–162
logger.py551769%37, 50–51, 53–59, 74, 77, 101, 103–106
models.py810100% 
preset_router.py1905670%143–145, 255–256, 261–268, 273, 276, 278–279, 291–294, 296–300, 305, 314, 386–388, 501–502, 507–514, 519, 522, 524–525, 537–540, 542–546, 551, 561
router.py1427745%92–93, 113, 115, 118, 120, 134, 147, 149–150, 152–153, 155–156, 159–161, 172–174, 194–196, 202–204, 208–209, 228–229, 231, 234, 259–262, 281, 284, 287, 294, 296, 330–332, 335–337, 341–342, 347, 351–354, 356, 364, 366–367, 372–373, 376, 378, 380–382, 385–388, 393, 395–396, 405, 426–428, 432
scheduler.py60985%134–135, 172–173, 188–189, 199–200, 202
schemas.py2701793%32, 166, 172–174, 233–235, 237, 342–343, 346, 351, 356, 500, 508, 515
trigger_matcher.py28389%72–74
uploads.py1075944%142–145, 153–155, 161–162, 165, 174–175, 178–179, 187–188, 190–193, 196–199, 201, 203–205, 207–210, 212–213, 215, 230, 236–237, 240, 243, 246, 249, 251, 264–265, 279, 282–284, 286–287, 289, 295–296, 309, 317–319, 323
watchdog.py984554%55–57, 69–70, 162–163, 204–205, 207, 209, 218, 220–222, 224, 231–233, 235–237, 239–240, 242, 257, 259, 264–267, 269–274, 276–282, 284
webhook_router.py804840%57, 82–83, 107–108, 110, 113–114, 116, 126, 128–132, 137, 139, 151, 154, 157, 164–165, 167, 180, 182–183, 188, 204, 206–207, 213–215, 217–218, 220, 235, 237–238, 243–244, 261, 263–264, 270–271, 273, 275
backends
   __init__.py130100% 
   base.py290100% 
   cloud.py1306252%43–45, 50–52, 103, 116–118, 131–135, 142–143, 145, 147, 159–160, 229–230, 232–233, 235–238, 240–245, 247–255, 257–258, 260, 267–269, 272–273, 275, 282–284, 289–293, 295
   local.py430100% 
event_schemas
   __init__.py31196%53
   custom.py33584%52–53, 64–66
   detection.py320100% 
   github.py125496%306, 311, 456, 483
   jira_dc.py160100% 
presets
   __init__.py00100% 
storage
   __init__.py60100% 
   factory.py15193%36
   file_store.py22577%21, 30, 35, 40, 64
   google_cloud.py721184%49, 97–102, 136–137, 190, 192
   local.py680100% 
   s3.py1121586%56, 100, 102–103, 107, 109, 190, 213–215, 269–270, 275, 337–338
utils
   __init__.py50100% 
   agent_server.py530100% 
   api_key.py322425%40–41, 46–48, 50, 55, 60, 62–65, 67–68, 70–71, 73, 79, 81–82, 89, 91–92, 98
   cron.py45686%39, 45, 74, 80, 123, 140
   log_context.py100100% 
   model_profiles.py110100% 
   run.py841483%74–76, 183–184, 200–202, 207–209, 256, 262–263
   sandbox.py716114%49–50, 55–58, 60–62, 64–70, 80–81, 86–92, 115–116, 118–122, 124–128, 159–160, 162, 164–167, 172–173, 176, 180–181, 187–189, 194–196, 201–202, 210–212, 214
   tarball_validation.py480100% 
   time.py30100% 
   webhook.py57984%48, 53, 121, 131–133, 139, 202–203
TOTAL333786774% 

@github-actions
Copy link
Copy Markdown

github-actions Bot commented May 22, 2026

🚀 Deploy Preview PR Created/Updated

A deploy preview has been created/updated for this PR.

Deploy PR: https://github.com/OpenHands/deploy/pull/4392
Automation SHA: 24c8074602c85097c2d4e0471845bfa28449ec41
Last updated: May 22, 2026, 08:56:41 AM ET

Once the deploy PR's CI passes, the automation service will be deployed to the feature environment.

@ak684 ak684 marked this pull request as ready for review May 22, 2026 18:10
Copy link
Copy Markdown

@all-hands-bot all-hands-bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Good taste - Clean implementation that follows established patterns.

This PR adds Jira DC webhook support following the same pattern as the GitHub integration. The code is straightforward, well-tested, and properly reserves the source name to prevent conflicts. E2E validation on replicated-02 confirms the implementation works correctly with real events.

[RISK ASSESSMENT]

  • [Overall PR] ⚠️ Risk Assessment: 🟢 LOW

This is a straightforward feature addition. The implementation follows the existing GitHub integration pattern, includes comprehensive test coverage, and uses the established security model. The builtin source registration correctly takes precedence over any potential custom webhooks with the same name. E2E testing confirms the integration works as expected.

VERDICT:
Worth merging: Clean, well-tested feature addition

KEY INSIGHT:
The builtin source lookup correctly prioritizes builtin sources over custom webhooks, ensuring the Jira DC integration always uses the configured webhook secret even if a custom source with the same name exists.


Was this automated review useful? React with 👍 or 👎 to this review to help us measure review quality.
Workflow run: https://github.com/OpenHands/automation/actions/runs/26304302224

@ak684 ak684 merged commit d0d8496 into main May 22, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants