Skip to content

Commit 119ac04

Browse files
waleedlatif1claude
andcommitted
azure_devops: address PR review comments
- Fix bgColor #FFFFFF -> #0078D4 in integrations.json and triggers/azure_devops.mdx - Bump File tool operationCount from 4 to 5 (Read, Fetch, Get, Write, Append) - Apply .trim() to org/project across all 15 remaining tools (consistency with query_work_items) - Fix Found ${data.count} -> Found ${data.count ?? items.length} fallback in list_builds, list_pipelines, list_pipeline_runs content strings Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent c4a3508 commit 119ac04

19 files changed

Lines changed: 56 additions & 32 deletions

apps/docs/content/docs/en/triggers/azure_devops.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { BlockInfoCard } from "@/components/ui/block-info-card"
77

88
<BlockInfoCard
99
type="azure_devops"
10-
color="#FFFFFF"
10+
color="#0078D4"
1111
/>
1212

1313
Azure Devops provides 3 triggers for automating workflows based on events.

apps/sim/app/(landing)/integrations/data/integrations.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1888,7 +1888,7 @@
18881888
"name": "Azure DevOps",
18891889
"description": "Interact with Azure DevOps pipelines, builds, and work items",
18901890
"longDescription": "Integrate Azure DevOps into your workflow. List and inspect pipelines and builds, query and manage work items, and add or read comments.",
1891-
"bgColor": "#FFFFFF",
1891+
"bgColor": "#0078D4",
18921892
"iconName": "AzureDevOpsIcon",
18931893
"docsUrl": "https://docs.sim.ai/tools/azure_devops",
18941894
"operations": [
@@ -4169,7 +4169,7 @@
41694169
"description": "Append content to an existing workspace file. The file must already exist. Content is added to the end of the file."
41704170
}
41714171
],
4172-
"operationCount": 4,
4172+
"operationCount": 5,
41734173
"triggers": [],
41744174
"triggerCount": 0,
41754175
"authType": "none",

apps/sim/lib/webhooks/providers/azure-devops.ts

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,31 @@ export const azureDevOpsHandler: WebhookProviderHandler = {
4545
return true
4646
},
4747

