Menu

#229 feat(integrations): add Azure DevOps (VSTS) PM connector

closed
nobody
released (243)
2026-06-10
2026-06-10
Anonymous
No

Originally created by: adityaharishch

Summary

  • Full Azure DevOps integration as a fifth PM provider (alongside Jira, GitHub, Linear, Trello)
  • PAT-based auth supporting all three URL shapes: dev.azure.com/{org}, {org}.visualstudio.com, on-premises TFS/Azure DevOps Server
  • Dynamic state filtering via the per-type states API (no state names injected into WIQL — handles custom states and apostrophes safely)
  • Worklogs posted as work item comments using the 7.1-preview.4 endpoint (same pattern as GitHub/Linear/Trello)
  • UI integrations panel detects connection, shows setup steps with copy-paste env block
  • meridian setup / install-from-bundle.sh prompt for PAT + org + project interactively

What was verified

  • WIQL fetch against dev.azure.com/adithyaharish/Meridian: returns assigned work item IDs ✓
  • States API (/_apis/wit/workitemtypes/Task/states): returns correct state→category mapping ✓
  • Batch work item fetch: returns Title, WorkItemType, State, ChangedDate ✓
  • Worklog comment post to work item [#3]: id=8307849 returned ✓
  • All 26 unit tests pass; 4 integration tests pass; clippy clean; UI builds clean ✓

Note: On-premises support is built to the Azure DevOps REST API spec but not live-tested (no on-prem instance available). Cloud (dev.azure.com) is fully verified.

Reminder for the reviewer: the test PAT in .env was used during development and should be rotated before any deployment.

Test plan

  • [ ] Set AZURE_DEVOPS_PAT, AZURE_DEVOPS_ORG, AZURE_DEVOPS_PROJECT and run meridian force-pm-sync
  • [ ] Verify work items appear in Tasks view of the dashboard with Az glyph
  • [ ] Approve a worklog draft in the Worklogs view and confirm a comment appears on the Azure DevOps work item
  • [ ] Disconnect via the integrations panel and confirm keys are cleared from .env
  • [ ] Test legacy URL: set AZURE_DEVOPS_ORG=yourorg.visualstudio.com (no AZURE_DEVOPS_ORG_URL) and verify it resolves correctly

Related

Tickets: #3

Discussion

  • Anonymous

    Anonymous - 2026-06-10

    Ticket changed by: Akarsh-Hegde

    • status: open --> closed
     
  • Anonymous

    Anonymous - 2026-06-10

    Originally posted by: adityaharishch

    🎉 This PR is included in version 1.39.0 🎉

    The release is available on:

    Your semantic-release bot 📦🚀

     

Log in to post a comment.