AzureDevOps
Manage Git repositories in Azure DevOps Services. Integration capabilities include retrieving, creating, and updating pull requests. Run pipelines and retrieve Git information.
Utilities · AzureDevOps
Details
| ID | AzureDevOps |
|---|---|
| Provider | Microsoft |
| Category | Utilities |
| From Version | 6.0.0 |
| Docker Image | demisto/crypto:1.0.0.10120494 |
| Supported Modules | Agentix XSIAM |
README
Azure DevOps
Manage Git repositories in Azure DevOps Services. Integration capabilities include retrieving, creating, and updating pull requests. Run pipelines and retrieve git information.
Configure AzureDevOps in Cortex
| Parameter | Description | Required |
|---|---|---|
| Client ID | App Registration Client ID | True |
| Organization | Organization name | True |
| Maximum incidents for one fetch. | Default is 50. Maximum is 200. | False |
| Pull-request project name | The name of the project which the pull requests belongs to. A project name can be obtained by running the ‘azure-devops-project-list’ command. This argument is mandatory for Fetch functionality. | False |
| Pull-request repository name | The name of the repository pull request’s target branch. A repository name can be obtained by running the ‘azure-devops-repository-list’ command. This argument is mandatory for Fetch functionality. | False |
| Incident type | False | |
| Fetch incidents | False | |
| First fetch timestamp (<number> <time unit>, e.g., 12 hours, 7 days) | False | |
| Outgoing mirroring | False | |
| Use system proxy settings | False | |
| Trust any certificate (not secure) | False | |
| Authentication Type | Type of authentication - could be Authorization Code Flow (recommended), Device Code Flow or Client Credentials Flow. | False |
| Tenant ID | For user-auth mode or client credentials. | False |
| Client Secret | For user-auth mode or client credentials. | False |
| Application redirect URI | For user-auth mode or client credentials. | False |
| Authorization code | for user-auth mode - received from the authorization step. see Detailed Instructions (?) section | False |
In order to connect to the Azure DevOps using the Self-Deployed Azure App, use one of the following methods:
- Authorization Code Flow (Recommended).
- Device Code Flow.
- Client Credentials Flow.
Self-Deployed Azure App
- To use a self-configured Azure application, you need to add a new Azure App Registration in the Azure Portal.
To add the registration, refer to the following Microsoft article steps 1-8. - Add the following permissions to your registered app:
Azure DevOps/user_impersonationMicrosoft Graph/User.Read
To add a permission:
a. Navigate to Azure Portal > **Home > App registrations.
b. Search for your app under ‘all applications’.
c. Click API permissions > Add permission.
d. Search for the specific Microsoft API and select the specific permission of type Delegated.
e. Click Grant admin consent.
- In your registered app - Get the Application (client) ID.
a. In the Azure Portal, navigate to App registrations > your registered application > Overview.
b. Copy and save the Application (client) ID. - In the Client ID parameter, enter your registered app Application (client) ID.
-
In the Organization parameter, enter the Azure DevOps organization name.
More information about creating an organization or project can be found here:
To the Azure DevOps Account, use one of the following flows-
Authorization Code Flow (Recommended)
For a Authorization Code configuration:
- To use a self-configured Azure application, you need to add a new Azure App Registration in the Azure Portal. To add the registration, refer to the following Microsoft article steps 1-8.
- In the Authentication Type field, select the Authorization Code option.
- In the Application ID field, enter your Client/Application ID.
- In the Client Secret field, enter your Client Secret.
- In the Tenant ID field, enter your Tenant ID .
- In the Application redirect URI field, enter your Application redirect URI.
- Save the instance.
- Run the
!azure-devops-generate-login-urlcommand in the War Room and follow the instruction. - Run the !azure-devops-auth-test command - a ‘Success’ message should be printed to the War Room.
Device Code Flow
To use the device authorization grant flow.
- In the Application ID field, enter your Client/Application ID.
- Run the !azure-devops-auth-start command.
- Follow the instructions that appear.
- Run the !azure-devops-auth-complete command.
Client Credentials Flow
Assign Azure roles using the Azure portal Microsoft article
Note: In the Select members section, assign the application you created earlier.
To configure a Microsoft integration that uses this authorization flow with a self-deployed Azure application:
- In the Authentication Type field, select the Client Credentials option.
- In the Application ID field, enter your Client/Application ID.
- In the Tenant ID field, enter your Tenant ID .
- In the Client Secret field, enter your Client Secret.
- Click Test to validate the URLs, token, and connection
- Save the instance.
Testing authentication and connectivity
If you are using Device Code Flow or Authorization Code Flow, for testing your authentication and connectivity to the Azure DevOps service run the !azure-devops-auth-test command.
If you are using Client Credentials Flow, click Test when you are configuring the instance.
Troubleshooting
If you encounter the following error:
Please sign in at least once as {tenant_id}/{application_id} in a web browser to enable access to the service.
Please follow these steps to resolve it:
- Navigate to your Azure DevOps organization using this URL (replace {organization_name} with your actual org name):
https://dev.azure.com/{organization_name} - In the bottom-left corner, click Organization settings.
- Select Users from the left menu.
- Click Add Users.
- In the Users or Service Principals field, paste the Application (Client) ID of your app.
- Assign the appropriate Access Level, at least a basic license, and add any necessary projects.
- Click Add to complete.
- Once added, confirm that the application appears in the Users list.
- Now retry running the failing command.
Commands
You can execute these commands from the CLI, as part of an automation, or in a playbook.
After you successfully execute a command, a DBot message appears in the War Room with the command details.
azure-devops-auth-test
Tests the connectivity to Azure.
Base Command
azure-devops-auth-test
Input
There are no input arguments for this command.
Context Output
There is no context output for this command.
Command Example
#### Human Readable Output
>Success!
### azure-devops-generate-login-url
***
Generate the login url used for Authorization code flow.
#### Base Command
`azure-devops-generate-login-url`
#### Input
There are no input arguments for this command.
#### Context Output
There is no context output for this command.
#### Command Example
```azure-devops-generate-login-url```
#### Human Readable Output
>### Authorization instructions
>
>1. Click on the login URL to sign in and grant Cortex XSOAR permissions for your Azure Service Management.
You will be automatically redirected to a link with the following structure:
>```REDIRECT_URI?code=AUTH_CODE&session_state=SESSION_STATE```
>2. Copy the `AUTH_CODE` (without the `“code=”` prefix, and the `session_state` parameter)
and paste it in your instance configuration under the **Authorization code** parameter.
### azure-devops-auth-start
***
Run this command to start the authorization process and follow the instructions in the command results.
#### Base Command
`azure-devops-auth-start`
#### Input
There are no input arguments for this command.
#### Context Output
There is no context output for this command.
#### Command Example
```!azure-devops-auth-start```
#### Human Readable Output
>### Authorization instructions
>
>1. To sign in, use a web browser to open the page [https://microsoft.com/devicelogin](https://microsoft.com/devicelogin)
>and enter the code *XXXX** to authenticate.
>2. Run the **!azure-devops-auth-complete** command in the War Room.
### azure-devops-auth-complete
***
Run this command to complete the authorization process. Should be used after running the azure-devops-auth-start command.
#### Base Command
`azure-devops-auth-complete`
#### Input
There are no input arguments for this command.
#### Context Output
There is no context output for this command.
#### Command Example
```!azure-devops-auth-complete```
#### Human Readable Output
>Authorization completed successfully.
### azure-devops-auth-reset
***
Run this command if for some reason you need to rerun the authentication process.
#### Base Command
`azure-devops-auth-reset`
#### Input
There are no input arguments for this command.
#### Context Output
There is no context output for this command.
#### Command Example
```!azure-devops-auth-reset```
#### Human Readable Output
>Authorization was reset successfully. Run **!azure-devops-auth-start** to start the authentication process.
### get-mapping-fields
***
Get mapping fields from remote incident. Please note that this method will not update the current incident. It's here for debugging purposes.
#### Base Command
`get-mapping-fields`
#### Input
There are no input arguments for this command.
#### Context Output
There is no context output for this command.
#### Command Example
Human Readable Output
azure-devops-pipeline-run
Run a pipeline. A DevOps pipeline is a set of automated processes and tools that allows both developers and operations professionals to work cohesively to build and deploy code to a production environment.
Base Command
azure-devops-pipeline-run
Input
| Argument Name | Description | Required |
|---|---|---|
| project | The name of the project. | Required |
| pipeline_id | The ID of the pipeline. | Required |
| branch_name | The name of the repository branch which runs the pipeline. | Required |
| polling | Use Cortex XSOAR built-in polling to retrieve the result when it’s ready. Possible values are: True, False. Default is False. | Optional |
| interval | Indicates how long to wait between command execution (in seconds) when ‘polling’ argument is true. Minimum value is 10 seconds. Default is 30. | Optional |
| timeout | Indicates the time in seconds until the polling sequence timeouts. Default is 60. | Optional |
| run_id | The ID of the pipeline run to retrieve when polling argument is ‘True’. Intended for use by the Polling process and does not need to be provided by the user. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.PipelineRun.project | String | The name of the project. |
| AzureDevOps.PipelineRun.pipeline.id | Number | The ID of the pipeline. |
| AzureDevOps.PipelineRun.pipeline.name | String | The pipeline repository name. |
| AzureDevOps.PipelineRun.state | String | The run state. |
| AzureDevOps.PipelineRun.createdDate | Date | The run creation date, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.PipelineRun.run_id | Number | The ID of the run. |
| AzureDevOps.PipelineRun.name | String | The name of the run. |
| AzureDevOps.PipelineRun.result | String | The result of the pipeline running. If the run is in progress, the default value is ‘unknown’. |
Command Example
!azure-devops-pipeline-run project="xsoar" pipeline_id="1" branch_name="main"
Context Example
{
"AzureDevOps": {
"PipelineRun": {
"_links": {
"pipeline": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/pipelines/1?revision=1"
},
"pipeline.web": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_build/definition?definitionId=1"
},
"self": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/pipelines/1/runs/1154"
},
"web": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_build/results?buildId=1154"
}
},
"createdDate": "2021-11-30T08:57:03.110121+00:00",
"name": "20211130.1",
"pipeline": {
"folder": "\\",
"id": 1,
"name": "xsoar",
"revision": 1,
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/pipelines/1?revision=1"
},
"project": "xsoar",
"resources": {
"repositories": {
"self": {
"refName": "refs/heads/main",
"repository": {
"id": "XXXX",
"type": "azureReposGit"
},
"version": "2eca089fab76f1f32051d188653ea7d279b90a4b"
}
}
},
"result": "unknown",
"run_id": 1154,
"state": "inProgress",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/pipelines/1/runs/1154"
}
}
}
Human Readable Output
Pipeline Run Information
Pipeline Id Run State Creation Date Run Id Result 1 inProgress 2021-11-30T08:57:03.110121+00:00 1154 unknown
azure-devops-user-add
Add a user, assign the user a license and extensions, and make the user a member of a project group in an account.
Base Command
azure-devops-user-add
Input
| Argument Name | Description | Required |
|---|---|---|
| user_email | The email address of the user to add to the organization. | Required |
| account_license_type | The type of account license. More information can be found here: https://docs.microsoft.com/en-us/rest/api/azure/devops/memberentitlementmanagement/user-entitlements/add?view=azure-devops-rest-6.1#accountlicensetype. Possible values are: express, stakeholder, advanced, earlyAdopter, professional. | Required |
| group_type | The project group type. More information can be found here: https://docs.microsoft.com/en-us/rest/api/azure/devops/memberentitlementmanagement/user-entitlements/add?view=azure-devops-rest-6.1#grouptype. Possible values are: projectReader, projectContributor, projectAdministrator, projectStakeholder. | Required |
| project_id | The ID of the project. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.User.id | String | The ID of the user. |
Command Example
!azure-devops-user-add user_email="user1@xsoar.com" account_license_type="express" group_type="projectContributor" project_id="xsoar-project"
Context Example
{
"AzureDevOps": {
"User": {
"accessLevel": {
"accountLicenseType": "express",
"assignmentSource": "unknown",
"licenseDisplayName": "Basic",
"licensingSource": "account",
"msdnLicenseType": "none",
"status": "pending",
"statusMessage": ""
},
"dateCreated": "2021-11-29T09:05:26.9223894Z",
"extensions": [],
"groupAssignments": [],
"id": "XXXX",
"lastAccessedDate": "0001-01-01T00:00:00Z",
"projectEntitlements": [],
"user": {
"_links": {
"avatar": {
"href": "https://dev.azure.com/xsoar-organization/_apis/GraphProfile/MemberAvatars/aad.NWYyZWMzNTctMjgzMS03M2I4LTk1NWYtMmRkZGM2OWVmMzg3"
},
"membershipState": {
"href": "https://vssps.dev.azure.com/xsoar-organization/_apis/Graph/MembershipStates/aad.NWYyZWMzNTctMjgzMS03M2I4LTk1NWYtMmRkZGM2OWVmMzg3"
},
"memberships": {
"href": "https://vssps.dev.azure.com/xsoar-organization/_apis/Graph/Memberships/aad.NWYyZWMzNTctMjgzMS03M2I4LTk1NWYtMmRkZGM2OWVmMzg3"
},
"self": {
"href": "https://vssps.dev.azure.com/xsoar-organization/_apis/Graph/Users/aad.NWYyZWMzNTctMjgzMS03M2I4LTk1NWYtMmRkZGM2OWVmMzg3"
},
"storageKey": {
"href": "https://vssps.dev.azure.com/xsoar-organization/_apis/Graph/StorageKeys/aad.NWYyZWMzNTctMjgzMS03M2I4LTk1NWYtMmRkZGM2OWVmMzg3"
}
},
"descriptor": "aad.NWYyZWMzNTctMjgzMS03M2I4LTk1NWYtMmRkZGM2OWVmMzg3",
"directoryAlias": "User 1",
"displayName": "XSOAR User 2",
"domain": "XXXX",
"mailAddress": "user1@xsoar.com",
"metaType": "member",
"origin": "aad",
"originId": "2c7514ff-41d0-4eb0-ac82-35b8671de094",
"principalName": "user1@xsoar.com",
"subjectKind": "user",
"url": "https://vssps.dev.azure.com/xsoar-organization/_apis/Graph/Users/aad.NWYyZWMzNTctMjgzMS03M2I4LTk1NWYtMmRkZGM2OWVmMzg3"
}
}
}
}
Human Readable Output
User Information
Id Account License Type Last Accessed Date XXXX express 0001-01-01T00:00:00Z
azure-devops-user-remove
Remove the user from all project memberships.
Base Command
azure-devops-user-remove
Input
| Argument Name | Description | Required |
|---|---|---|
| user_id | The ID of the user to be removed from the organization. A user ID can be obtained by running the ‘azure-devops-user-list’ command. | Required |
Context Output
There is no context output for this command.
Command Example
!azure-devops-user-remove user_id="XXXX"
Human Readable Output
User XXXX was successfully removed from the organization.
azure-devops-pull-request-create
Create a new pull request.
Base Command
azure-devops-pull-request-create
Input
| Argument Name | Description | Required |
|---|---|---|
| project | The name or ID of the project. | Required |
| repository_id | The repository ID of the pull request’s target branch. A repository ID can be obtained by running the ‘azure-devops-repository-list’ command. | Required |
| source_branch | The name of the source branch of the pull request. | Required |
| target_branch | The name of the target branch of the pull request. | Required |
| title | The title of the pull request. | Required |
| description | The description of the pull request. | Required |
| reviewers_ids | Comma-separated list of the pull request reviewers IDs. A reviewer ID can be obtained by running the ‘azure-devops-user-list’ command. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.PullRequest.repository.project.name | String | The name of the project. |
| AzureDevOps.PullRequest.repository.id | String | The ID of the repository. |
| AzureDevOps.PullRequest.repository.name | String | The name of the repository. |
| AzureDevOps.PullRequest.repository.url | String | The URL of the repository. |
| AzureDevOps.PullRequest.repository.size | Number | The size of the repository. |
| AzureDevOps.PullRequest.pullRequestId | Number | The ID of the pull request. |
| AzureDevOps.PullRequest.status | String | The status of the pull request. |
| AzureDevOps.PullRequest.createdBy.displayName | String | The display name of the pull request creator. |
| AzureDevOps.PullRequest.createdBy.id | String | The ID of the pull request creator. |
| AzureDevOps.PullRequest.createdBy.uniqueName | String | The unique name of the pull request creator. |
| AzureDevOps.PullRequest.creationDate | Date | The creation date of the pull request, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.PullRequest.title | String | The title of the pull request |
| AzureDevOps.PullRequest.description | String | The description of the pull request. |
| AzureDevOps.PullRequest.sourceRefName | String | The source branch of the pull request. |
| AzureDevOps.PullRequest.targetRefName | String | The target branch of the pull request. |
| AzureDevOps.PullRequest.mergeStatus | String | The current status of the pull request merge. |
| AzureDevOps.PullRequest.isDraft | Boolean | Whether the pull request is a draft / WIP. |
| AzureDevOps.PullRequest.lastMergeSourceCommit.commitId | String | The ID of the commit at the head of the source branch at the time of the last pull request merge. |
| AzureDevOps.PullRequest.lastMergeSourceCommit.url | String | The REST URL for this resource. |
| AzureDevOps.PullRequest.lastMergeTargetCommit.commitId | String | The ID of the commit at the head of the target branch at the time of the last pull request merge. |
| AzureDevOps.PullRequest.lastMergeTargetCommit.url | String | The REST URL for this resource. |
Command Example
!azure-devops-pull-request-create project="xsoar" repository_id="XXXX" source_branch="test-test" target_branch="main" title="Test xsoar" description="Demo pr" reviewers_ids="XXXX"
Context Example
{
"AzureDevOps": {
"PullRequest": {
"_links": {
"createdBy": {
"href": "https://vssps.visualstudio.com/XXXX/_apis/Identities/XXXX"
},
"iterations": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70/iterations"
},
"repository": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX"
},
"self": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70"
},
"sourceBranch": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/refs/heads/test-test"
},
"sourceCommit": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/b21e2330a6ae2f920b8f5ae9b74e069230b27087"
},
"statuses": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70/statuses"
},
"targetBranch": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/refs/heads/main"
},
"targetCommit": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/2eca089fab76f1f32051d188653ea7d279b90a4b"
},
"workItems": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70/workitems"
}
},
"artifactId": "vstfs:///Git/PullRequestId/xsoar-project%2fXXXX%2f70",
"codeReviewId": 70,
"createdBy": {
"_links": {
"avatar": {
"href": "https://dev.azure.com/xsoar-organization/_apis/GraphProfile/MemberAvatars/aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5"
}
},
"descriptor": "aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5",
"displayName": "XSOAR User 1",
"id": "XXXX",
"imageUrl": "https://dev.azure.com/xsoar-organization/_api/_common/identityImage?id=XXXX",
"uniqueName": "user2@xsoar.com",
"url": "https://vssps.visualstudio.com/XXXX/_apis/Identities/XXXX"
},
"creationDate": "2021-11-30T08:56:55.531709+00:00",
"description": "Demo pr",
"isDraft": false,
"labels": [],
"lastMergeSourceCommit": {
"commitId": "b21e2330a6ae2f920b8f5ae9b74e069230b27087",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/b21e2330a6ae2f920b8f5ae9b74e069230b27087"
},
"lastMergeTargetCommit": {
"commitId": "2eca089fab76f1f32051d188653ea7d279b90a4b",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/2eca089fab76f1f32051d188653ea7d279b90a4b"
},
"mergeId": "a950a614-1a14-4412-90ad-e6f7417e26c6",
"mergeStatus": "queued",
"pullRequestId": 70,
"repository": {
"id": "XXXX",
"isDisabled": false,
"name": "xsoar",
"project": {
"id": "xsoar-project",
"lastUpdateTime": "2021-10-13T15:46:18.017Z",
"name": "xsoar",
"revision": 11,
"state": "wellFormed",
"url": "https://dev.azure.com/xsoar-organization/_apis/projects/xsoar-project",
"visibility": "private"
},
"remoteUrl": "https://xsoar-organization@dev.azure.com/xsoar-organization/xsoar/_git/xsoar",
"size": 12366,
"sshUrl": "git@ssh.dev.azure.com:v3/xsoar-organization/xsoar/xsoar",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX",
"webUrl": "https://dev.azure.com/xsoar-organization/xsoar/_git/xsoar"
},
"reviewers": [
{
"_links": {
"avatar": {
"href": "https://dev.azure.com/xsoar-organization/_apis/GraphProfile/MemberAvatars/aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5"
}
},
"displayName": "XSOAR User 1",
"hasDeclined": false,
"id": "XXXX",
"imageUrl": "https://dev.azure.com/xsoar-organization/_api/_common/identityImage?id=XXXX",
"isFlagged": false,
"reviewerUrl": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70/reviewers/XXXX",
"uniqueName": "user2@xsoar.com",
"url": "https://vssps.visualstudio.com/XXXX/_apis/Identities/XXXX",
"vote": 0
}
],
"sourceRefName": "refs/heads/test-test",
"status": "active",
"supportsIterations": true,
"targetRefName": "refs/heads/main",
"title": "Test xsoar",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70"
}
}
}
Human Readable Output
Pull Request Information
Title Description Created By Pull Request Id Repository Name Repository Id Project Name Project Id Creation Date Test xsoar Demo pr XSOAR User 1 70 xsoar XXXX xsoar xsoar-project 2021-11-30T08:56:55
azure-devops-pull-request-update
Update a pull request. At least one of the following arguments must be provided: title, description, or status.
Base Command
azure-devops-pull-request-update
Input
| Argument Name | Description | Required |
|---|---|---|
| project | The name or ID of the project. | Required |
| repository_id | The repository ID of the pull request’s target branch. A repository ID can be obtained by running the ‘azure-devops-repository-list’ command. | Required |
| pull_request_id | The ID of the pull request to update. | Required |
| title | The updated pull-request title. | Optional |
| description | The updated pull-request description. | Optional |
| status | The updated pull-request status. Possible values are: abandoned, completed, active. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.PullRequest.repository.project.name | String | The name of the project. |
| AzureDevOps.PullRequest.repository.id | String | The ID of the repository. |
| AzureDevOps.PullRequest.repository.name | String | The name of the repository. |
| AzureDevOps.PullRequest.repository.url | String | The URL of the repository. |
| AzureDevOps.PullRequest.repository.size | Number | The size of the repository. |
| AzureDevOps.PullRequest.pullRequestId | Number | The ID of the pull request. |
| AzureDevOps.PullRequest.status | String | The status of the pull request. |
| AzureDevOps.PullRequest.createdBy.displayName | String | The display name of the pull request creator. |
| AzureDevOps.PullRequest.createdBy.id | String | The ID of the pull request creator. |
| AzureDevOps.PullRequest.createdBy.uniqueName | String | The unique name of the pull request creator. |
| AzureDevOps.PullRequest.creationDate | Date | The creation date of the pull request, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.PullRequest.title | String | The title of the pull request |
| AzureDevOps.PullRequest.description | String | The description of the pull request. |
| AzureDevOps.PullRequest.sourceRefName | String | The source branch of the pull request. |
| AzureDevOps.PullRequest.targetRefName | String | The target branch of the pull request. |
| AzureDevOps.PullRequest.mergeStatus | String | The current status of the pull request merge. |
| AzureDevOps.PullRequest.isDraft | Boolean | Whether the pull request is a draft / WIP. |
| AzureDevOps.PullRequest.lastMergeSourceCommit.commitId | String | The ID of the commit at the head of the source branch at the time of the last pull request merge. |
| AzureDevOps.PullRequest.lastMergeSourceCommit.url | String | The REST URL for this resource. |
| AzureDevOps.PullRequest.lastMergeTargetCommit.commitId | String | The ID of the commit at the head of the target branch at the time of the last pull request merge. |
| AzureDevOps.PullRequest.lastMergeTargetCommit.url | String | The REST URL for this resource. |
Command Example
!azure-devops-pull-request-update project="xsoar" repository_id="XXXX" pull_request_id="70" title="New title"
Context Example
{
"AzureDevOps": {
"PullRequest": {
"_links": {
"createdBy": {
"href": "https://vssps.visualstudio.com/XXXX/_apis/Identities/XXXX"
},
"iterations": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70/iterations"
},
"repository": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX"
},
"self": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70"
},
"sourceBranch": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/refs/heads/test-test"
},
"sourceCommit": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/b21e2330a6ae2f920b8f5ae9b74e069230b27087"
},
"statuses": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70/statuses"
},
"targetBranch": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/refs/heads/main"
},
"targetCommit": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/2eca089fab76f1f32051d188653ea7d279b90a4b"
},
"workItems": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70/workitems"
}
},
"artifactId": "vstfs:///Git/PullRequestId/xsoar-project%2fXXXX%2f70",
"codeReviewId": 70,
"createdBy": {
"_links": {
"avatar": {
"href": "https://dev.azure.com/xsoar-organization/_apis/GraphProfile/MemberAvatars/aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5"
}
},
"descriptor": "aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5",
"displayName": "XSOAR User 1",
"id": "XXXX",
"imageUrl": "https://dev.azure.com/xsoar-organization/_api/_common/identityImage?id=XXXX",
"uniqueName": "user2@xsoar.com",
"url": "https://vssps.visualstudio.com/XXXX/_apis/Identities/XXXX"
},
"creationDate": "2021-11-30T08:56:55.531709+00:00",
"description": "Demo pr",
"isDraft": false,
"lastMergeCommit": {
"author": {
"date": "2021-11-30T08:56:55Z",
"email": "user2@xsoar.com",
"name": "XSOAR User 1"
},
"comment": "Merge pull request 70 from test-test into main",
"commitId": "333b2ec34ca6b330901af84a2483c87effb49c23",
"committer": {
"date": "2021-11-30T08:56:55Z",
"email": "user2@xsoar.com",
"name": "XSOAR User 1"
},
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/333b2ec34ca6b330901af84a2483c87effb49c23"
},
"lastMergeSourceCommit": {
"commitId": "b21e2330a6ae2f920b8f5ae9b74e069230b27087",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/b21e2330a6ae2f920b8f5ae9b74e069230b27087"
},
"lastMergeTargetCommit": {
"commitId": "2eca089fab76f1f32051d188653ea7d279b90a4b",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/2eca089fab76f1f32051d188653ea7d279b90a4b"
},
"mergeId": "a950a614-1a14-4412-90ad-e6f7417e26c6",
"mergeStatus": "succeeded",
"pullRequestId": 70,
"repository": {
"id": "XXXX",
"isDisabled": false,
"name": "xsoar",
"project": {
"id": "xsoar-project",
"lastUpdateTime": "2021-10-13T15:46:18.017Z",
"name": "xsoar",
"revision": 11,
"state": "wellFormed",
"url": "https://dev.azure.com/xsoar-organization/_apis/projects/xsoar-project",
"visibility": "private"
},
"remoteUrl": "https://xsoar-organization@dev.azure.com/xsoar-organization/xsoar/_git/xsoar",
"size": 12366,
"sshUrl": "git@ssh.dev.azure.com:v3/xsoar-organization/xsoar/xsoar",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX",
"webUrl": "https://dev.azure.com/xsoar-organization/xsoar/_git/xsoar"
},
"reviewers": [
{
"_links": {
"avatar": {
"href": "https://dev.azure.com/xsoar-organization/_apis/GraphProfile/MemberAvatars/aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5"
}
},
"displayName": "XSOAR User 1",
"hasDeclined": false,
"id": "XXXX",
"imageUrl": "https://dev.azure.com/xsoar-organization/_api/_common/identityImage?id=XXXX",
"isFlagged": false,
"reviewerUrl": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70/reviewers/XXXX",
"uniqueName": "user2@xsoar.com",
"url": "https://vssps.visualstudio.com/XXXX/_apis/Identities/XXXX",
"vote": 0
}
],
"sourceRefName": "refs/heads/test-test",
"status": "active",
"supportsIterations": true,
"targetRefName": "refs/heads/main",
"title": "New title",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70"
}
}
}
Human Readable Output
Pull Request Information
Title Description Created By Pull Request Id Repository Name Repository Id Project Name Project Id Creation Date New title Demo pr XSOAR User 1 70 xsoar XXXX xsoar xsoar-project 2021-11-30T08:56:55
azure-devops-pull-request-list
Retrieve pull requests in repository.
Base Command
azure-devops-pull-request-list
Input
| Argument Name | Description | Required |
|---|---|---|
| project | The name or ID of the project which the pull requests belongs to. | Required |
| repository | The name of the repository pull request’s target branch. | Required |
| page | The page number of the results to retrieve. Minimum value is 1. Default is 1. | Optional |
| limit | The number of results to retrieve. Minimum value is 1. Default is 50. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.PullRequest.repository.project.name | String | The name of the project. |
| AzureDevOps.PullRequest.repository.id | String | The ID of the repository. |
| AzureDevOps.PullRequest.repository.name | String | The name of the repository. |
| AzureDevOps.PullRequest.repository.url | String | The URL of the repository. |
| AzureDevOps.PullRequest.pullRequestId | Number | The ID of the pull request. |
| AzureDevOps.PullRequest.status | String | The status of the pull request. |
| AzureDevOps.PullRequest.createdBy.displayName | String | The display name of the pull request creator. |
| AzureDevOps.PullRequest.createdBy.id | String | The ID of the pull request creator. |
| AzureDevOps.PullRequest.createdBy.uniqueName | String | The unique name of the pull request creator. |
| AzureDevOps.PullRequest.creationDate | Date | The creation date of the pull request, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.PullRequest.title | String | The title of the pull request |
| AzureDevOps.PullRequest.description | String | The description of the pull request. |
| AzureDevOps.PullRequest.sourceRefName | String | The source branch of the pull request. |
| AzureDevOps.PullRequest.targetRefName | String | The target branch of the pull request. |
| AzureDevOps.PullRequest.mergeStatus | String | The current status of the pull request merge. |
| AzureDevOps.PullRequest.isDraft | Boolean | Whether the pull request is a draft / WIP. |
| AzureDevOps.PullRequest.lastMergeSourceCommit.commitId | String | The ID of the commit at the head of the source branch at the time of the last pull request merge. |
| AzureDevOps.PullRequest.lastMergeSourceCommit.url | String | The REST URL for this resource. |
| AzureDevOps.PullRequest.lastMergeTargetCommit.commitId | String | The ID of the commit at the head of the target branch at the time of the last pull request merge. |
| AzureDevOps.PullRequest.lastMergeTargetCommit.url | String | The REST URL for this resource. |
Command Example
!azure-devops-pull-request-list project="xsoar" repository="xsoar" page="1" limit="2"
Context Example
{
"AzureDevOps": {
"PullRequest": [
{
"codeReviewId": 70,
"createdBy": {
"_links": {
"avatar": {
"href": "https://dev.azure.com/xsoar-organization/_apis/GraphProfile/MemberAvatars/aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5"
}
},
"descriptor": "aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5",
"displayName": "XSOAR User 1",
"id": "XXXX",
"imageUrl": "https://dev.azure.com/xsoar-organization/_api/_common/identityImage?id=XXXX",
"uniqueName": "user2@xsoar.com",
"url": "https://vssps.visualstudio.com/XXXX/_apis/Identities/XXXX"
},
"creationDate": "2021-11-30T08:56:55.531709+00:00",
"description": "Demo pr",
"isDraft": false,
"lastMergeCommit": {
"commitId": "333b2ec34ca6b330901af84a2483c87effb49c23",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/333b2ec34ca6b330901af84a2483c87effb49c23"
},
"lastMergeSourceCommit": {
"commitId": "b21e2330a6ae2f920b8f5ae9b74e069230b27087",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/b21e2330a6ae2f920b8f5ae9b74e069230b27087"
},
"lastMergeTargetCommit": {
"commitId": "2eca089fab76f1f32051d188653ea7d279b90a4b",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/2eca089fab76f1f32051d188653ea7d279b90a4b"
},
"mergeId": "a950a614-1a14-4412-90ad-e6f7417e26c6",
"mergeStatus": "succeeded",
"pullRequestId": 70,
"repository": {
"id": "XXXX",
"name": "xsoar",
"project": {
"id": "xsoar-project",
"lastUpdateTime": "0001-01-01T00:00:00",
"name": "xsoar",
"state": "unchanged",
"visibility": "unchanged"
},
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX"
},
"reviewers": [
{
"_links": {
"avatar": {
"href": "https://dev.azure.com/xsoar-organization/_apis/GraphProfile/MemberAvatars/aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5"
}
},
"displayName": "XSOAR User 1",
"hasDeclined": false,
"id": "XXXX",
"imageUrl": "https://dev.azure.com/xsoar-organization/_api/_common/identityImage?id=XXXX",
"isFlagged": false,
"reviewerUrl": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70/reviewers/XXXX",
"uniqueName": "user2@xsoar.com",
"url": "https://vssps.visualstudio.com/XXXX/_apis/Identities/XXXX",
"vote": 0
}
],
"sourceRefName": "refs/heads/test-test",
"status": "active",
"supportsIterations": true,
"targetRefName": "refs/heads/main",
"title": "Test xsoar",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70"
},
{
"codeReviewId": 65,
"createdBy": {
"_links": {
"avatar": {
"href": "https://dev.azure.com/xsoar-organization/_apis/GraphProfile/MemberAvatars/aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5"
}
},
"descriptor": "aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5",
"displayName": "XSOAR User 1",
"id": "XXXX",
"imageUrl": "https://dev.azure.com/xsoar-organization/_api/_common/identityImage?id=XXXX",
"uniqueName": "user2@xsoar.com",
"url": "https://vssps.visualstudio.com/XXXX/_apis/Identities/XXXX"
},
"creationDate": "2021-11-28T16:08:09.172985+00:00",
"description": "Demo pr",
"isDraft": false,
"lastMergeCommit": {
"commitId": "62d2b76a5479406cdfba377f041fed7bb621ccf7",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/62d2b76a5479406cdfba377f041fed7bb621ccf7"
},
"lastMergeSourceCommit": {
"commitId": "738ab51bc619423969314de9bb93373bfb6ae101",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/738ab51bc619423969314de9bb93373bfb6ae101"
},
"lastMergeTargetCommit": {
"commitId": "2eca089fab76f1f32051d188653ea7d279b90a4b",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/2eca089fab76f1f32051d188653ea7d279b90a4b"
},
"mergeId": "46bd552a-8a93-45bb-82ae-4c108020ca15",
"mergeStatus": "succeeded",
"pullRequestId": 65,
"repository": {
"id": "XXXX",
"name": "xsoar",
"project": {
"id": "xsoar-project",
"lastUpdateTime": "0001-01-01T00:00:00",
"name": "xsoar",
"state": "unchanged",
"visibility": "unchanged"
},
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX"
},
"reviewers": [
{
"_links": {
"avatar": {
"href": "https://dev.azure.com/xsoar-organization/_apis/GraphProfile/MemberAvatars/aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5"
}
},
"displayName": "XSOAR User 1",
"hasDeclined": false,
"id": "XXXX",
"imageUrl": "https://dev.azure.com/xsoar-organization/_api/_common/identityImage?id=XXXX",
"isFlagged": false,
"reviewerUrl": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/65/reviewers/XXXX",
"uniqueName": "user2@xsoar.com",
"url": "https://vssps.visualstudio.com/XXXX/_apis/Identities/XXXX",
"vote": 0
}
],
"sourceRefName": "refs/heads/xsoar-test",
"status": "active",
"supportsIterations": true,
"targetRefName": "refs/heads/main",
"title": "Test xsoar",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/65"
}
]
}
}
Human Readable Output
Pull Request List
Current page size: 2
Showing page 1 out others that may exist.
Title Description Created By Pull Request Id Repository Name Repository Id Project Name Project Id Creation Date Test xsoar Demo pr XSOAR User 1 70 xsoar XXXX xsoar xsoar-project 2021-11-30T08:56:55 Test xsoar Demo pr XSOAR User 1 65 xsoar XXXX xsoar xsoar-project 2021-11-28T16:08:09
azure-devops-project-list
Retrieve all projects in the organization that the authenticated user has access to.
Base Command
azure-devops-project-list
Input
| Argument Name | Description | Required |
|---|---|---|
| page | The page number of the results to retrieve. Minimum value is 1. Default is 1. | Optional |
| limit | The number of results to retrieve. Minimum value is 1. Default is 50. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.Project.name | String | The name of the project. |
| AzureDevOps.Project.state | String | The state of the project. |
| AzureDevOps.Project.revision | Number | The revision number of the project. |
| AzureDevOps.Project.visibility | String | Indicates whom the project is visible to. |
| AzureDevOps.Project.lastUpdateTime | Date | The project last update time, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.Project.id | String | The ID of the Project. |
Command Example
!azure-devops-project-list page="1" limit="50"
Context Example
{
"AzureDevOps": {
"Project": [
{
"id": "xsoar-project",
"lastUpdateTime": "2021-10-13T15:46:18.017000+00:00",
"name": "xsoar",
"revision": 11,
"state": "wellFormed",
"url": "https://dev.azure.com/xsoar-organization/_apis/projects/xsoar-project",
"visibility": "private"
}
]
}
}
Human Readable Output
Project List
Current page size: 50
Showing page 1 out others that may exist.
Name Id State Revision Visibility Last Update Time xsoar xsoar-project wellFormed 11 private 2021-10-13T15:46:18.017000+00:00
azure-devops-repository-list
Retrieve git repositories in the organization project.
Base Command
azure-devops-repository-list
Input
| Argument Name | Description | Required |
|---|---|---|
| project | The name or ID of the project to which the repositories belong to. | Required |
| limit | The number of results to retrieve. Minimum value is 1. Default is 50. | Optional |
| page | The page number of the results to retrieve. Minimum value is 1. Default is 1. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.Project.name | String | The name of the project. |
| AzureDevOps.Repository.id | String | The ID of the repository. |
| AzureDevOps.Repository.name | String | The name of the repository. |
| AzureDevOps.Repository.webUrl | String | The web URL of the repository. |
| AzureDevOps.Repository.size | Number | The size of the repository (in bytes). |
Command Example
!azure-devops-repository-list project="xsoar" limit="1" page="1"
Context Example
{
"AzureDevOps": {
"Repository": {
"id": "xsoar-repository",
"isDisabled": false,
"name": "test2803",
"project": {
"id": "xsoar-project",
"lastUpdateTime": "2021-10-13T15:46:18.017Z",
"name": "xsoar",
"revision": 11,
"state": "wellFormed",
"url": "https://dev.azure.com/xsoar-organization/_apis/projects/xsoar-project",
"visibility": "private"
},
"remoteUrl": "https://xsoar-organization@dev.azure.com/xsoar-organization/xsoar/_git/test2803",
"size": 0,
"sshUrl": "git@ssh.dev.azure.com:v3/xsoar-organization/xsoar/test2803",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/xsoar-repository",
"webUrl": "https://dev.azure.com/xsoar-organization/xsoar/_git/test2803"
}
}
}
Human Readable Output
Repositories List
Current page size: 1
Showing page 1 out others that may exist.
Id Name Web Url Size ( Bytes ) xsoar-repository test2803 https://dev.azure.com/xsoar-organization/xsoar/_git/test2803 0
azure-devops-user-list
Query users that were added to organization projects.
Base Command
azure-devops-user-list
Input
| Argument Name | Description | Required |
|---|---|---|
| query | Users or organization query prefix. For example, if you want to retrieve information about the user ‘Tom’, you can enter the value of this argument as ‘Tom’. | Required |
| page | The page number of the results to retrieve. Minimum value is 1. Default is 1. | Optional |
| limit | The number of results to retrieve. Minimum value is 1. Default is 50. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.User.entityType | String | The type of the entity. |
| AzureDevOps.User.localId | String | The ID of the identity. |
| AzureDevOps.User.signInAddress | String | The email address of the user. |
Command Example
!azure-devops-user-list query="ofek"
Context Example
{
"AzureDevOps": {
"User": [
{
"active": true,
"department": null,
"description": null,
"displayName": "XSOAR User 2",
"entityId": "vss.ds.v1.aad.user.2c7514ff41d04eb0ac8235b8671de094",
"entityType": "User",
"guest": false,
"isMru": false,
"jobTitle": null,
"localDirectory": "vsd",
"localId": "XXXX",
"mail": "user1@xsoar.com",
"mailNickname": "User 1",
"originDirectory": "aad",
"originId": "2c7514ff-41d0-4eb0-ac82-35b8671de094",
"physicalDeliveryOfficeName": null,
"samAccountName": "user1@xsoar.com",
"scopeName": "Palo Alto Networks",
"signInAddress": "user1@xsoar.com",
"subjectDescriptor": "aad.NWYyZWMzNTctMjgzMS03M2I4LTk1NWYtMmRkZGM2OWVmMzg3",
"surname": "User 1",
"telephoneNumber": null
}
]
}
}
Human Readable Output
Users List
Current page size: 50
Showing page 1 out others that may exist.
Entity Type Id user1@xsoar.com User XXXX user2@xsoar.com User XXXX
azure-devops-pull-request-get
Retrieve pull-request.
Base Command
azure-devops-pull-request-get
Input
| Argument Name | Description | Required |
|---|---|---|
| project | The name or ID of the project. | Required |
| repository_id | The repository ID of the pull request’s target branch. A repository ID can be obtained by running the ‘azure-devops-repository-list’ command. | Required |
| pull_request_id | The ID of the pull request to retrieve. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.PullRequest.repository.project.name | String | The name of the project. |
| AzureDevOps.PullRequest.repository.id | String | The ID of the repository. |
| AzureDevOps.PullRequest.repository.name | String | The name of the repository. |
| AzureDevOps.PullRequest.repository.url | String | The URL of the repository. |
| AzureDevOps.PullRequest.repository.size | Number | The size of the repository. |
| AzureDevOps.PullRequest.pullRequestId | Number | The ID of the pull request. |
| AzureDevOps.PullRequest.status | String | The status of the pull request. |
| AzureDevOps.PullRequest.createdBy.displayName | String | The display name of the pull request creator. |
| AzureDevOps.PullRequest.createdBy.id | String | The ID of the pull request creator. |
| AzureDevOps.PullRequest.createdBy.uniqueName | String | The unique name of the pull request creator. |
| AzureDevOps.PullRequest.creationDate | Date | The creation date of the pull request, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.PullRequest.title | String | The title of the pull request |
| AzureDevOps.PullRequest.description | String | The description of the pull request. |
| AzureDevOps.PullRequest.sourceRefName | String | The source branch of the pull request. |
| AzureDevOps.PullRequest.targetRefName | String | The target branch of the pull request. |
| AzureDevOps.PullRequest.mergeStatus | String | The current status of the pull request merge. |
| AzureDevOps.PullRequest.isDraft | Boolean | Whether the pull request is a draft / WIP. |
| AzureDevOps.PullRequest.lastMergeSourceCommit.commitId | String | The ID of the commit at the head of the source branch at the time of the last pull request merge. |
| AzureDevOps.PullRequest.lastMergeSourceCommit.url | String | The REST URL for the merge source commit. |
| AzureDevOps.PullRequest.lastMergeTargetCommit.commitId | String | The ID of the commit at the head of the target branch at the time of the last pull request merge. |
| AzureDevOps.PullRequest.lastMergeTargetCommit.url | String | The REST URL for the merge target commit. |
Command Example
!azure-devops-pull-request-get project="xsoar" repository_id="XXXX" pull_request_id="70"
Context Example
{
"AzureDevOps": {
"PullRequest": {
"_links": {
"createdBy": {
"href": "https://vssps.visualstudio.com/XXXX/_apis/Identities/XXXX"
},
"iterations": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70/iterations"
},
"repository": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX"
},
"self": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70"
},
"sourceBranch": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/refs/heads/test-test"
},
"sourceCommit": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/b21e2330a6ae2f920b8f5ae9b74e069230b27087"
},
"statuses": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70/statuses"
},
"targetBranch": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/refs/heads/main"
},
"targetCommit": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/2eca089fab76f1f32051d188653ea7d279b90a4b"
},
"workItems": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70/workitems"
}
},
"artifactId": "vstfs:///Git/PullRequestId/xsoar-project%2fXXXX%2f70",
"codeReviewId": 70,
"createdBy": {
"_links": {
"avatar": {
"href": "https://dev.azure.com/xsoar-organization/_apis/GraphProfile/MemberAvatars/aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5"
}
},
"descriptor": "aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5",
"displayName": "XSOAR User 1",
"id": "XXXX",
"imageUrl": "https://dev.azure.com/xsoar-organization/_api/_common/identityImage?id=XXXX",
"uniqueName": "user2@xsoar.com",
"url": "https://vssps.visualstudio.com/XXXX/_apis/Identities/XXXX"
},
"creationDate": "2021-11-30T08:56:55.531709+00:00",
"description": "Demo pr",
"isDraft": false,
"lastMergeCommit": {
"author": {
"date": "2021-11-30T08:56:55Z",
"email": "user2@xsoar.com",
"name": "XSOAR User 1"
},
"comment": "Merge pull request 70 from test-test into main",
"commitId": "333b2ec34ca6b330901af84a2483c87effb49c23",
"committer": {
"date": "2021-11-30T08:56:55Z",
"email": "user2@xsoar.com",
"name": "XSOAR User 1"
},
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/333b2ec34ca6b330901af84a2483c87effb49c23"
},
"lastMergeSourceCommit": {
"commitId": "b21e2330a6ae2f920b8f5ae9b74e069230b27087",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/b21e2330a6ae2f920b8f5ae9b74e069230b27087"
},
"lastMergeTargetCommit": {
"commitId": "2eca089fab76f1f32051d188653ea7d279b90a4b",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/commits/2eca089fab76f1f32051d188653ea7d279b90a4b"
},
"mergeId": "a950a614-1a14-4412-90ad-e6f7417e26c6",
"mergeStatus": "succeeded",
"pullRequestId": 70,
"repository": {
"id": "XXXX",
"isDisabled": false,
"name": "xsoar",
"project": {
"id": "xsoar-project",
"lastUpdateTime": "2021-10-13T15:46:18.017Z",
"name": "xsoar",
"revision": 11,
"state": "wellFormed",
"url": "https://dev.azure.com/xsoar-organization/_apis/projects/xsoar-project",
"visibility": "private"
},
"remoteUrl": "https://xsoar-organization@dev.azure.com/xsoar-organization/xsoar/_git/xsoar",
"size": 12366,
"sshUrl": "git@ssh.dev.azure.com:v3/xsoar-organization/xsoar/xsoar",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX",
"webUrl": "https://dev.azure.com/xsoar-organization/xsoar/_git/xsoar"
},
"reviewers": [
{
"_links": {
"avatar": {
"href": "https://dev.azure.com/xsoar-organization/_apis/GraphProfile/MemberAvatars/aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5"
}
},
"displayName": "XSOAR User 1",
"hasDeclined": false,
"id": "XXXX",
"imageUrl": "https://dev.azure.com/xsoar-organization/_api/_common/identityImage?id=XXXX",
"isFlagged": false,
"reviewerUrl": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70/reviewers/XXXX",
"uniqueName": "user2@xsoar.com",
"url": "https://vssps.visualstudio.com/XXXX/_apis/Identities/XXXX",
"vote": 0
}
],
"sourceRefName": "refs/heads/test-test",
"status": "active",
"supportsIterations": true,
"targetRefName": "refs/heads/main",
"title": "Test xsoar",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/pullRequests/70"
}
}
}
Human Readable Output
Pull Request Information
Title Description Created By Pull Request Id Repository Name Repository Id Project Name Project Id Creation Date Test xsoar Demo pr XSOAR User 1 70 xsoar XXXX xsoar xsoar-project 2021-11-30T08:56:55
azure-devops-pipeline-run-get
Retrieve information for a pipeline run.
Base Command
azure-devops-pipeline-run-get
Input
| Argument Name | Description | Required |
|---|---|---|
| project | The name of the project. | Required |
| pipeline_id | The ID of the pipeline to retrieve. | Required |
| run_id | The ID of the pipeline run to retrieve. | Required |
| scheduled | Indicates if the command was scheduled. Possible values are: True, False. Default is False. | Optional |
| interval | Indicates how long to wait between command execution (in seconds) when ‘polling’ argument is true. Minimum value is 10 seconds. Default is 30. | Optional |
| timeout | Indicates the time in seconds until the polling sequence timeouts. Default is 60. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.PipelineRun.project | String | The name of the project. |
| AzureDevOps.PipelineRun.pipeline.id | Number | The ID of the pipeline. |
| AzureDevOps.PipelineRun.pipeline.name | String | Pipeline repository name. |
| AzureDevOps.PipelineRun.state | String | The run state. |
| AzureDevOps.PipelineRun.createdDate | Date | The run creation date, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.PipelineRun.run_id | Number | The ID of the run. |
| AzureDevOps.PipelineRun.name | String | The name of the run. |
| AzureDevOps.PipelineRun.result | String | The result of the pipeline running. If the run is in progress, the default value is ‘unknown’. |
Command Example
!azure-devops-pipeline-run-get project="xsoar" pipeline_id="1" run_id="114"
Context Example
{
"AzureDevOps": {
"PipelineRun": {
"_links": {
"pipeline": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/pipelines/1?revision=1"
},
"pipeline.web": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_build/definition?definitionId=1"
},
"self": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/pipelines/1/runs/114"
},
"web": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_build/results?buildId=114"
}
},
"createdDate": "2021-11-07T08:09:03.592213+00:00",
"finishedDate": "2021-11-07T08:09:28.3447367Z",
"name": "20211107.1",
"pipeline": {
"folder": "\\",
"id": 1,
"name": "xsoar",
"revision": 1,
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/pipelines/1?revision=1"
},
"project": "xsoar",
"resources": {
"repositories": {
"self": {
"refName": "refs/heads/main",
"repository": {
"id": "XXXX",
"type": "azureReposGit"
},
"version": "2eca089fab76f1f32051d188653ea7d279b90a4b"
}
}
},
"result": "failed",
"run_id": 114,
"state": "completed",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/pipelines/1/runs/114"
}
}
}
Human Readable Output
Pipeline Run Information
Pipeline Id Run State Creation Date Run Id Result 1 completed 2021-11-07T08:09:03.592213+00:00 114 failed
azure-devops-pipeline-run-list
Retrieve pipeline runs list. The command retrieves up to the top 10000 runs for a particular pipeline.
Base Command
azure-devops-pipeline-run-list
Input
| Argument Name | Description | Required |
|---|---|---|
| project | The name of the organization project. | Required |
| page | The page number of the results to retrieve. Minimum value is 1. Default is 1. | Optional |
| limit | The number of results to retrieve. Minimum value is 1. Default is 50. | Optional |
| pipeline_id | The ID of the pipeline which the runs belongs to. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.PipelineRun.project | String | The name of the project. |
| AzureDevOps.PipelineRun.pipeline.id | Number | The ID of the pipeline. |
| AzureDevOps.PipelineRun.pipeline.name | String | Pipeline repository name |
| AzureDevOps.PipelineRun.state | String | The run state. |
| AzureDevOps.PipelineRun.createdDate | Date | The run creation date, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.PipelineRun.run_id | Number | The ID of the run. |
| AzureDevOps.PipelineRun.name | String | The name of the run. |
| AzureDevOps.PipelineRun.result | String | The result of the pipeline running. If the run is in progress, the default value is ‘unknown’. |
Command Example
!azure-devops-pipeline-run-list project="xsoar" page="1" limit="1" pipeline_id="1"
Context Example
{
"AzureDevOps": {
"PipelineRun": {
"_links": {
"pipeline": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/pipelines/1?revision=1"
},
"pipeline.web": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_build/definition?definitionId=1"
},
"self": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/pipelines/1/runs/1154"
},
"web": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_build/results?buildId=1154"
}
},
"createdDate": "2021-11-30T08:57:03.110121+00:00",
"name": "20211130.1",
"pipeline": {
"folder": "\\",
"id": 1,
"name": "xsoar",
"revision": 1,
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/pipelines/1?revision=1"
},
"project": "xsoar",
"result": "unknown",
"run_id": 1154,
"state": "inProgress",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/pipelines/1/runs/1154"
}
}
}
Human Readable Output
Pipeline runs List
Current page size: 1
Showing page 1 out others that may exist.
Pipeline Id Run State Creation Date Run Id Result 1 inProgress 2021-11-30T08:57:03.110121+00:00 1154 unknown
azure-devops-pipeline-list
Retrieve project pipelines list.
Base Command
azure-devops-pipeline-list
Input
| Argument Name | Description | Required |
|---|---|---|
| project | The name of the organization project. | Required |
| page | The page number of the results to retrieve. Minimum value is 1. Default is 1. | Optional |
| limit | The number of results to retrieve. Minimum value is 1. Default is 50. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.Pipeline.project | String | The name of the project. |
| AzureDevOps.Pipeline.id | Number | The ID of the pipeline. |
| AzureDevOps.Pipeline.revision | Number | Pipeline revision number. |
| AzureDevOps.Pipeline.name | String | Pipeline name. |
| AzureDevOps.Pipeline.folder | String | Pipeline folder. |
Command Example
!azure-devops-pipeline-list project="xsoar" page="1" limit="1"
Context Example
{
"AzureDevOps": {
"Pipeline": {
"_links": {
"self": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/pipelines/2?revision=1"
},
"web": {
"href": "https://dev.azure.com/xsoar-organization/xsoar-project/_build/definition?definitionId=2"
}
},
"folder": "\\",
"id": 2,
"name": "xsoar (1)",
"project": "xsoar",
"revision": 1,
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/pipelines/2?revision=1"
}
}
}
Human Readable Output
Pipelines List
Current page size: 1
Showing page 1 out others that may exist.
Id Name Revision Folder 2 xsoar (1) 1 \
azure-devops-branch-list
Retrieve repository branches list.
Base Command
azure-devops-branch-list
Input
| Argument Name | Description | Required |
|---|---|---|
| project | The name of the organization project. | Required |
| repository | The name of the project repository. | Required |
| page | The page number of the results to retrieve. Minimum value is 1. Default is 1. | Optional |
| limit | The number of results to retrieve. Minimum value is 1. Default is 50. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.Branch.project | String | The name of the project. |
| AzureDevOps.Branch.repository | String | The name of the repository. |
| AzureDevOps.Branch.name | String | The name of the branch. |
Command Example
!azure-devops-branch-list project="xsoar" repository="xsoar" page="1" limit="1"
Context Example
{
"AzureDevOps": {
"Branch": {
"creator": {
"_links": {
"avatar": {
"href": "https://dev.azure.com/xsoar-organization/_apis/GraphProfile/MemberAvatars/aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5"
}
},
"descriptor": "aad.ZWFlMjk2ZGYtMzYwOS03YWY3LWFkNzMtYzNlYmRhZDM3ZmQ5",
"displayName": "XSOAR User 1",
"id": "XXXX",
"imageUrl": "https://dev.azure.com/xsoar-organization/_api/_common/identityImage?id=XXXX",
"uniqueName": "user2@xsoar.com",
"url": "https://vssps.visualstudio.com/XXXX/_apis/Identities/XXXX"
},
"name": "refs/heads/main",
"objectId": "2eca089fab76f1f32051d188653ea7d279b90a4b",
"project": "xsoar",
"repository": "xsoar",
"url": "https://dev.azure.com/xsoar-organization/xsoar-project/_apis/git/repositories/XXXX/refs?filter=heads%2Fmain"
}
}
}
Human Readable Output
Branches List
Current page size: 1
Showing page 1 out others that may exist.
Name refs/heads/main
azure-devops-pull-request-reviewer-list
Retrieve the reviewers for a pull request.
Base Command
azure-devops-pull-request-reviewer-list
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| pull_request_id | ID of the pull request. By using the azure-devops-pull-request-list command, you can obtain the ID. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.PullRequestReviewer.reviewerUrl | String | URL to retrieve information about this identity. |
| AzureDevOps.PullRequestReviewer.vote | Number | Vote on a pull request, 10 - approved, 5 - approved with suggestions, 0 - no vote, -5 - waiting for author, -10 - rejected. |
| AzureDevOps.PullRequestReviewer.hasDeclined | Boolean | Whether the pull request has been declined. |
| AzureDevOps.PullRequestReviewer.isRequired | Boolean | Indicates if this is a required reviewer for this pull request. Branches can have policies that require particular reviewers are required for pull requests. |
| AzureDevOps.PullRequestReviewer.isFlagged | Boolean | A way to mark some special Pull Requests we are dealing with to distinguish them from other Pull Requests. |
| AzureDevOps.PullRequestReviewer.displayName | String | This is the non-unique display name of the graph subject. To change this field, you must alter its value in the source provider. |
| AzureDevOps.PullRequestReviewer.url | String | REST URL for this resource. |
| AzureDevOps.PullRequestReviewer._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.PullRequestReviewer.id | String | Pull-request reviewers IDs. |
| AzureDevOps.PullRequestReviewer.uniqueName | String | The reviewers user name. |
| AzureDevOps.PullRequestReviewer.imageUrl | String | Link to the reviewers user image. |
azure-devops-pull-request-reviewer-add
Add a reviewer to a pull request.
Base Command
azure-devops-pull-request-reviewer-add
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| reviewer_user_id | ID of the reviewer. By using the azure-devops-user-list command, you can obtain the user ID. | Required |
| is_required | Indicates if this is a required reviewer for this pull request. Branches can have policies that require particular reviewers are required for pull requests. Possible values are: True, False. | Optional |
| pull_request_id | ID of the pull request. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.PullRequestReviewer.reviewerUrl | String | URL to retrieve information about this identity. |
| AzureDevOps.PullRequestReviewer.vote | Number | Vote on a pull request, 10 - approved, 5 - approved with suggestions, 0 - no vote, -5 - waiting for author, -10 - rejected. |
| AzureDevOps.PullRequestReviewer.hasDeclined | Boolean | Whether the pull request has been declined. |
| AzureDevOps.PullRequestReviewer.isFlagged | Boolean | A way to mark some special Pull Requests we are dealing with to distinguish them from other Pull Requests. |
| AzureDevOps.PullRequestReviewer._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.PullRequestReviewer.id | String | Pull-request reviewers IDs. |
| AzureDevOps.PullRequestReviewer.displayName | String | This is the non-unique display name of the graph subject. To change this field, you must alter its value in the source provider. |
| AzureDevOps.PullRequestReviewer.uniqueName | String | The reviewers user name. |
| AzureDevOps.PullRequestReviewer.url | String | REST URL for this resource. |
| AzureDevOps.PullRequestReviewer.imageUrl | String | Link to the reviewers user image. |
azure-devops-pull-request-commit-list
Get the commits for the specified pull request.
Base Command
azure-devops-pull-request-commit-list
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| pull_request_id | ID of the pull request. By using the azure-devops-pull-request-list command, you can obtain the ID. | Required |
| limit | The number of results to retrieve. Minimum value is 1. Default is 50. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.Commit.commitId | String | ID (SHA-1) of the commit. |
| AzureDevOps.Commit.author.name | String | Name of the commit author. |
| AzureDevOps.Commit.author.email | String | Email address of the commit author. |
| AzureDevOps.Commit.author.date | Date | Date of the commit operation. |
| AzureDevOps.Commit.committer.name | String | Name of the commit committer. |
| AzureDevOps.Commit.committer.email | String | Email address of the commit committer. |
| AzureDevOps.Commit.committer.date | Date | Date of the commit operation. |
| AzureDevOps.Commit.comment | String | Comment or message of the commit. |
| AzureDevOps.Commit.url | String | REST URL for this resource. |
azure-devops-commit-list
Retrieve git commits for a project.
Base Command
azure-devops-commit-list
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| limit | The number of results to retrieve. Minimum value is 1. Default is 50. | Optional |
| page | The page number of the results to retrieve. Minimum value is 1. Default is 1. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.Commit.commitId | String | ID (SHA-1) of the commit. |
| AzureDevOps.Commit.author.name | String | Name of the commit author. |
| AzureDevOps.Commit.author.email | String | Email address of the commit author. |
| AzureDevOps.Commit.author.date | Date | Date of the commit operation. |
| AzureDevOps.Commit.committer.name | String | Name of the commit committer. |
| AzureDevOps.Commit.committer.email | String | Email address of the commit committer. |
| AzureDevOps.Commit.committer.date | Date | Date of the commit operation. |
| AzureDevOps.Commit.comment | String | Comment or message of the commit. |
| AzureDevOps.Commit.changeCounts | Number | Counts of the types of changes (edits, deletes, etc.) included with the commit. |
| AzureDevOps.Commit.url | String | REST URL for this resource. |
| AzureDevOps.Commit.remoteUrl | String | Remote URL path to the commit. |
azure-devops-commit-get
Retrieve a particular commit.
Base Command
azure-devops-commit-get
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| commit_id | The id of the commit. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.Commit.treeId | String | Tree ID of the commit. |
| AzureDevOps.Commit.commitId | String | ID (SHA-1) of the commit. |
| AzureDevOps.Commit.author.name | String | Name of the commit author. |
| AzureDevOps.Commit.author.email | String | Email address of the commit author. |
| AzureDevOps.Commit.author.date | Date | Date of the commit operation. |
| AzureDevOps.Commit.author.imageUrl | String | Link to the author user image. |
| AzureDevOps.Commit.committer.name | String | Name of the commit committer. |
| AzureDevOps.Commit.committer.email | String | Email address of the commit committer. |
| AzureDevOps.Commit.committer.date | Date | Date of the commit operation. |
| AzureDevOps.Commit.committer.imageUrl | String | Link to the committer user image. |
| AzureDevOps.Commit.comment | String | Comment or message of the commit. |
| AzureDevOps.Commit.parents | String | An enumeration of the parent commit IDs for this commit. |
| AzureDevOps.Commit.url | String | REST URL for this resource. |
| AzureDevOps.Commit.remoteUrl | String | Remote URL path to the commit. |
| AzureDevOps.Commit._links.self.href | String | A collection of related REST reference links. |
| AzureDevOps.Commit._links.repository.href | String | Link to the repository where the commit is. |
| AzureDevOps.Commit._links.web.href | String | Link to the commit. |
| AzureDevOps.Commit._links.changes.href | String | Link to the commit changes. |
| AzureDevOps.Commit.push.pushedBy.displayName | String | Display name of the user who pushed the commit. |
| AzureDevOps.Commit.push.pushedBy.url | String | Identity Reference. |
| AzureDevOps.Commit.push.pushedBy._links.avatar.href | String | Url for the user’s avatar. |
| AzureDevOps.Commit.push.pushedBy.id | String | ID of the user who pushed the commit. |
| AzureDevOps.Commit.push.pushedBy.uniqueName | String | Domain and principal name. |
| AzureDevOps.Commit.push.pushedBy.imageUrl | String | Identity Image. |
| AzureDevOps.Commit.push.pushedBy.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.Commit.push.pushId | Number | Unique ID of the push operation. |
| AzureDevOps.Commit.push.date | Date | Date of the push operation. |
azure-devops-work-item-get
Returns a single work item.
Base Command
azure-devops-work-item-get
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| item_id | The work item id. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.WorkItem.id | Number | The work item ID. |
| AzureDevOps.WorkItem.rev | Number | Revision number of the work item. |
| AzureDevOps.WorkItem.fields.System.AreaPath | String | The work item AreaPath. Area paths allow you to group work items by team, product, or feature area. |
| AzureDevOps.WorkItem.fields.System.TeamProject | String | The work item TeamProject. A group of project members focused on specific products, services, or feature areas. |
| AzureDevOps.WorkItem.fields.System.IterationPath | String | The work item IterationPath. Iteration paths allow you to group work into sprints, milestones, or other event-specific or time-related period. |
| AzureDevOps.WorkItem.fields.System.WorkItemType | String | The work item type. Epic, Feature, User Story and Task/Bug. |
| AzureDevOps.WorkItem.fields.System.State | String | Workflow states define how a work item progresses from its creation to closure. The four main states that are defined for the User Story describe a user story’s progression. The workflow states are New, Active, Resolved, and Closed. |
| AzureDevOps.WorkItem.fields.System.Reason | String | This field requires a state to determine what values are allowed. |
| AzureDevOps.WorkItem.fields.System.AssignedTo.displayName | String | Display name of user assigned to the work item. |
| AzureDevOps.WorkItem.fields.System.AssignedTo.url | String | The work item url. |
| AzureDevOps.WorkItem.fields.System.AssignedTo._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.WorkItem.fields.System.AssignedTo.id | String | ID of user assigned to the work item. |
| AzureDevOps.WorkItem.fields.System.AssignedTo.uniqueName | String | The unique name of user assigned to the work item. |
| AzureDevOps.WorkItem.fields.System.AssignedTo.imageUrl | String | Link to the user (assigned to the work item) image. |
| AzureDevOps.WorkItem.fields.System.AssignedTo.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.WorkItem.fields.System.CreatedDate | Date | The run creation date, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.displayName | String | Display name of user created the work item. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.url | String | The work item url. |
| AzureDevOps.WorkItem.fields.System.CreatedBy._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.id | String | ID of user created the work item. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.uniqueName | String | The unique name of user created the work item. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.imageUrl | String | Link to the user (created the work item) image. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.WorkItem.fields.System.ChangedDate | Date | The run changing date, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.displayName | String | Display name of user changed the work item. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.url | String | The work item url. |
| AzureDevOps.WorkItem.fields.System.ChangedBy._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.id | String | ID of user changed the work item. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.uniqueName | String | The unique name of user changed the work item. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.imageUrl | String | Link to the user (changed the work item) image. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.WorkItem.fields.System.CommentCount | Number | Count of the work item comments. |
| AzureDevOps.WorkItem.fields.System.Title | String | The work item title. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.StateChangeDate | Date | The state changing date, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedDate | Date | The activated date, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedBy.displayName | String | Display name of user activated the work item. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedBy.url | String | The work item url. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedBy._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedBy.id | String | ID of user activated the work item. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedBy.uniqueName | String | The unique name of user activated the work item. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedBy.imageUrl | String | Link to the user (activated the work item) image. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedBy.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.Priority | Number | This field specifies which work the team should do first. |
| AzureDevOps.WorkItem.fields.System.Description | String | The work item description. |
| AzureDevOps.WorkItem.fields.System.Tags | String | Tags related to the work item. |
| AzureDevOps.WorkItem._links.self.href | String | A collection of related REST reference links. |
| AzureDevOps.WorkItem._links.workItemUpdates.href | String | Link to the work item updates. |
| AzureDevOps.WorkItem._links.workItemRevisions.href | String | Link to the work item revisions. |
| AzureDevOps.WorkItem._links.workItemComments.href | String | Link to the work item comments. |
| AzureDevOps.WorkItem._links.html.href | String | Link to the work item html. |
| AzureDevOps.WorkItem._links.workItemType.href | String | Link to the work item type. |
| AzureDevOps.WorkItem._links.fields.href | String | Link to the work item fields. |
| AzureDevOps.WorkItem.url | String | Link to the work item. |
azure-devops-work-item-create
Creates a single work item.
Base Command
azure-devops-work-item-create
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| type | The work item type of the work item to create. Possible values are: Task, Epic, Issue. | Required |
| title | The work item title of the work item to create. | Required |
| iteration_path | The path for the operation. | Optional |
| description | Describes the work item. | Optional |
| priority | Specifies which work the team should do first. Possible values are: 1, 2, 3, 4. | Optional |
| tag | Tag related to the work item. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.WorkItem.id | Number | The work item ID. |
| AzureDevOps.WorkItem.rev | Number | Revision number of the work item. |
| AzureDevOps.WorkItem.fields.System.AreaPath | String | The work item AreaPath. Area paths allow you to group work items by team, product, or feature area. |
| AzureDevOps.WorkItem.fields.System.TeamProject | String | The work item TeamProject. A group of project members focused on specific products, services, or feature areas. |
| AzureDevOps.WorkItem.fields.System.IterationPath | String | The work item IterationPath. Iteration paths allow you to group work into sprints, milestones, or other event-specific or time-related period. |
| AzureDevOps.WorkItem.fields.System.WorkItemType | String | The work item type. Epic, Feature, User Story and Task/Bug. |
| AzureDevOps.WorkItem.fields.System.State | String | Workflow states define how a work item progresses from its creation to closure. The four main states that are defined for the User Story describe a user story’s progression. The workflow states are New, Active, Resolved, and Closed. |
| AzureDevOps.WorkItem.fields.System.Reason | String | This field requires a state to determine what values are allowed. |
| AzureDevOps.WorkItem.fields.System.CreatedDate | Date | The run creation date, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.displayName | String | Display name of user created the work item. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.url | String | The work item url. |
| AzureDevOps.WorkItem.fields.System.CreatedBy._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.id | String | ID of user created the work item. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.uniqueName | String | The unique name of user created the work item. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.imageUrl | String | Link to the user (created the work item) image. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.WorkItem.fields.System.ChangedDate | Date | The run changing date, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.displayName | String | Display name of user changed the work item. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.url | String | The work item url. |
| AzureDevOps.WorkItem.fields.System.ChangedBy._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.id | String | ID of user changed the work item. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.uniqueName | String | The unique name of user changed the work item. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.imageUrl | String | Link to the user (changed the work item) image. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.WorkItem.fields.System.CommentCount | Number | Count of the work item comments. |
| AzureDevOps.WorkItem.fields.System.Title | String | The work item title. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.StateChangeDate | Date | The state changing date, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.Priority | Number | This field specifies which work the team should do first. |
| AzureDevOps.WorkItem.fields.System.Description | String | The work item description. |
| AzureDevOps.WorkItem.fields.System.Tags | String | Tags related to the work item. |
| AzureDevOps.WorkItem._links.self.href | String | A collection of related REST reference links. |
| AzureDevOps.WorkItem._links.workItemUpdates.href | String | Link to the work item updates. |
| AzureDevOps.WorkItem._links.workItemRevisions.href | String | Link to the work item revisions. |
| AzureDevOps.WorkItem._links.workItemComments.href | String | Link to the work item comments. |
| AzureDevOps.WorkItem._links.html.href | String | Link to the work item html. |
| AzureDevOps.WorkItem._links.workItemType.href | String | Link to the work item type. |
| AzureDevOps.WorkItem._links.fields.href | String | Link to the work item fields. |
| AzureDevOps.WorkItem.url | String | Link to the work item. |
azure-devops-work-item-update
Updates a single work item.
Base Command
azure-devops-work-item-update
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| item_id | The work item id to update. | Required |
| title | A new title for the work item. | Optional |
| assignee_display_name | Display name of user assigned to the work item. This argument can be obtained by running the ‘azure-devops-user-list’ command. | Optional |
| state | A new state for the work item. Possible values are: To Do, Doing, Done. | Optional |
| iteration_path | a new path for the operation. | Optional |
| description | A new description for the work item. | Optional |
| priority | A new priority for the work item. Possible values are: 1, 2, 3, 4. | Optional |
| tag | A new priority for the work item. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.WorkItem.id | Number | The work item ID. |
| AzureDevOps.WorkItem.rev | Number | Revision number of the work item. |
| AzureDevOps.WorkItem.fields.System.AreaPath | String | The work item AreaPath. Area paths allow you to group work items by team, product, or feature area. |
| AzureDevOps.WorkItem.fields.System.TeamProject | String | The work item TeamProject. A group of project members focused on specific products, services, or feature areas. |
| AzureDevOps.WorkItem.fields.System.IterationPath | String | The work item IterationPath. Iteration paths allow you to group work into sprints, milestones, or other event-specific or time-related period. |
| AzureDevOps.WorkItem.fields.System.WorkItemType | String | The work item type. Epic, Feature, User Story and Task/Bug. |
| AzureDevOps.WorkItem.fields.System.State | String | Workflow states define how a work item progresses from its creation to closure. The four main states that are defined for the User Story describe a user story’s progression. The workflow states are New, Active, Resolved, and Closed. |
| AzureDevOps.WorkItem.fields.System.Reason | String | This field requires a state to determine what values are allowed. |
| AzureDevOps.WorkItem.fields.System.AssignedTo.displayName | String | Display name of user assigned to the work item. |
| AzureDevOps.WorkItem.fields.System.AssignedTo.url | String | The work item url. |
| AzureDevOps.WorkItem.fields.System.AssignedTo._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.WorkItem.fields.System.AssignedTo.id | String | ID of user assigned to the work item. |
| AzureDevOps.WorkItem.fields.System.AssignedTo.uniqueName | String | The unique name of user assigned to the work item. |
| AzureDevOps.WorkItem.fields.System.AssignedTo.imageUrl | String | Link to the user (assigned to the work item) image. |
| AzureDevOps.WorkItem.fields.System.AssignedTo.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.WorkItem.fields.System.CreatedDate | Date | The run creation date, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.displayName | String | Display name of user created the work item. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.url | String | The work item url. |
| AzureDevOps.WorkItem.fields.System.CreatedBy._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.id | String | ID of user created the work item. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.uniqueName | String | The unique name of user created the work item. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.imageUrl | String | Link to the user (created the work item) image. |
| AzureDevOps.WorkItem.fields.System.CreatedBy.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.WorkItem.fields.System.ChangedDate | Date | The run changing date, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.displayName | String | Display name of user changed the work item. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.url | String | The work item url. |
| AzureDevOps.WorkItem.fields.System.ChangedBy._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.id | String | ID of user changed the work item. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.uniqueName | String | The unique name of user changed the work item. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.imageUrl | String | Link to the user (changed the work item) image. |
| AzureDevOps.WorkItem.fields.System.ChangedBy.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.WorkItem.fields.System.CommentCount | Number | Count of the work item comments. |
| AzureDevOps.WorkItem.fields.System.Title | String | The work item title. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.StateChangeDate | Date | The state changing date, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedDate | Date | The activated date, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedBy.displayName | String | Display name of user activated the work item. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedBy.url | String | The work item url. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedBy._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedBy.id | String | ID of user activated the work item. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedBy.uniqueName | String | The unique name of user activated the work item. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedBy.imageUrl | String | Link to the user (activated the work item) image. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.ActivatedBy.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.WorkItem.fields.Microsoft.VSTS.Common.Priority | Number | This field specifies which work the team should do first. |
| AzureDevOps.WorkItem.fields.System.Description | String | The work item description. |
| AzureDevOps.WorkItem.fields.System.Tags | String | Tags related to the work item. |
| AzureDevOps.WorkItem._links.self.href | String | A collection of related REST reference links. |
| AzureDevOps.WorkItem._links.workItemUpdates.href | String | Link to the work item updates. |
| AzureDevOps.WorkItem._links.workItemRevisions.href | String | Link to the work item revisions. |
| AzureDevOps.WorkItem._links.workItemComments.href | String | Link to the work item comments. |
| AzureDevOps.WorkItem._links.html.href | String | Link to the work item html. |
| AzureDevOps.WorkItem._links.workItemType.href | String | Link to the work item type. |
| AzureDevOps.WorkItem._links.fields.href | String | Link to the work item fields. |
| AzureDevOps.WorkItem.url | String | Link to the work item. |
azure-devops-file-create
Add a file to the repository.
Base Command
azure-devops-file-create
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| branch_name | The branch name. This argument can be obtained by running the ‘azure-devops-branch-list’ command. | Required |
| branch_id | The branch ID. This argument can be obtained by running the ‘azure-devops-branch-list’ command. | Required |
| commit_comment | Comment or message of the commit. | Required |
| file_path | The file path. | Optional |
| file_content | The file content. | Optional |
| entry_id | There is an option to the user to provide an entry_id. In that case we will take the file_content and the file_path from the given id. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.File.commits.treeId | String | Tree ID of the commit. |
| AzureDevOps.File.commits.commitId | String | ID (SHA-1) of the commit. |
| AzureDevOps.File.commits.author.name | String | Name of the commit author. |
| AzureDevOps.File.commits.author.email | String | Email address of the commit author. |
| AzureDevOps.File.commits.author.date | Date | Date of the commit operation. |
| AzureDevOps.File.commits.committer.name | String | Name of the commit committer. |
| AzureDevOps.File.commits.committer.email | String | Email address of the commit committer. |
| AzureDevOps.File.commits.committer.date | Date | Date of the commit operation. |
| AzureDevOps.File.commits.comment | String | Comment or message of the commit. |
| AzureDevOps.File.commits.parents | String | An enumeration of the parent commit IDs for this commit. |
| AzureDevOps.File.commits.url | String | REST URL for this resource. |
| AzureDevOps.File.refUpdates.repositoryId | String | The ID of the repository. |
| AzureDevOps.File.refUpdates.name | String | The branch name. |
| AzureDevOps.File.refUpdates.oldObjectId | String | The last commit ID. |
| AzureDevOps.File.refUpdates.newObjectId | String | The new commit ID. |
| AzureDevOps.File.repository.id | String | The ID of the repository. |
| AzureDevOps.File.repository.name | String | The name of the repository. |
| AzureDevOps.File.repository.url | String | The URL of the repository. |
| AzureDevOps.File.repository.project.id | String | The ID of the Project. |
| AzureDevOps.File.repository.project.name | String | The name of the project. |
| AzureDevOps.File.repository.project.description | String | The description of the project. |
| AzureDevOps.File.repository.project.url | String | The URL of the project. |
| AzureDevOps.File.repository.project.state | String | The state of the project. |
| AzureDevOps.File.repository.project.revision | Number | The revision number of the project. |
| AzureDevOps.File.repository.project.visibility | String | Indicates whom the project is visible to. |
| AzureDevOps.File.repository.project.lastUpdateTime | Date | The project last update time, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.File.repository.size | Number | The size of the repository (in bytes). |
| AzureDevOps.File.repository.remoteUrl | String | Remote URL path to the repository. |
| AzureDevOps.File.repository.sshUrl | String | The ssh URL of the repository. |
| AzureDevOps.File.repository.webUrl | String | The web URL of the repository. |
| AzureDevOps.File.repository.isDisabled | Boolean | If the repository is disabled or not. |
| AzureDevOps.File.repository.isInMaintenance | Boolean | If the repository is in maintenance or not. |
| AzureDevOps.File.pushedBy.displayName | String | Display name of the user who pushed the commit / file. |
| AzureDevOps.File.pushedBy.url | String | Identity Reference. |
| AzureDevOps.File.pushedBy._links.avatar.href | String | Url for the user’s avatar. |
| AzureDevOps.File.pushedBy.id | String | ID of the user who pushed the commit / file. |
| AzureDevOps.File.pushedBy.uniqueName | String | Domain and principal name. |
| AzureDevOps.File.pushedBy.imageUrl | String | Identity Image. |
| AzureDevOps.File.pushedBy.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.File.pushId | Number | Unique ID of the push operation. |
| AzureDevOps.File.date | Date | Date of the operation. |
| AzureDevOps.File.url | String | Link to the commit. |
| AzureDevOps.File._links.self.href | String | A collection of related REST reference links. |
| AzureDevOps.File._links.repository.href | String | Link to the repository where the commit is. |
| AzureDevOps.File._links.commits.href | String | Link to the commits. |
| AzureDevOps.File._links.pusher.href | String | Link to the commit pusher. |
| AzureDevOps.File._links.refs.href | String | Link to the branch. |
azure-devops-file-update
Update a file in the repository.
Base Command
azure-devops-file-update
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| branch_name | The branch name. This argument can be obtained by running the ‘azure-devops-branch-list’ command. | Required |
| branch_id | The branch ID. This argument can be obtained by running the ‘azure-devops-branch-list’ command. | Required |
| commit_comment | Comment or message of the commit. | Required |
| file_path | The file path. | Optional |
| file_content | The file content. | Optional |
| entry_id | There is an option to the user to provide an entry_id. In that case we will take the file_content and the file_path from the given id. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.File.commits.treeId | String | Tree ID of the commit. |
| AzureDevOps.File.commits.commitId | String | ID (SHA-1) of the commit. |
| AzureDevOps.File.commits.author.name | String | Name of the commit author. |
| AzureDevOps.File.commits.author.email | String | Email address of the commit author. |
| AzureDevOps.File.commits.author.date | Date | Date of the commit operation. |
| AzureDevOps.File.commits.committer.name | String | Name of the commit committer. |
| AzureDevOps.File.commits.committer.email | String | Email address of the commit committer. |
| AzureDevOps.File.commits.committer.date | Date | Date of the commit operation. |
| AzureDevOps.File.commits.comment | String | Comment or message of the commit. |
| AzureDevOps.File.commits.parents | String | An enumeration of the parent commit IDs for this commit. |
| AzureDevOps.File.commits.url | String | REST URL for this resource. |
| AzureDevOps.File.refUpdates.repositoryId | String | The ID of the repository. |
| AzureDevOps.File.refUpdates.name | String | The branch name. |
| AzureDevOps.File.refUpdates.oldObjectId | String | The last commit ID. |
| AzureDevOps.File.refUpdates.newObjectId | String | The new commit ID. |
| AzureDevOps.File.repository.id | String | The ID of the repository. |
| AzureDevOps.File.repository.name | String | The name of the repository. |
| AzureDevOps.File.repository.url | String | The URL of the repository. |
| AzureDevOps.File.repository.project.id | String | The ID of the Project. |
| AzureDevOps.File.repository.project.name | String | The name of the project. |
| AzureDevOps.File.repository.project.description | String | The description of the project. |
| AzureDevOps.File.repository.project.url | String | The URL of the project. |
| AzureDevOps.File.repository.project.state | String | The state of the project. |
| AzureDevOps.File.repository.project.revision | Number | The revision number of the project. |
| AzureDevOps.File.repository.project.visibility | String | Indicates whom the project is visible to. |
| AzureDevOps.File.repository.project.lastUpdateTime | Date | The project last update time, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.File.repository.size | Number | The size of the repository (in bytes). |
| AzureDevOps.File.repository.remoteUrl | String | Remote URL path to the repository. |
| AzureDevOps.File.repository.sshUrl | String | The ssh URL of the repository. |
| AzureDevOps.File.repository.webUrl | String | The web URL of the repository. |
| AzureDevOps.File.repository.isDisabled | Boolean | If the repository is disabled or not. |
| AzureDevOps.File.repository.isInMaintenance | Boolean | If the repository is in maintenance or not. |
| AzureDevOps.File.pushedBy.displayName | String | Display name of the user who pushed the commit / file. |
| AzureDevOps.File.pushedBy.url | String | Identity Reference. |
| AzureDevOps.File.pushedBy._links.avatar.href | String | Url for the user’s avatar. |
| AzureDevOps.File.pushedBy.id | String | ID of the user who pushed the commit / file. |
| AzureDevOps.File.pushedBy.uniqueName | String | Domain and principal name. |
| AzureDevOps.File.pushedBy.imageUrl | String | Identity Image. |
| AzureDevOps.File.pushedBy.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.File.pushId | Number | Unique ID of the push operation. |
| AzureDevOps.File.date | Date | Date of the operation. |
| AzureDevOps.File.url | String | Link to the commit. |
| AzureDevOps.File._links.self.href | String | A collection of related REST reference links. |
| AzureDevOps.File._links.repository.href | String | Link to the repository where the commit is. |
| AzureDevOps.File._links.commits.href | String | Link to the commits. |
| AzureDevOps.File._links.pusher.href | String | Link to the commit pusher. |
| AzureDevOps.File._links.refs.href | String | Link to the branch. |
azure-devops-file-delete
Update a file in the repository.
Base Command
azure-devops-file-delete
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| branch_name | The branch name. This argument can be obtained by running the ‘azure-devops-branch-list’ command. | Required |
| branch_id | The branch ID. This argument can be obtained by running the ‘azure-devops-branch-list’ command. | Required |
| commit_comment | Comment or message of the commit. | Required |
| file_path | The file path. | Optional |
| entry_id | There is an option to the user to provide an entry_id. In that case we will take the file_content and the file_path from the given id. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.File.commits.treeId | String | Tree ID of the commit. |
| AzureDevOps.File.commits.commitId | String | ID (SHA-1) of the commit. |
| AzureDevOps.File.commits.author.name | String | Name of the commit author. |
| AzureDevOps.File.commits.author.email | String | Email address of the commit author. |
| AzureDevOps.File.commits.author.date | Date | Date of the commit operation. |
| AzureDevOps.File.commits.committer.name | String | Name of the commit committer. |
| AzureDevOps.File.commits.committer.email | String | Email address of the commit committer. |
| AzureDevOps.File.commits.committer.date | Date | Date of the commit operation. |
| AzureDevOps.File.commits.comment | String | Comment or message of the commit. |
| AzureDevOps.File.commits.parents | String | An enumeration of the parent commit IDs for this commit. |
| AzureDevOps.File.commits.url | String | REST URL for this resource. |
| AzureDevOps.File.refUpdates.repositoryId | String | The ID of the repository. |
| AzureDevOps.File.refUpdates.name | String | The branch name. |
| AzureDevOps.File.refUpdates.oldObjectId | String | The last commit ID. |
| AzureDevOps.File.refUpdates.newObjectId | String | The new commit ID. |
| AzureDevOps.File.repository.id | String | The ID of the repository. |
| AzureDevOps.File.repository.name | String | The name of the repository. |
| AzureDevOps.File.repository.url | String | The URL of the repository. |
| AzureDevOps.File.repository.project.id | String | The ID of the Project. |
| AzureDevOps.File.repository.project.name | String | The name of the project. |
| AzureDevOps.File.repository.project.description | String | The description of the project. |
| AzureDevOps.File.repository.project.url | String | The URL of the project. |
| AzureDevOps.File.repository.project.state | String | The state of the project. |
| AzureDevOps.File.repository.project.revision | Number | The revision number of the project. |
| AzureDevOps.File.repository.project.visibility | String | Indicates whom the project is visible to. |
| AzureDevOps.File.repository.project.lastUpdateTime | Date | The project last update time, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.File.repository.size | Number | The size of the repository (in bytes). |
| AzureDevOps.File.repository.remoteUrl | String | Remote URL path to the repository. |
| AzureDevOps.File.repository.sshUrl | String | The ssh URL of the repository. |
| AzureDevOps.File.repository.webUrl | String | The web URL of the repository. |
| AzureDevOps.File.repository.isDisabled | Boolean | If the repository is disabled or not. |
| AzureDevOps.File.repository.isInMaintenance | Boolean | If the repository is in maintenance or not. |
| AzureDevOps.File.pushedBy.displayName | String | Display name of the user who pushed the commit / file. |
| AzureDevOps.File.pushedBy.url | String | Identity Reference. |
| AzureDevOps.File.pushedBy._links.avatar.href | String | Url for the user’s avatar. |
| AzureDevOps.File.pushedBy.id | String | ID of the user who pushed the commit / file. |
| AzureDevOps.File.pushedBy.uniqueName | String | Domain and principal name. |
| AzureDevOps.File.pushedBy.imageUrl | String | Identity Image. |
| AzureDevOps.File.pushedBy.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.File.pushId | Number | Unique ID of the push operation. |
| AzureDevOps.File.date | Date | Date of the operation. |
| AzureDevOps.File.url | String | Link to the commit. |
| AzureDevOps.File._links.self.href | String | A collection of related REST reference links. |
| AzureDevOps.File._links.repository.href | String | Link to the repository where the commit is. |
| AzureDevOps.File._links.commits.href | String | Link to the commits. |
| AzureDevOps.File._links.pusher.href | String | Link to the commit pusher. |
| AzureDevOps.File._links.refs.href | String | Link to the branch. |
azure-devops-file-list
Retrieve repository files (items) list.
Base Command
azure-devops-file-list
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| branch_name | The branch name. This argument can be obtained by running the ‘azure-devops-branch-list’ command. | Required |
| recursion_level | The recursion level of this request. The default is None, no recursion. Possible values are: None, OneLevel, Full. Default is None. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.File.objectId | String | The file object ID. |
| AzureDevOps.File.gitObjectType | String | The file git object type. |
| AzureDevOps.File.commitId | String | ID (SHA-1) of the file commit. |
| AzureDevOps.File.path | String | The file’s path. |
| AzureDevOps.File.isFolder | Boolean | If the item is folder or not. |
| AzureDevOps.File.contentMetadata.fileName | String | The file name. |
| AzureDevOps.File.url | String | URL link to the item. |
azure-devops-file-get
Getting the content file.
Base Command
azure-devops-file-get
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| branch_name | The branch name. This argument can be obtained by running the ‘azure-devops-branch-list’ command. | Required |
| file_name | The file name. | Required |
| format | The file format (json or zip). Default is json. Possible values are: json, zip. Default is json. | Optional |
| include_content | Include item content. Default is True. Possible values are: True, False. Default is True. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.File.objectId | String | The file object ID. |
| AzureDevOps.File.gitObjectType | String | The file git object type. |
| AzureDevOps.File.commitId | String | ID (SHA-1) of the file commit. |
| AzureDevOps.File.path | String | The file’s path. |
| AzureDevOps.File.content | String | The file content. |
azure-devops-branch-create
Create a branch.
Base Command
azure-devops-branch-create
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| branch_name | The branch name. This argument can be obtained by running the ‘azure-devops-branch-list’ command. | Required |
| commit_comment | Comment or message of the commit. | Required |
| file_path | The file path. | Optional |
| file_content | The file content. | Optional |
| entry_id | There is an option to the user to provide an entry_id. In that case we will take the file_content and the file_path from the given id. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.Branch.commits.treeId | String | Tree ID of the commit. |
| AzureDevOps.Branch.commits.commitId | String | ID (SHA-1) of the commit. |
| AzureDevOps.Branch.commits.author.name | String | Name of the commit author. |
| AzureDevOps.Branch.commits.author.email | String | Email address of the commit author. |
| AzureDevOps.Branch.commits.author.date | Date | Date of the commit operation. |
| AzureDevOps.Branch.commits.committer.name | String | Name of the commit committer. |
| AzureDevOps.Branch.commits.committer.email | String | Email address of the commit committer. |
| AzureDevOps.Branch.commits.committer.date | Date | Date of the commit operation. |
| AzureDevOps.Branch.commits.comment | String | Comment or message of the commit. |
| AzureDevOps.Branch.commits.parents | Unknown | An enumeration of the parent commit IDs for this commit. |
| AzureDevOps.Branch.commits.url | String | REST URL for this resource. |
| AzureDevOps.Branch.refUpdates.repositoryId | String | The ID of the repository. |
| AzureDevOps.Branch.refUpdates.name | String | The branch name. |
| AzureDevOps.Branch.refUpdates.oldObjectId | String | The last commit ID. |
| AzureDevOps.Branch.refUpdates.newObjectId | String | The new commit ID. |
| AzureDevOps.Branch.repository.id | String | The ID of the repository. |
| AzureDevOps.Branch.repository.name | String | The name of the repository. |
| AzureDevOps.Branch.repository.url | String | The URL of the repository. |
| AzureDevOps.Branch.repository.project.id | String | The ID of the Project. |
| AzureDevOps.Branch.repository.project.name | String | The name of the project. |
| AzureDevOps.Branch.repository.project.description | String | The description of the project. |
| AzureDevOps.Branch.repository.project.url | String | The URL of the project. |
| AzureDevOps.Branch.repository.project.state | String | The state of the project. |
| AzureDevOps.Branch.repository.project.revision | Number | The revision number of the project. |
| AzureDevOps.Branch.repository.project.visibility | String | Indicates whom the project is visible to. |
| AzureDevOps.Branch.repository.project.lastUpdateTime | Date | The project last update time, using ISO 8601 format in UTC time. For example, midnight UTC on Jan 1, 2022 would be: “2022-01-01T00:00:00Z”. |
| AzureDevOps.Branch.repository.size | Number | The size of the repository (in bytes). |
| AzureDevOps.Branch.repository.remoteUrl | String | Remote URL path to the repository. |
| AzureDevOps.Branch.repository.sshUrl | String | The ssh URL of the repository. |
| AzureDevOps.Branch.repository.webUrl | String | The web URL of the repository. |
| AzureDevOps.Branch.repository.isDisabled | Boolean | If the repository is disabled or not. |
| AzureDevOps.Branch.repository.isInMaintenance | Boolean | If the repository is in maintenance or not. |
| AzureDevOps.Branch.pushedBy.displayName | String | Display name of the user who pushed the commit / file. |
| AzureDevOps.Branch.pushedBy.url | String | Identity Reference. |
| AzureDevOps.Branch.pushedBy._links.avatar.href | String | Url for the user’s avatar. |
| AzureDevOps.Branch.pushedBy.id | String | ID of the user who pushed the commit / file. |
| AzureDevOps.Branch.pushedBy.uniqueName | String | Domain and principal name. |
| AzureDevOps.Branch.pushedBy.imageUrl | String | Identity Image. |
| AzureDevOps.Branch.pushedBy.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.Branch.pushId | Number | Unique ID of the push operation. |
| AzureDevOps.Branch.date | Date | Date of the operation. |
| AzureDevOps.Branch.url | String | Link to the commit. |
| AzureDevOps.Branch._links.self.href | String | A collection of related REST reference links. |
| AzureDevOps.Branch._links.repository.href | String | Link to the repository where the commit is. |
| AzureDevOps.Branch._links.commits.href | String | Link to the commits. |
| AzureDevOps.Branch._links.pusher.href | String | Link to the commit pusher. |
| AzureDevOps.Branch._links.refs.href | String | Link to the branch. |
azure-devops-pull-request-thread-create
Create a thread in a pull request.
Base Command
azure-devops-pull-request-thread-create
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| pull_request_id | The ID of the pull request to update. | Required |
| comment_text | The comment content. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.PullRequestThread.pullRequestThreadContext | Unknown | Extended context information unique to pull requests. |
| AzureDevOps.PullRequestThread.id | Number | The ID of the pull request. |
| AzureDevOps.PullRequestThread.publishedDate | Date | The date the thread was published. |
| AzureDevOps.PullRequestThread.lastUpdatedDate | Date | Last update date. |
| AzureDevOps.PullRequestThread.comments.id | Number | The ID of the comments. |
| AzureDevOps.PullRequestThread.comments.parentCommentId | Number | An enumeration of the parent commit IDs for this commit. |
| AzureDevOps.PullRequestThread.comments.author.displayName | String | The display name of the comments creator. |
| AzureDevOps.PullRequestThread.comments.author.url | String | URL to retrieve information about this identity. |
| AzureDevOps.PullRequestThread.comments.author._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.PullRequestThread.comments.author.id | String | The ID of the thread author. |
| AzureDevOps.PullRequestThread.comments.author.uniqueName | String | The unique name of the thread author. |
| AzureDevOps.PullRequestThread.comments.author.imageUrl | String | Link to the thread author user image. |
| AzureDevOps.PullRequestThread.comments.author.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.PullRequestThread.comments.content | String | The comments content. |
| AzureDevOps.PullRequestThread.comments.publishedDate | Date | The date the comments were published. |
| AzureDevOps.PullRequestThread.comments.lastUpdatedDate | Date | Last update date. |
| AzureDevOps.PullRequestThread.comments.lastContentUpdatedDate | Date | The date the comment’s content was last updated. |
| AzureDevOps.PullRequestThread.comments.commentType | String | The comment type at the time of creation. |
| AzureDevOps.PullRequestThread.comments._links.self.href | String | A collection of related REST reference links. |
| AzureDevOps.PullRequestThread.comments._links.repository.href | String | Link to the repository where the comments are. |
| AzureDevOps.PullRequestThread.comments._links.threads.href | String | Link to the threads. |
| AzureDevOps.PullRequestThread.comments._links.pullRequests.href | String | Link to the pull request. |
| AzureDevOps.PullRequestThread.status | String | The status of the pull request thread. |
| AzureDevOps.PullRequestThread.threadContext | Unknown | Extended context information unique to pull requests. |
| AzureDevOps.PullRequestThread.properties | Unknown | Properties associated with the thread as a collection of key-value pairs. |
| AzureDevOps.PullRequestThread.identities | Unknown | Set of identities related to this thread. |
| AzureDevOps.PullRequestThread.isDeleted | Boolean | Specify if the thread is deleted which happens when all comments are deleted. |
| AzureDevOps.PullRequestThread._links.self.href | String | Link to the thread. |
| AzureDevOps.PullRequestThread._links.repository.href | String | Link to the repository. |
azure-devops-pull-request-thread-update
Update a thread in a pull request.
Base Command
azure-devops-pull-request-thread-update
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| pull_request_id | The ID of the pull request to update. | Required |
| thread_id | The ID of the thread to update. | Required |
| comment_text | The comment content. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.PullRequestThread.pullRequestThreadContext | Unknown | Extended context information unique to pull requests. |
| AzureDevOps.PullRequestThread.id | Number | The ID of the pull request. |
| AzureDevOps.PullRequestThread.publishedDate | Date | The date the thread was published. |
| AzureDevOps.PullRequestThread.lastUpdatedDate | Date | Last update date. |
| AzureDevOps.PullRequestThread.comments.id | Number | The ID of the comments. |
| AzureDevOps.PullRequestThread.comments.parentCommentId | Number | An enumeration of the parent commit IDs for this commit. |
| AzureDevOps.PullRequestThread.comments.author.displayName | String | The display name of the comments creator. |
| AzureDevOps.PullRequestThread.comments.author.url | String | URL to retrieve information about this identity. |
| AzureDevOps.PullRequestThread.comments.author._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.PullRequestThread.comments.author.id | String | The ID of the thread author. |
| AzureDevOps.PullRequestThread.comments.author.uniqueName | String | The unique name of the thread author. |
| AzureDevOps.PullRequestThread.comments.author.imageUrl | String | Link to the thread author user image. |
| AzureDevOps.PullRequestThread.comments.author.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.PullRequestThread.comments.content | String | The comments content. |
| AzureDevOps.PullRequestThread.comments.publishedDate | Date | The date the comments were published. |
| AzureDevOps.PullRequestThread.comments.lastUpdatedDate | Date | Last update date. |
| AzureDevOps.PullRequestThread.comments.lastContentUpdatedDate | Date | The date the comment’s content was last updated. |
| AzureDevOps.PullRequestThread.comments.commentType | String | The comment type at the time of creation. |
| AzureDevOps.PullRequestThread.comments._links.self.href | String | A collection of related REST reference links. |
| AzureDevOps.PullRequestThread.comments._links.repository.href | String | Link to the repository where the comments are. |
| AzureDevOps.PullRequestThread.comments._links.threads.href | String | Link to the threads. |
| AzureDevOps.PullRequestThread.comments._links.pullRequests.href | String | Link to the pull request. |
| AzureDevOps.PullRequestThread.status | String | The status of the pull request thread. |
| AzureDevOps.PullRequestThread.threadContext | Unknown | Extended context information unique to pull requests. |
| AzureDevOps.PullRequestThread.properties | Unknown | Properties associated with the thread as a collection of key-value pairs. |
| AzureDevOps.PullRequestThread.identities | Unknown | Set of identities related to this thread. |
| AzureDevOps.PullRequestThread.isDeleted | Boolean | Specify if the thread is deleted which happens when all comments are deleted. |
| AzureDevOps.PullRequestThread._links.self.href | String | Link to the thread. |
| AzureDevOps.PullRequestThread._links.repository.href | String | Link to the repository. |
azure-devops-pull-request-thread-list
Retrieve all threads in a pull request.
Base Command
azure-devops-pull-request-thread-list
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| pull_request_id | The ID of the pull request to update. | Required |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.PullRequestThread.pullRequestThreadContext | Unknown | Extended context information unique to pull requests. |
| AzureDevOps.PullRequestThread.id | Number | The ID of the pull request. |
| AzureDevOps.PullRequestThread.publishedDate | Date | The date the thread was published. |
| AzureDevOps.PullRequestThread.lastUpdatedDate | Date | Last update date. |
| AzureDevOps.PullRequestThread.comments.id | Number | The ID of the comments. |
| AzureDevOps.PullRequestThread.comments.parentCommentId | Number | An enumeration of the parent commit IDs for this commit. |
| AzureDevOps.PullRequestThread.comments.author.displayName | String | The display name of the comments creator. |
| AzureDevOps.PullRequestThread.comments.author.url | String | URL to retrieve information about this identity. |
| AzureDevOps.PullRequestThread.comments.author._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.PullRequestThread.comments.author.id | String | The ID of the thread author. |
| AzureDevOps.PullRequestThread.comments.author.uniqueName | String | The unique name of the thread author. |
| AzureDevOps.PullRequestThread.comments.author.imageUrl | String | Link to the thread author user image. |
| AzureDevOps.PullRequestThread.comments.author.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.PullRequestThread.comments.content | String | The comments content. |
| AzureDevOps.PullRequestThread.comments.publishedDate | Date | The date the comments were published. |
| AzureDevOps.PullRequestThread.comments.lastUpdatedDate | Date | Last update date. |
| AzureDevOps.PullRequestThread.comments.lastContentUpdatedDate | Date | The date the comment’s content was last updated. |
| AzureDevOps.PullRequestThread.comments.commentType | String | The comment type at the time of creation. |
| AzureDevOps.PullRequestThread.comments.usersLiked | Unknown | A list of the users who have liked this comment. |
| AzureDevOps.PullRequestThread.comments._links.self.href | String | A collection of related REST reference links. |
| AzureDevOps.PullRequestThread.comments._links.repository.href | String | Link to the repository where the comments are. |
| AzureDevOps.PullRequestThread.comments._links.threads.href | String | Link to the threads. |
| AzureDevOps.PullRequestThread.comments._links.pullRequests.href | String | Link to the pull request. |
| AzureDevOps.PullRequestThread.threadContext | Unknown | Extended context information unique to pull requests. |
| AzureDevOps.PullRequestThread.properties.CodeReviewThreadType.$type | String | The type of the code review thread. |
| AzureDevOps.PullRequestThread.properties.CodeReviewThreadType.$value | String | The content in the code review thread. |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedNumAdded.$type | String | A number (Int32). |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedNumAdded.$value | Number | Number of code reviewers updated the pull request. |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedNumChanged.$type | String | A number (Int32). |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedNumChanged.$value | Number | Number of code reviewers changed the pull request. |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedNumDeclined.$type | String | A number (Int32). |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedNumDeclined.$value | Number | Number of code reviewers declined the pull request. |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedNumRemoved.$type | String | A number (Int32). |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedNumRemoved.$value | Number | Number of code reviewers are removed. |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedAddedIdentity.$type | String | A number (Int32). |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedAddedIdentity.$value | String | Number of code reviewers added identity. |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedByIdentity.$type | String | A number (Int32). |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedByIdentity.$value | String | Number of code reviewers updated by identity. |
| AzureDevOps.PullRequestThread.identities.1.displayName | String | The display name of the pull request thread creator. |
| AzureDevOps.PullRequestThread.identities.1.url | String | Link to the the pull request thread creator. |
| AzureDevOps.PullRequestThread.identities.1._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.PullRequestThread.identities.1.id | String | The ID of the pull request thread creator. |
| AzureDevOps.PullRequestThread.identities.1.uniqueName | String | The user name of the pull request thread creator. |
| AzureDevOps.PullRequestThread.identities.1.imageUrl | String | Link to the pull request thread creator user image. |
| AzureDevOps.PullRequestThread.identities.1.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
| AzureDevOps.PullRequestThread.isDeleted | Boolean | Specify if the thread is deleted which happens when all comments are deleted. |
| AzureDevOps.PullRequestThread._links.self.href | String | Link to the thread. |
| AzureDevOps.PullRequestThread._links.repository.href | String | Link to the repository. |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedChangedToRequired.$type | String | A number (Int32). |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedChangedToRequired.$value | String | Number of code reviewers were changed to required. |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedChangedIdentity.$type | String | A number (Int32). |
| AzureDevOps.PullRequestThread.properties.CodeReviewReviewersUpdatedChangedIdentity.$value | String | Number of code reviewers changed the identity. |
| AzureDevOps.PullRequestThread.status | String | The status of the comment thread. |
| AzureDevOps.PullRequestThread.properties | Unknown | Properties associated with the thread as a collection of key-value pairs. |
| AzureDevOps.PullRequestThread.identities | Unknown | Set of identities related to this thread. |
| AzureDevOps.PullRequestThread.properties.Microsoft.TeamFoundation.Discussion.SupportsMarkdown.$type | String | A number (Int32). |
| AzureDevOps.PullRequestThread.properties.Microsoft.TeamFoundation.Discussion.SupportsMarkdown.$value | Number | Supports markdown number. |
| AzureDevOps.PullRequestThread.properties.Microsoft.TeamFoundation.Discussion.UniqueID.$type | String | A number (Int32). |
| AzureDevOps.PullRequestThread.properties.Microsoft.TeamFoundation.Discussion.UniqueID.$value | String | The unique ID of the Team Foundation. |
azure-devops-project-team-list
Get a list of teams.
Base Command
azure-devops-project-team-list
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.Team.id | String | Team (Identity) Guid. A Team Foundation ID. |
| AzureDevOps.Team.name | String | Team name. |
| AzureDevOps.Team.url | String | Team REST API Url. |
| AzureDevOps.Team.description | String | Team description. |
| AzureDevOps.Team.identityUrl | String | Identity REST API Url to this team. |
| AzureDevOps.Team.projectName | String | The project name. |
| AzureDevOps.Team.projectId | String | The project ID. |
azure-devops-team-member-list
Get a list of members for a specific team.
Base Command
azure-devops-team-member-list
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| team_id | The name or ID (GUID) of the team . | Required |
| page | The page number of the results to retrieve. Minimum value is 1. Default is 1. | Optional |
| limit | The number of results to retrieve. Minimum value is 1. Default is 50. | Optional |
Context Output
| Path | Type | Description |
|---|---|---|
| AzureDevOps.TeamMember.isTeamAdmin | Boolean | if the member is the team admin. |
| AzureDevOps.TeamMember.identity.displayName | String | The display name of the team member. |
| AzureDevOps.TeamMember.identity.url | String | URL to retrieve information about this member. |
| AzureDevOps.TeamMember.identity._links.avatar.href | String | This field contains zero or more interesting links about the graph subject. These links may be invoked to obtain additional relationships or more detailed information about this graph subject. |
| AzureDevOps.TeamMember.identity.id | String | ID of the team member. |
| AzureDevOps.TeamMember.identity.uniqueName | String | The unique name of team member. |
| AzureDevOps.TeamMember.identity.imageUrl | String | Link to the team member image. |
| AzureDevOps.TeamMember.identity.descriptor | String | The descriptor is the primary way to reference the graph subject while the system is running. This field will uniquely identify the same graph subject across both Accounts and Organizations. |
azure-devops-blob-zip-get
Get a single blob.
Base Command
azure-devops-blob-zip-get
Input
| Argument Name | Description | Required |
|---|---|---|
| organization_name | The name of the Azure DevOps organization. Default value will be config param, user can supply a different value. | Optional |
| project_name | Project ID or project name. Default value will be config param, user can supply a different value. | Optional |
| repository_id | The repository ID. Default value will be config param, user can supply a different value. | Optional |
| file_object_id | The ID of the blob object. This ID can be obtained by running the ‘azure-devops-file-list’ command. | Required |
Context Output
There is no context output for this command.
Incident Mirroring
You can enable incident mirroring between Cortex XSOAR incidents and AzureDevOps corresponding events (available from Cortex XSOAR version 6.0.0).
To set up the mirroring:
- Enable Fetching incidents in your instance configuration.
Newly fetched incidents will be mirrored in the chosen direction. However, this selection does not affect existing incidents.
Important Note: To ensure the mirroring works as expected, mappers are required, both for incoming and outgoing, to map the expected fields in Cortex XSOAR and AzureDevOps.
Configuration parameters
client_id— Client ID (required)organization— Organization (required)max_fetch— Maximum incidents for one fetch.project— Default Project Namerepository— Default Repository NameincidentType— Incident typeincidentFetchInterval— Incidents Fetch IntervalisFetch— Fetch incidentsfirst_fetch— First fetch timestamp (<number> <time unit>, e.g., 12 hours, 7 days)is_mirroring— Outgoing mirroringproxy— Use system proxy settingsinsecure— Trust any certificate (not secure)auth_type— Authentication Type (required)tenant_id— Tenant IDcredentials— Client Secretredirect_uri— Application redirect URIauth_code— Authorization code
Commands (40)
-
azure-devops-auth-completeRun this command to complete the authorization process. Should be used after running the azure-devops-auth-start command.
-
azure-devops-auth-resetRun this command if for some reason you need to rerun the authentication process.
-
azure-devops-auth-startRun this command to start the authorization process and follow the instructions in the command results.
-
azure-devops-auth-testTests the connectivity to Azure.
-
azure-devops-blob-zip-getGet a single blob.
-
azure-devops-branch-createCreate a branch.
-
azure-devops-branch-listRetrieve repository branches list.
-
azure-devops-commit-getRetrieve a particular commit.
-
azure-devops-commit-listRetrieve Git commits for a project.
-
azure-devops-file-createAdd a file to the repository.
-
azure-devops-file-deleteUpdate a file in the repository.
-
azure-devops-file-getGetting the content file.
-
azure-devops-file-listRetrieve repository files (items) list.
-
azure-devops-file-updateUpdate a file in the repository.
-
azure-devops-generate-login-urlGenerate the login url used for Authorization code flow.
-
azure-devops-pipeline-listRetrieve project pipelines list.
-
azure-devops-pipeline-runRun a pipeline. A DevOps pipeline is a set of automated processes and tools that allows both developers and operations professionals to work cohesively to build and deploy code to a production environment.
-
azure-devops-pipeline-run-getRetrieve information for a pipeline run.
-
azure-devops-pipeline-run-listRetrieve pipeline runs list. The command retrieves up to the top 10000 runs for a particular pipeline.
-
azure-devops-project-listRetrieve all projects in the organization that the authenticated user has access to.
-
azure-devops-project-team-listGet a list of teams.
-
azure-devops-pull-request-commit-listGet the commits for the specified pull request.
-
azure-devops-pull-request-createCreate a new pull request.
-
azure-devops-pull-request-getRetrieve pull-request.
-
azure-devops-pull-request-listRetrieve pull requests in repository.
-
azure-devops-pull-request-reviewer-addAdd a reviewer to a pull request.
-
azure-devops-pull-request-reviewer-listRetrieve the reviewers for a pull request.
-
azure-devops-pull-request-thread-createCreate a thread in a pull request.
-
azure-devops-pull-request-thread-listRetrieve all threads in a pull request.
-
azure-devops-pull-request-thread-updateUpdate a thread in a pull request.
-
azure-devops-pull-request-updateUpdate a pull request. At least one of the following arguments must be provided: title, description, or status.
-
azure-devops-repository-listRetrieve git repositories in the organization project.
-
azure-devops-team-member-listGet a list of members for a specific team.
-
azure-devops-user-addAdd a user, assign the user a license and extensions, and make the user a member of a project group in an account.
-
azure-devops-user-listQuery users that were added to organization projects.
-
azure-devops-user-removeRemove the user from all project memberships.
-
azure-devops-work-item-createCreates a single work item.
-
azure-devops-work-item-getReturns a single work item.
-
azure-devops-work-item-updateUpdates a single work item.
-
get-mapping-fieldsGet mapping fields from remote incident. Please note that this method will not update the current incident. It's here for debugging purposes.
import pytest from CommonServerPython import * ORGANIZATION = "XSOAR" BASE_URL = f"https://dev.azure.com/{ORGANIZATION}" CLIENT_ID = "XXXX" def load_mock_response(file_name: str) -> str: """ Load mock file that simulates an API response. Args: file_name (str): Name of the mock response JSON file to return. Returns: str: Mock file content. """ with open(f"test_data/{file_name}", encoding="utf-8") as mock_file: return mock_file.read() def get_azure_access_token_mock(): return { "access_token": "my-access-token", "expires_in": 3595, "refresh_token": "my-refresh-token", } def test_azure_devops_pipeline_run_command(requests_mock): """ Scenario: run-pipeline. Given: - User has provided valid credentials. When: - azure-devops-pipeline-run called. Then: - Ensure number of items is correct. - Ensure outputs prefix is correct. - Ensure a sample value from the API matches what is generated in the context. """ from AzureDevOps import Client, pipeline_run_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) project = "test" pipeline_id = "1" url = f"{BASE_URL}/{project}/_apis/pipelines/{pipeline_id}/runs" mock_response = json.loads(load_mock_response("run_pipeline.json")) requests_mock.post(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = pipeline_run_command(client, {"project": project, "pipeline_id": pipeline_id, "branch_name": "my-branch"}) assert len(result.outputs) == 10 assert result.outputs_prefix == "AzureDevOps.PipelineRun" assert result.outputs.get("project") == project assert result.outputs.get("pipeline").get("name") == "xsoar" assert result.outputs.get("pipeline").get("id") == "1" assert result.outputs.get("run_id") == "12" def test_azure_devops_user_add_command(requests_mock): """ Scenario: Add user to organization. Given: - User has provided valid credentials. When: - azure-devops-user-add called. Then: - Ensure number of items is correct. - Ensure outputs prefix is correct. - Ensure a sample value from the API matches what is generated in the context. - Validate API operation result error handling. """ from AzureDevOps import Client, user_add_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) user_email = "test@xsoar.com" account_license_type = "express" group_type = "projectReader" project_id = "123" url = f"https://vsaex.dev.azure.com/{ORGANIZATION}/_apis/UserEntitlements" mock_response = json.loads(load_mock_response("add_user.json")) requests_mock.post(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = user_add_command( client, { "user_email": user_email, "account_license_type": account_license_type, "group_type": group_type, "project_id": project_id, }, ) assert len(result.outputs) == 8 assert result.outputs_prefix == "AzureDevOps.User" assert result.outputs.get("id") == "XXX" assert dict_safe_get(result.outputs, ["accessLevel", "accountLicenseType"]) == "express" assert result.outputs.get("lastAccessedDate") == "0001-01-01T00:00:00Z" # Error case mock_response = json.loads(load_mock_response("add_user_error.json")) requests_mock.post(url, json=mock_response) with pytest.raises(Exception): user_add_command( client, { "user_email": user_email, "account_license_type": account_license_type, "group_type": group_type, "project_id": project_id, }, ) def test_azure_devops_user_remove_command(requests_mock): """ Scenario: Remove the user from all project memberships. Given: - User has provided valid credentials. When: - azure-devops-user-remove called. Then: - Ensure that the output is empty (None). - Ensure readable output message content. """ from AzureDevOps import Client, user_remove_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) user_id = "1" url = f"https://vsaex.dev.azure.com/{ORGANIZATION}/_apis/userentitlements/{user_id}" requests_mock.delete(url) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = user_remove_command(client, {"user_id": user_id}) assert result.outputs is None assert result.outputs_prefix is None assert result.readable_output == f"User {user_id} was successfully removed from the organization." def test_azure_devops_pull_request_create_command(requests_mock): """ Scenario: Create a new pull-request.. Given: - User has provided valid credentials. When: - azure-devops-pull-request-create called. Then: - Ensure number of items is correct. - Ensure outputs prefix is correct. - Ensure a sample value from the API matches what is generated in the context. """ from AzureDevOps import Client, pull_request_create_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) project = "test" repository_id = "1" url = f"{BASE_URL}/{project}/_apis/git/repositories/{repository_id}/pullrequests" mock_response = json.loads(load_mock_response("pull_request.json")) requests_mock.post(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = pull_request_create_command( client, { "project": project, "repository_id": repository_id, "source_branch": "my-branch", "target_branch": "main", "title": "test-title", "description": "test-description", "reviewers_ids": "2", }, project=project, repository=repository_id, ) assert len(result.outputs) == 21 assert result.outputs_prefix == "AzureDevOps.PullRequest" assert result.outputs.get("repository").get("name") == "xsoar" def test_azure_devops_pull_request_get_command(requests_mock): """ Scenario: Retrieve pull-request information. Given: - User has provided valid credentials. When: - azure-devops-pull-request-get called. Then: - Ensure number of items is correct. - Ensure outputs prefix is correct. - Ensure a sample value from the API matches what is generated in the context. """ from AzureDevOps import Client, pull_request_get_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) project = "test" repository_id = "1" pull_request_id = "2" url = f"{BASE_URL}/{project}/_apis/git/repositories/{repository_id}/pullrequests/{pull_request_id}" mock_response = json.loads(load_mock_response("pull_request.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = pull_request_get_command( client, {"project": project, "repository_id": repository_id, "pull_request_id": pull_request_id} ) assert len(result.outputs) == 21 assert result.outputs_prefix == "AzureDevOps.PullRequest" assert result.outputs.get("repository").get("name") == "xsoar" def test_azure_devops_pull_request_update_command(requests_mock): """ Scenario: Update a pull request. Given: - User has provided valid credentials. When: - azure-devops-pull-request-update called. Then: - Ensure number of items is correct. - Ensure outputs prefix is correct. - Ensure a sample value from the API matches what is generated in the context. - Ensure command validates that is at least one update parameter exists. """ from AzureDevOps import Client, pull_request_update_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) project = "test" repository_id = "1" pull_request_id = "2" url = f"{BASE_URL}/{project}/_apis/git/repositories/{repository_id}/pullrequests/{pull_request_id}" mock_response = json.loads(load_mock_response("pull_request.json")) requests_mock.patch(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = pull_request_update_command( client, {"project": project, "repository_id": repository_id, "pull_request_id": pull_request_id, "title": "new-title"}, project=project, repository=repository_id, ) assert len(result.outputs) == 21 assert result.outputs_prefix == "AzureDevOps.PullRequest" assert result.outputs.get("repository").get("name") == "xsoar" with pytest.raises(Exception): pull_request_update_command( client, {"project": project, "repository_id": repository_id, "pull_request_id": pull_request_id} ) def test_azure_devops_pull_request_list_command(requests_mock): """ Scenario: Retrieve pull requests in repository. Given: - User has provided valid credentials. When: - azure-devops-pull-request-list called. Then: - Ensure number of items is correct. - Ensure outputs prefix is correct. - Ensure a sample value from the API matches what is generated in the context. - Ensure the command validates the 'limit' parameter value. The parameter value should be equals or greater than 1. """ from AzureDevOps import Client, pull_requests_list_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) project = "test" repository = "xsoar" url = f"{BASE_URL}/{project}/_apis/git/repositories/{repository}/pullrequests/" mock_response = json.loads(load_mock_response("list_pull_request.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = pull_requests_list_command( client, {"project": project, "repository": repository}, project=project, repository=repository ) assert len(result.outputs) == 2 assert result.outputs_prefix == "AzureDevOps.PullRequest" assert dict_safe_get(result.outputs[0], ["repository", "name"]) == "xsoar" with pytest.raises(Exception): pull_requests_list_command(client, {"project": project, "repository": repository, "limit": "-1"}) def test_azure_devops_project_list_command(requests_mock): """ Scenario: Retrieve all projects in the organization that the authenticated user has access to. Given: - User has provided valid credentials. When: - azure-devops-project-list called. Then: - Ensure number of items is correct. - Ensure outputs prefix is correct. - Ensure a sample value from the API matches what is generated in the context. - Ensure the command validates the 'limit' parameter value. The parameter value should be equals or greater than 1. """ from AzureDevOps import Client, project_list_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) url = f"{BASE_URL}/_apis/projects" mock_response = json.loads(load_mock_response("list_project.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = project_list_command(client, {}) assert len(result.outputs) == 1 assert result.outputs_prefix == "AzureDevOps.Project" assert result.outputs[0].get("name") == "xsoar" assert result.outputs[0].get("visibility") == "private" with pytest.raises(Exception): project_list_command(client, {"limit": "-1"}) def test_azure_devops_repository_list_command(requests_mock): """ Scenario: Retrieve git repositories in the organization project. Given: - User has provided valid credentials. When: - azure-devops-repository-list called. Then: - Ensure number of items is correct. - Ensure outputs prefix is correct. - Ensure a sample value from the API matches what is generated in the context. - Ensure the command validates the 'limit' parameter value. The parameter value should be equals or greater than 1. """ from AzureDevOps import Client, repository_list_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) project = "xsoar" url = f"{BASE_URL}/{project}/_apis/git/repositories" mock_response = json.loads(load_mock_response("list_repositories.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = repository_list_command(client, {"project": project}) assert len(result.outputs) == 2 assert result.outputs_prefix == "AzureDevOps.Repository" assert result.outputs[0].get("name") == "xsoar" with pytest.raises(Exception): repository_list_command(client, {"project": project, "limit": "-1"}) def test_azure_devops_users_query_command(requests_mock): """ Scenario: Query users in the organization. Given: - User has provided valid credentials. When: - azure-devops-user-query called. Then: - Ensure number of items is correct. - Ensure outputs prefix is correct. - Ensure a sample value from the API matches what is generated in the context. - Ensure the command validates the 'limit' parameter value. The parameter value should be equals or greater than 1. """ from AzureDevOps import Client, users_query_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) query = "xsoar" url = f"{BASE_URL}/_apis/IdentityPicker/Identities" mock_response = json.loads(load_mock_response("query_user.json")) requests_mock.post(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = users_query_command(client, {"query": query}) assert len(result.outputs) == 1 assert result.outputs_prefix == "AzureDevOps.User" assert result.outputs[0].get("signInAddress") == "xsoar@xsoar.com" with pytest.raises(Exception): users_query_command(client, {"query": query, "limit": "-1"}) def test_azure_devops_pipeline_run_get_command(requests_mock): """ Scenario: Retrieve pipeline run information. Given: - User has provided valid credentials. When: - azure-devops-pipeline-run-get called. Then: - Ensure number of items is correct. - Ensure outputs prefix is correct. - Ensure a sample value from the API matches what is generated in the context. """ from AzureDevOps import Client, pipeline_run_get_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) project = "xsoar" pipeline_id = "1" run_id = "2" url = f"{BASE_URL}/{project}/_apis/pipelines/{pipeline_id}/runs/{run_id}" mock_response = json.loads(load_mock_response("get_pipeline_run.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = pipeline_run_get_command(client, {"project": project, "pipeline_id": pipeline_id, "run_id": run_id}) assert len(result.outputs) == 11 assert result.outputs_prefix == "AzureDevOps.PipelineRun" assert result.outputs.get("project") == project assert result.outputs.get("pipeline").get("name") == "xsoar" assert result.outputs.get("pipeline").get("id") == "1" assert result.outputs.get("run_id") == "3" def test_azure_devops_pipeline_run_list_command(requests_mock): """ Scenario: Retrieve project pipeline runs list. Given: - User has provided valid credentials. When: - azure-devops-pipeline-run-list called. Then: - Ensure number of items is correct. - Ensure outputs prefix is correct. - Ensure a sample value from the API matches what is generated in the context. - Ensure the command validates the 'limit' parameter value. The parameter value should be equals or greater than 1. """ from AzureDevOps import Client, pipeline_run_list_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) project = "xsoar" pipeline_id = "1" url = f"{BASE_URL}/{project}/_apis/pipelines/{pipeline_id}/runs" mock_response = json.loads(load_mock_response("pipeline_run_list.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = pipeline_run_list_command(client, {"project": project, "pipeline_id": pipeline_id}) assert len(result.outputs) == 2 assert result.outputs_prefix == "AzureDevOps.PipelineRun" assert result.outputs[0].get("project") == project assert result.outputs[0].get("pipeline").get("name") == "xsoar" assert result.outputs[0].get("pipeline").get("id") == "1" assert result.outputs[0].get("run_id") == "42" assert result.outputs[0].get("state") == "completed" with pytest.raises(Exception): pipeline_run_list_command(client, {"project": project, "pipeline_id": pipeline_id, "limit": "-1"}) def test_azure_devops_pipeline_list_command(requests_mock): """ Scenario: Retrieve project pipelines list. Given: - User has provided valid credentials. When: - azure-devops-pipeline-list called. Then: - Ensure number of items is correct. - Ensure outputs prefix is correct. - Ensure a sample value from the API matches what is generated in the context. - Ensure the command validates the 'limit' parameter value. The parameter value should be equals or greater than 1. """ from AzureDevOps import Client, pipeline_list_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) project = "xsoar" url = f"{BASE_URL}/{project}/_apis/pipelines" mock_response = json.loads(load_mock_response("pipeline_list.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = pipeline_list_command(client, {"project": project}) assert len(result.outputs) == 2 assert result.outputs_prefix == "AzureDevOps.Pipeline" assert result.outputs[0].get("name") == "xsoar (1)" assert result.outputs[0].get("project") == project with pytest.raises(Exception): pipeline_list_command(client, {"project": project, "limit": "-1"}) def test_azure_devops_branch_list_command(requests_mock): """ Scenario: Retrieve repository branches list. Given: - User has provided valid credentials. When: - azure-devops-branch-list called. Then: - Ensure number of items is correct. - Ensure outputs prefix is correct. - Ensure a sample value from the API matches what is generated in the context. - Ensure the command validates the 'limit' parameter value. The parameter value should be equals or greater than 1. """ from AzureDevOps import Client, branch_list_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) project = "xsoar" repository = "test" url = f"{BASE_URL}/{project}/_apis/git/repositories/{repository}/refs" mock_response = json.loads(load_mock_response("branch_list.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = branch_list_command(client, {"project": project, "repository": repository}, None, None) assert len(result.outputs) == 2 assert result.outputs_prefix == "AzureDevOps.Branch" assert result.outputs[0].get("repository") == repository assert result.outputs[0].get("name") == "refs/heads/main" with pytest.raises(Exception): branch_list_command(client, {"project": project, "repository": repository, "limit": "-1"}) @pytest.mark.parametrize( "test_object", [ ({"id": 24, "result": 0}), ({"id": 22, "result": 1}), ({"id": 25, "result": -1}), ({"id": 21, "result": -1}), ], ) def test_get_last_fetch_incident_index(requests_mock, test_object): """ Scenario: Retrieve the index of the last fetched pull-request. Given: - User has provided valid credentials. - Case A: No new pull-requests - The last pull-request is already fetched and active. - Case B: One new pull-requests. - Case C: No new pull-requests - The last pull request is already fetched and no longer active. - Case D: There is new pull-requests - The last pull request is not yet fetched, and the last-fetched pull-request is no longer active. When: - fetch-incidents called. Then: - Ensure the return value is correct. """ from AzureDevOps import Client, get_last_fetch_incident_index authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) project = "test" repository = "xsoar" url = f"{BASE_URL}/{project}/_apis/git/repositories/{repository}/pullrequests/" mock_response = json.loads(load_mock_response("list_pull_request.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") assert get_last_fetch_incident_index(project, repository, client, test_object["id"]) == test_object["result"] def test_get_closest_index(requests_mock): """ Scenario: Retrieve the closest index to the last fetched pull-request ID. Given: - User has provided valid credentials. When: - fetch-incidents called. Then: - Ensure the return value is correct. """ from AzureDevOps import Client, get_closest_index authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) project = "test" repository = "xsoar" url = f"{BASE_URL}/{project}/_apis/git/repositories/{repository}/pullrequests/" mock_response = json.loads(load_mock_response("list_pull_request.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") assert get_closest_index(project, repository, client, 23) == 0 def test_is_new_pr(requests_mock): """ Validate if there is new pull-request in the repository. Given: - User has provided valid credentials. When: - fetch-incidents called. Then: - Ensure the return value is correct. """ from AzureDevOps import Client, is_new_pr authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) project = "test" repository = "xsoar" url = f"{BASE_URL}/{project}/_apis/git/repositories/{repository}/pullrequests/" mock_response = json.loads(load_mock_response("list_pull_request.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") assert is_new_pr(project, repository, client, 23) assert is_new_pr(project, repository, client, 22) assert not is_new_pr(project, repository, client, 24) assert not is_new_pr(project, repository, client, 25) def test_get_mapping_fields_command(): """ Given: - User has provided valid credentials. When - running get_mapping_fields_command Then - the result fits the expected mapping. """ from AzureDevOps import get_mapping_fields_command expected_mapping = { "Azure DevOps": { "status": "The status of the pull request.", "title": "The title of the pull request.", "description": "The description of the pull request.", "project": "The name of the project.", "repository_id": "The repository ID of the pull request target branch.", "pull_request_id": "the ID of the pull request", } } res = get_mapping_fields_command() assert expected_mapping == res.extract_mapping() def test_generate_login_url(mocker): """ Given: - Self-deployed are true and auth code are the auth flow When: - Calling function azure-devops-generate-login-url Then: - Ensure the generated url are as expected. """ # prepare import AzureDevOps import demistomock as demisto from AzureDevOps import main redirect_uri = "redirect_uri" tenant_id = "tenant_id" client_id = "client_id" mocked_params = { "redirect_uri": redirect_uri, "organization": "test_organization", "self_deployed": "True", "tenant_id": tenant_id, "client_id": client_id, "auth_type": "Authorization Code", "credentials": {"identifier": client_id, "password": "client_secret"}, } mocker.patch.object(demisto, "params", return_value=mocked_params) mocker.patch.object(demisto, "command", return_value="azure-devops-generate-login-url") mocker.patch.object(AzureDevOps, "return_results") # call main() # assert expected_url = ( f"[login URL](https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/authorize?" "response_type=code" "&scope=offline_access%20499b84ac-1321-427f-aa17-267ca6975798/.default" f"&client_id={client_id}&redirect_uri={redirect_uri})" ) res = AzureDevOps.return_results.call_args[0][0].readable_output assert expected_url in res @pytest.mark.parametrize("pull_request_id, mock_response_path", [("40", "list_reviewers_pull_request.json")]) def test_azure_devops_pull_request_reviewer_list_command(requests_mock, pull_request_id: str, mock_response_path: str): """ Given: - pull_request_id When: - executing azure-devops-pull-request-reviewer-list command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, pull_request_reviewer_list_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) project = "test" repository = "xsoar" pull_request_id = pull_request_id url = ( f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/" f"pullRequests/{pull_request_id}/reviewers" ) mock_response = json.loads(load_mock_response(mock_response_path)) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = pull_request_reviewer_list_command(client, {"pull_request_id": pull_request_id}, ORGANIZATION, repository, project) assert result.outputs_prefix == "AzureDevOps.PullRequestReviewer" assert result.readable_output.startswith("### Reviewers List") assert result.outputs == mock_response["value"] @pytest.mark.parametrize("pull_request_id, mock_response_path", [("42", "pull_request_not_found.json")]) def test_azure_devops_pull_request_reviewer_list_command_pr_does_not_exist( requests_mock, pull_request_id: str, mock_response_path: str ): """ Given: - pull_request_id (pr does not exist) When: - executing azure-devops-pull-request-reviewer-list command Then: - Ensure outputs_prefix and readable_output are set up right - Ensure informative message when pull_request_id does not exist """ from AzureDevOps import Client, pull_request_reviewer_list_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) project = "test" repository = "xsoar" pull_request_id = pull_request_id url = ( f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/" f"pullRequests/{pull_request_id}/reviewers" ) mock_response = json.loads(load_mock_response(mock_response_path)) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = pull_request_reviewer_list_command(client, {"pull_request_id": pull_request_id}, ORGANIZATION, repository, project) assert "The requested pull request was not found." in result.raw_response.get("message") assert result.outputs == "" @pytest.mark.parametrize( "args, organization, expected_result", [ ({"organization_name": "OVERRIDE"}, "TEST", "OVERRIDE"), ({}, "TEST", "TEST"), ({"organization_name": "OVERRIDE"}, "", "OVERRIDE"), ], ) def test_organization_repository_project_preprocess(args: dict, organization: str, expected_result: str): """ Given: - organization as configuration parameter and as argument When: - executing organization_repository_project_preprocess function Then: - Ensure that the logic is correct 1. The argument should override the parameter if both exist 2. If there's only one, take it """ from AzureDevOps import organization_repository_project_preprocess project = "TEST" repository = "TEST" organization, repository_id, project = organization_repository_project_preprocess( args, organization, repository, project, is_organization_required=True, is_repository_id_required=True ) assert organization == expected_result @pytest.mark.parametrize("args, organization, expected_result", [({}, "", "ERROR")]) def test_organization_repository_project_preprocess_when_no_organization(args: dict, organization: str, expected_result: str): """ Given: - organization as configuration parameter and as argument When: - executing organization_repository_project_preprocess function Then: - Ensure raising an exception if organization does not exist and required """ from AzureDevOps import organization_repository_project_preprocess project = "TEST" repository = "TEST" with pytest.raises(Exception): organization_repository_project_preprocess( args, organization, repository, project, is_organization_required=True, is_repository_id_required=True ) @pytest.mark.parametrize("pull_request_id, mock_response_path", [("40", "pull_request_reviewer_create.json")]) def test_azure_devops_pull_request_reviewer_add_command(requests_mock, pull_request_id: str, mock_response_path: str): """ Given: - all arguments When: - executing azure-devops-pull-request-reviewer-create command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, pull_request_reviewer_add_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" reviewer_user_id = "testestest6565" url = ( f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/" f"pullRequests/{pull_request_id}/reviewers/{reviewer_user_id}" ) mock_response = json.loads(load_mock_response(mock_response_path)) requests_mock.put(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = pull_request_reviewer_add_command( client, {"pull_request_id": pull_request_id, "reviewer_user_id": reviewer_user_id}, ORGANIZATION, repository, project ) assert result.outputs_prefix == "AzureDevOps.PullRequestReviewer" assert result.readable_output == "TEST (TEST) was created successfully as a reviewer for Pull Request ID 40." assert result.outputs == mock_response @pytest.mark.parametrize("pull_request_id, mock_response_path", [("42", "pull_request_not_found.json")]) def test_azure_devops_pull_request_reviewer_add_command_pr_does_not_exist( requests_mock, pull_request_id: str, mock_response_path: str ): """ Given: - all arguments When: - executing azure-devops-pull-request-reviewer-create command Then: - Ensure informative message when pull_request_id does not exist """ from AzureDevOps import Client, pull_request_reviewer_add_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" reviewer_user_id = "testestest6565" url = ( f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/" f"pullRequests/{pull_request_id}/reviewers/{reviewer_user_id}" ) mock_response = json.loads(load_mock_response(mock_response_path)) requests_mock.put(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = pull_request_reviewer_add_command( client, {"pull_request_id": pull_request_id, "reviewer_user_id": reviewer_user_id}, ORGANIZATION, repository, project ) # PR does not exist assert "The requested pull request was not found." in result.outputs.get("message") assert result.outputs == { "$id": "1", "innerException": "", "message": "TF401180: The requested pull request was not found.", "typeName": "Microsoft.TeamFoundation.Git.Server.GitPullRequestNotFoundException, Microsoft.TeamFoundation.Git.Server", "typeKey": "GitPullRequestNotFoundException", "errorCode": 0, "eventId": 3000, "value": "", } @pytest.mark.parametrize("pull_request_id, mock_response_path", [("40", "pull_request_commit_list.json")]) def test_pull_request_commit_list_command(requests_mock, pull_request_id: str, mock_response_path: str): """ Given: - all arguments When: - executing azure-devops-pull-request-commit-list command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, pull_request_commit_list_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" url = ( f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/" f"pullRequests/{pull_request_id}/commits" ) mock_response = json.loads(load_mock_response(mock_response_path)) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = pull_request_commit_list_command( client, {"pull_request_id": pull_request_id, "limit": "1"}, ORGANIZATION, repository, project ) assert result.readable_output.startswith("### Commits") assert result.outputs_prefix == "AzureDevOps.Commit" assert result.outputs == mock_response["value"] @pytest.mark.parametrize("pull_request_id, mock_response_path", [("42", "pull_request_not_found.json")]) def test_pull_request_commit_list_command_pr_does_not_exist(requests_mock, pull_request_id: str, mock_response_path: str): """ Given: - all arguments When: - executing azure-devops-pull-request-commit-list command Then: - Ensure informative message when pull_request_id does not exist """ from AzureDevOps import Client, pull_request_commit_list_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" url = ( f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/" f"pullRequests/{pull_request_id}/commits" ) mock_response = json.loads(load_mock_response(mock_response_path)) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = pull_request_commit_list_command( client, {"pull_request_id": pull_request_id, "limit": "1"}, ORGANIZATION, repository, project ) # PR does not exist assert "The requested pull request was not found." in result.raw_response.get("message") assert result.outputs == "" @pytest.mark.parametrize( "args, expected_limit, expected_offset", [({}, 50, 0), ({"limit": "2"}, 2, 0), ({"page": "2"}, 50, 50), ({"limit": "2", "page": "2"}, 2, 2)], ) def test_pagination_preprocess_and_validation(args: dict, expected_limit: int, expected_offset: int): from AzureDevOps import pagination_preprocess_and_validation limit, offset = pagination_preprocess_and_validation(args) assert limit == expected_limit assert offset == expected_offset def test_commit_list_command(requests_mock): """ Given: - all arguments, limit = 1 When: - executing azure-devops-commit-list command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, commit_list_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" url = f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/commits" mock_response = json.loads(load_mock_response("commit_list.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = commit_list_command(client, {"limit": "1"}, ORGANIZATION, repository, project) assert result.readable_output.startswith("### Commits") assert result.outputs_prefix == "AzureDevOps.Commit" assert result.outputs == mock_response["value"] def test_commit_get_command(requests_mock): """ Given: - all arguments include commit_id (required) When: - executing azure-devops-commit-get command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, commit_get_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" commit_id = "xxxxxxxxxxxxx" url = f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/commits/{commit_id}" mock_response = json.loads(load_mock_response("commit_list.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = commit_get_command(client, {"commit_id": "xxxxxxxxxxxxx"}, ORGANIZATION, repository, project) assert result.readable_output.startswith("### Commit Details") assert result.outputs_prefix == "AzureDevOps.Commit" assert result.outputs == mock_response def test_work_item_get_command(requests_mock): """ Given: - all arguments include item_id (required) When: - executing azure-devops-work-item-get command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, work_item_get_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" item_id = "12" url = f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/wit/workitems/{item_id}" mock_response = json.loads(load_mock_response("work_item_get.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = work_item_get_command(client, {"item_id": "12"}, ORGANIZATION, repository, project) assert result.readable_output.startswith("### Work Item Details\n|Activity Date|Area Path|Assigned To|ID|State|Tags|Title|\n") assert result.outputs_prefix == "AzureDevOps.WorkItem" assert result.outputs == mock_response def test_work_item_create_command(requests_mock): """ Given: - type and title arguments (required) When: - executing azure-devops-work-item-create command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, work_item_create_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" work_item_type = "Epic" url = f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/wit/workitems/${work_item_type}" mock_response = json.loads(load_mock_response("work_item_create.json")) requests_mock.post(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = work_item_create_command(client, {"type": "Epic", "title": "Test"}, ORGANIZATION, repository, project) assert result.readable_output.startswith(f'Work Item {result.outputs.get("id")} was created successfully.') assert result.outputs_prefix == "AzureDevOps.WorkItem" assert result.outputs == mock_response def test_work_item_update_command(requests_mock): """ Given: - item_id (required) and title When: - executing azure-devops-work-item-update command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, work_item_update_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" item_id = "21" url = f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/wit/workitems/{item_id}" mock_response = json.loads(load_mock_response("work_item_update.json")) requests_mock.patch(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = work_item_update_command(client, {"item_id": "21", "title": "Test"}, ORGANIZATION, repository, project) assert result.readable_output.startswith("Work Item 21 was updated successfully.") assert result.outputs_prefix == "AzureDevOps.WorkItem" assert result.outputs == mock_response EXPECTED_RESULT = [ {"op": "add", "path": "/fields/System.Title", "from": None, "value": "zzz"}, {"op": "add", "path": "/fields/System.IterationPath", "from": None, "value": "test"}, {"op": "add", "path": "/fields/System.Description", "from": None, "value": "test"}, {"op": "add", "path": "/fields/Microsoft.VSTS.Common.Priority", "from": None, "value": "4"}, {"op": "add", "path": "/fields/System.Tags", "from": None, "value": "test"}, ] ARGUMENTS_LIST = ["title", "iteration_path", "description", "priority", "tag"] ARGS = {"title": "zzz", "iteration_path": "test", "description": "test", "priority": "4", "tag": "test"} @pytest.mark.parametrize("args, arguments_list, expected_result", [(ARGS, ARGUMENTS_LIST, EXPECTED_RESULT)]) def test_work_item_pre_process_data(args: dict, arguments_list: list[str], expected_result: dict): """ Ensure work_item_pre_process_data function generates the data (body) for the request as expected. """ from AzureDevOps import work_item_pre_process_data data = work_item_pre_process_data(args, arguments_list) assert data == expected_result def test_file_create_command(requests_mock): """ Given: - all required arguments When: - executing azure-devops-file-create command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, file_create_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" url_1 = f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/pushes" mock_response_1 = json.loads(load_mock_response("file.json")) requests_mock.post(url_1, json=mock_response_1) url_2 = f"{BASE_URL}/{project}/_apis/git/repositories/{repository}/refs" mock_response_2 = json.loads(load_mock_response("branch_list.json")) requests_mock.get(url_2, json=mock_response_2) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") args = { "branch_id": "111", "branch_name": "refs/heads/main", "commit_comment": "Test 5.", "file_content": "# Tasks\\n\\n* Item 1\\n* Item 2", "file_path": "/test_5.md", } result = file_create_command(client, args, ORGANIZATION, repository, project) assert result.readable_output.startswith( 'Commit "Test 5." was created and pushed successfully by "" to branch "refs/heads/main".' ) assert result.outputs_prefix == "AzureDevOps.File" assert result.outputs == mock_response_1 CREATE_FILE_CHANGE_TYPE = "add" CREATE_FILE_ARGS = { "branch_id": "111", "branch_name": "Test", "commit_comment": "Test 6", "file_content": "# Tasks\\n\\n* Item 1\\n* Item 2", "file_path": "/test_5.md", } CREATE_FILE_EXPECTED_RESULT = { "refUpdates": [{"name": "Test", "oldObjectId": "111"}], "commits": [ { "comment": "Test 6", "changes": [ { "changeType": "add", "item": {"path": "/test_5.md"}, "newContent": {"content": "# Tasks\\n\\n* Item 1\\n* Item 2", "contentType": "rawtext"}, } ], } ], } CREATE_FILE = (CREATE_FILE_CHANGE_TYPE, CREATE_FILE_ARGS, CREATE_FILE_EXPECTED_RESULT) UPDATE_FILE_CHANGE_TYPE = "edit" UPDATE_FILE_ARGS = { "branch_id": "111", "branch_name": "Test", "commit_comment": "Test 6", "file_content": "UPDATE", "file_path": "/test_5.md", } UPDATE_FILE_EXPECTED_RESULT = { "refUpdates": [{"name": "Test", "oldObjectId": "111"}], "commits": [ { "comment": "Test 6", "changes": [ { "changeType": "edit", "item": {"path": "/test_5.md"}, "newContent": {"content": "UPDATE", "contentType": "rawtext"}, } ], } ], } UPDATE_FILE = (UPDATE_FILE_CHANGE_TYPE, UPDATE_FILE_ARGS, UPDATE_FILE_EXPECTED_RESULT) DELETE_FILE_CHANGE_TYPE = "delete" DELETE_FILE_ARGS = {"branch_id": "111", "branch_name": "Test", "commit_comment": "Test 6", "file_path": "/test_5.md"} DELETE_FILE_EXPECTED_RESULT = { "refUpdates": [{"name": "Test", "oldObjectId": "111"}], "commits": [{"comment": "Test 6", "changes": [{"changeType": "delete", "item": {"path": "/test_5.md"}}]}], } DELETE_FILE = (DELETE_FILE_CHANGE_TYPE, DELETE_FILE_ARGS, DELETE_FILE_EXPECTED_RESULT) @pytest.mark.parametrize("change_type, args, expected_result", [CREATE_FILE, UPDATE_FILE, DELETE_FILE]) def test_file_pre_process_body_request(requests_mock, change_type: str, args: dict, expected_result: dict): """ Given: - all required arguments When: - executing file_pre_process_body_request static method Then: - Ensure that this static method works as expected by constructing the HTTP response data accordingly. """ from AzureDevOps import Client, file_pre_process_body_request authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") data = file_pre_process_body_request(change_type, args) assert data == expected_result def test_file_update_command(requests_mock): """ Given: - all required arguments When: - executing azure-devops-file-update command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, file_update_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" url_1 = f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/pushes" mock_response_1 = json.loads(load_mock_response("file.json")) requests_mock.post(url_1, json=mock_response_1) url_2 = f"{BASE_URL}/{project}/_apis/git/repositories/{repository}/refs" mock_response_2 = json.loads(load_mock_response("branch_list.json")) requests_mock.get(url_2, json=mock_response_2) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") args = { "branch_id": "111", "branch_name": "refs/heads/main", "commit_comment": "Test 5.", "file_content": "UPTADE", "file_path": "/test_5.md", } result = file_update_command(client, args, ORGANIZATION, repository, project) assert result.readable_output.startswith('Commit "Test 5." was updated successfully by "" in branch "refs/heads/main".') assert result.outputs_prefix == "AzureDevOps.File" assert result.outputs == mock_response_1 def test_file_delete_command(requests_mock): """ Given: - all required arguments When: - executing azure-devops-file-delete command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, file_delete_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" url_1 = f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/pushes" mock_response_1 = json.loads(load_mock_response("file.json")) requests_mock.post(url_1, json=mock_response_1) url_2 = f"{BASE_URL}/{project}/_apis/git/repositories/{repository}/refs" mock_response_2 = json.loads(load_mock_response("branch_list.json")) requests_mock.get(url_2, json=mock_response_2) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") args = {"branch_id": "111", "branch_name": "refs/heads/main", "commit_comment": "Test 5.", "file_path": "/test_5.md"} result = file_delete_command(client, args, ORGANIZATION, repository, project) assert result.readable_output.startswith('Commit "Test 5." was deleted successfully by "" in branch "refs/heads/main".') assert result.outputs_prefix == "AzureDevOps.File" assert result.outputs == mock_response_1 def test_file_list_command(requests_mock): """ Given: - all required arguments When: - executing azure-devops-file-list command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, file_list_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" url_1 = f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/items" mock_response_1 = json.loads(load_mock_response("file_list.json")) requests_mock.get(url_1, json=mock_response_1) url_2 = f"{BASE_URL}/{project}/_apis/git/repositories/{repository}/refs" mock_response_2 = json.loads(load_mock_response("branch_list.json")) requests_mock.get(url_2, json=mock_response_2) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") args = { "branch_name": "refs/heads/main", "recursion_level": "OneLevel", } result = file_list_command(client, args, ORGANIZATION, repository, project) assert result.readable_output.startswith("### Files\n|File Name(s)|Object ID|Commit ID|Object Type|Is Folder|\n") assert result.outputs_prefix == "AzureDevOps.File" assert result.outputs == mock_response_1["value"] ZIP = ("zip", {"Content-Type": "application/zip"}, "response") JSON = ("json", {"Content-Type": "application/json"}, "json") @pytest.mark.parametrize("format_file, headers, resp_type", [ZIP, JSON]) def test_file_get_command(mocker, requests_mock, format_file: str, headers: dict, resp_type: str): """ Given: - all required arguments When: - executing azure-devops-file-get command Then: - Ensure headers and resp_type were sent correctly based on input (json or zip). """ import AzureDevOps from AzureDevOps import Client, file_get_command from requests import Response authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") response = Response() http_request = mocker.patch.object( client.ms_client, "http_request", return_value=response if format_file == "zip" else {"content": ""} ) args = {"file_name": "test_file", "branch_name": "Test", "format": format_file, "include_content": False} mocker.patch.object(AzureDevOps, "fileResult") file_get_command(client, args, ORGANIZATION, "test", "test") assert http_request.call_args.kwargs["headers"] == headers assert http_request.call_args.kwargs["resp_type"] == resp_type def test_branch_create_command(requests_mock): """ Given: - all required arguments When: - executing azure-devops-branch-create command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, branch_create_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" url_1 = f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/pushes" mock_response_1 = json.loads(load_mock_response("branch_create.json")) requests_mock.post(url_1, json=mock_response_1) url_2 = f"{BASE_URL}/{project}/_apis/git/repositories/{repository}/refs" mock_response_2 = json.loads(load_mock_response("branch_list.json")) requests_mock.get(url_2, json=mock_response_2) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") args = { "branch_name": "refs/heads/main", "file_path": "Test", "commit_comment": "Initial commit", } result = branch_create_command(client, args, ORGANIZATION, repository, project) assert result.readable_output.startswith("Branch refs/heads/main was created successfully by XXXXXX.") assert result.outputs_prefix == "AzureDevOps.Branch" assert result.outputs == mock_response_1 def test_pull_request_thread_create_command(requests_mock): """ Given: - all required arguments When: - executing azure-devops-pull-request-thread-create command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, pull_request_thread_create_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" pull_request_id = 43 url = ( f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/pullRequests/" f"{pull_request_id}/threads" ) mock_response = json.loads(load_mock_response("pull_request_thread_create.json")) requests_mock.post(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") args = {"pull_request_id": 43, "comment_text": "Test"} result = pull_request_thread_create_command(client, args, ORGANIZATION, repository, project) assert result.readable_output.startswith("Thread 65 was created successfully by XXXXXX.") assert result.outputs_prefix == "AzureDevOps.PullRequestThread" assert result.outputs == mock_response def test_pull_request_thread_update_command(requests_mock): """ Given: - all required arguments When: - executing azure-devops-pull-request-thread-update command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, pull_request_thread_update_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" pull_request_id = 43 thread_id = 66 url = ( f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/pullRequests/" f"{pull_request_id}/threads/{thread_id}" ) mock_response = json.loads(load_mock_response("pull_request_thread_update.json")) requests_mock.patch(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") args = {"pull_request_id": 43, "thread_id": 66, "comment_text": "Test"} result = pull_request_thread_update_command(client, args, ORGANIZATION, repository, project) assert result.readable_output.startswith("Thread 66 was updated successfully by XXXXXXX.") assert result.outputs_prefix == "AzureDevOps.PullRequestThread" assert result.outputs == mock_response def test_pull_request_thread_list_command(requests_mock): """ Given: - all required arguments When: - executing azure-devops-pull-request-thread-list command Then: - Ensure outputs_prefix and readable_output are set up right - Ensure nested threads are displayed as expected. (meaning updates should be displayed in the readable_output too) """ from AzureDevOps import Client, pull_request_thread_list_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" repository = "xsoar" pull_request_id = 43 url = ( f"https://dev.azure.com/{ORGANIZATION}/{project}/_apis/git/repositories/{repository}/pullRequests/" f"{pull_request_id}/threads" ) mock_response = json.loads(load_mock_response("pull_request_thread_list.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") args = {"pull_request_id": 43} result = pull_request_thread_list_command(client, args, ORGANIZATION, repository, project) assert result.readable_output.startswith( "### Threads\n|Thread ID|Content|Name|Date|\n|---|---|---|---|\n| 66 | 123 | XXX |" " 2023-07-23T20:08:57.74Z |\n| 66 | 111 | XXX | 2023-07-23T20:11:30.633Z |" ) assert result.outputs_prefix == "AzureDevOps.PullRequestThread" assert result.outputs == mock_response["value"] def test_project_team_list_command(requests_mock): """ Given: - all required arguments When: - executing azure-devops-project-team-list command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, project_team_list_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" url = f"https://dev.azure.com/{ORGANIZATION}/_apis/projects/{project}/teams" mock_response = json.loads(load_mock_response("project_team_list.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = project_team_list_command(client, {}, ORGANIZATION, project) assert result.readable_output.startswith("### Teams\n|Name|\n|---|\n| DevOpsDemo Team |\n") assert result.outputs_prefix == "AzureDevOps.Team" assert result.outputs == mock_response["value"] def test_team_member_list_command(requests_mock): """ Given: - all required arguments When: - executing azure-devops-team-member-list command Then: - Ensure outputs_prefix and readable_output are set up right """ from AzureDevOps import Client, team_member_list_command authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) # setting parameters project = "test" team_id = "zzz" url = f"https://dev.azure.com/{ORGANIZATION}/_apis/projects/{project}/teams/{team_id}/members" mock_response = json.loads(load_mock_response("team_member_list.json")) requests_mock.get(url, json=mock_response) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") result = team_member_list_command(client, {"team_id": "zzz"}, ORGANIZATION, project) assert result.readable_output.startswith( "### Team Members\n|Name|Unique Name|User ID|\n|---|---|---|\n| XXX | | |\n| YYY | | |" ) assert result.outputs_prefix == "AzureDevOps.TeamMember" assert result.outputs == mock_response["value"] def test_blob_zip_get_command(mocker, requests_mock): """ Given: - all required arguments When: - executing azure-devops-blob-zip-get command Then: - Ensure the output's type is INFO_FILE """ import AzureDevOps from AzureDevOps import Client, blob_zip_get_command from requests import Response authorization_url = "https://login.microsoftonline.com/organizations/oauth2/v2.0/token" requests_mock.post(authorization_url, json=get_azure_access_token_mock()) client = Client(client_id=CLIENT_ID, organization=ORGANIZATION, verify=False, proxy=False, auth_type="Device Code") with open("test_data/response_content") as content: response = Response() response._content = content mocker.patch.object(client.ms_client, "http_request", return_value=response) args = {"file_object_id": "zzz"} mocker.patch.object(AzureDevOps, "fileResult", return_value={"Type": EntryType.ENTRY_INFO_FILE}) res = blob_zip_get_command(client, args, ORGANIZATION, "test", "test") assert res["Type"] == EntryType.ENTRY_INFO_FILE