48-
async formatInput({ body, webhook }: FormatInputContext): Promise<FormatInputResult> {
48+
extractIdempotencyId(body: unknown): string | null {
49+
const obj = body as Record<string, unknown> | null
50+
if (!obj) return null
51+
const notificationId = obj.notificationId
52+
const subscriptionId = obj.subscriptionId
53+
if (
54+
(typeof notificationId === 'number' || typeof notificationId === 'string') &&
55+
typeof subscriptionId === 'string' &&
56+
subscriptionId
57+
) {
58+
return `azure_devops:${subscriptionId}:${notificationId}`
59+
}
60+
const eventType = obj.eventType
61+
const resource = obj.resource as Record<string, unknown> | undefined
62+
const resourceId = resource?.id
63+
if (
64+
typeof eventType === 'string' &&
65+
(typeof resourceId === 'number' || typeof resourceId === 'string')
66+
) {
67+
return `azure_devops:${eventType}:${resourceId}`
68+
}
69+
return null
70+
},
71+
72+
async formatInput({ body, webhook, requestId }: FormatInputContext): Promise<FormatInputResult> {
4973
const b = body as Record<string, unknown>
5074
const providerConfig = (webhook.providerConfig as Record<string, unknown>) || {}
5175
const triggerId = providerConfig.triggerId as string | undefined
@@ -63,7 +87,7 @@ export const azureDevOpsHandler: WebhookProviderHandler = {
6387
return { input: formatWorkItemCreatedInput(b) }
6488
}
6589

66-
logger.warn('Azure DevOps: unknown eventType for specialized trigger', {
90+
logger.warn(`[${requestId}] Azure DevOps: unknown eventType for specialized trigger`, {
6791
triggerId,
6892
eventType,
6993
})

apps/sim/tools/azure_devops/add_comment.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export const addCommentTool: ToolConfig<AddCommentParams, AddCommentResponse> =
4949
request: {
5050
url: (params) => {
5151
const url = new URL(
52-
`https://dev.azure.com/${params.organization}/${params.project}/_apis/wit/workitems/${Number(params.workItemId)}/comments`
52+
`https://dev.azure.com/${params.organization.trim()}/${params.project.trim()}/_apis/wit/workitems/${Number(params.workItemId)}/comments`
5353
)
5454
url.searchParams.set('api-version', '7.2-preview.4')
5555
return url.toString()

apps/sim/tools/azure_devops/create_work_item.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ export const createWorkItemTool: ToolConfig<CreateWorkItemParams, CreateWorkItem
132132

133133
request: {
134134
url: (params) =>
135-
`https://dev.azure.com/${params.organization}/${params.project}/_apis/wit/workitems/$${encodeURIComponent(params.workItemType)}?api-version=7.2-preview.3`,
135+
`https://dev.azure.com/${params.organization.trim()}/${params.project.trim()}/_apis/wit/workitems/$${encodeURIComponent(params.workItemType)}?api-version=7.2-preview.3`,
136136
method: 'POST',
137137
headers: (params) => ({
138138
'Content-Type': 'application/json-patch+json',

apps/sim/tools/azure_devops/get_build_log.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export const getBuildLogTool: ToolConfig<GetBuildLogParams, GetBuildLogResponse>
5656
request: {
5757
url: (params) => {
5858
const url = new URL(
59-
`https://dev.azure.com/${params.organization}/${params.project}/_apis/build/builds/${params.buildId}/logs/${params.logId}`
59+
`https://dev.azure.com/${params.organization.trim()}/${params.project.trim()}/_apis/build/builds/${params.buildId}/logs/${params.logId}`
6060
)
6161
url.searchParams.set('api-version', '7.2-preview.2')
6262
if (params.startLine !== undefined)

apps/sim/tools/azure_devops/get_build_timeline.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export const getBuildTimelineTool: ToolConfig<GetBuildTimelineParams, GetBuildTi
4141

4242
request: {
4343
url: (params) =>
44-
`https://dev.azure.com/${params.organization}/${params.project}/_apis/build/builds/${Number(params.buildId)}/timeline?api-version=7.2-preview.3`,
44+
`https://dev.azure.com/${params.organization.trim()}/${params.project.trim()}/_apis/build/builds/${Number(params.buildId)}/timeline?api-version=7.2-preview.3`,
4545
method: 'GET',
4646
headers: (params) => ({
4747
'Content-Type': 'application/json',

apps/sim/tools/azure_devops/get_comments.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export const getCommentsTool: ToolConfig<GetCommentsParams, GetCommentsResponse>
7474
request: {
7575
url: (params) => {
7676
const url = new URL(
77-
`https://dev.azure.com/${params.organization}/${params.project}/_apis/wit/workitems/${Number(params.workItemId)}/comments`
77+
`https://dev.azure.com/${params.organization.trim()}/${params.project.trim()}/_apis/wit/workitems/${Number(params.workItemId)}/comments`
7878
)
7979
url.searchParams.set('api-version', '7.2-preview.4')
8080
if (params.top) url.searchParams.set('$top', Number(params.top).toString())

apps/sim/tools/azure_devops/get_pipeline.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export const getPipelineTool: ToolConfig<GetPipelineParams, GetPipelineResponse>
4444
request: {
4545
url: (params) => {
4646
const url = new URL(
47-
`https://dev.azure.com/${params.organization}/${params.project}/_apis/pipelines/${params.pipelineId}`
47+
`https://dev.azure.com/${params.organization.trim()}/${params.project.trim()}/_apis/pipelines/${params.pipelineId}`
4848
)
4949
url.searchParams.set('api-version', '7.2-preview.1')
5050
if (params.pipelineVersion)

apps/sim/tools/azure_devops/get_pipeline_run.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ export const getPipelineRunTool: ToolConfig<GetPipelineRunParams, GetPipelineRun
4444
request: {
4545
url: (params) => {
4646
const url = new URL(
47-
`https://dev.azure.com/${params.organization}/${params.project}/_apis/pipelines/${params.pipelineId}/runs/${params.runId}`
47+
`https://dev.azure.com/${params.organization.trim()}/${params.project.trim()}/_apis/pipelines/${params.pipelineId}/runs/${params.runId}`
4848
)
4949
url.searchParams.set('api-version', '7.2-preview.1')
5050
return url.toString()

0 commit comments

Comments
 (0)