Development Tool

The Development Tool module allows an app to: - send Development Information to JIRA. This development information will be displayed in the development information panel when an issue is viewed. - Integrate the development tool into the Atlassian toolchain. This enables users to manually associate development entities, such as repositories, with Jira projects.

When a user uninstalls an app, all the data that the app sent to Jira is deleted. If the app is reinstalled, this data won't be added back unless the app resends historical information to Jira.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
  "modules": {
    "jiraDevelopmentTool": {
      "url": "https://bitbucket.org",
      "application": {
        "value": "Bitbucket"
      },
      "logoUrl": "https://www.atlassian.com/dam/jcr:bd56917e-e361-4f03-b672-9f5ef5b06e80/Bitbucket-blue.svg",
      "capabilities": [
        "commit"
      ],
      "name": {
        "value": "Bitbucket"
      },
      "key": "bitbucket-integration"
    }
  }
}

Properties

application
Type
Required
Yes
Description

The application behind this development tool

Represents a string that can be resolved via a localization properties file. You can use the same i18n Property key and value in multiple places if you like, but identical keys must have identical values.

Example

1
2
3
4
{
  "value": "My text"
}

Properties

value
Type
Max length
1500
Required
Yes
Description

The human-readable default value. This will be used if no translation exists. Only the following HTML tags are supported: b, i, strong, em, and code.

i18n
Type
Max length
300
Description

The localization key for the human-readable value. Translations for the keys are defined at the top level of the add-on descriptor.


capabilities
Type
Required
Yes
Description

What development information the tool offers


key
Type
Max length
100
Required
Yes
Pattern
^[a-zA-Z0-9-]+$
Description

A key to identify this module.

This key must be unique relative to the add on, with the exception of Confluence macros: Their keys need to be globally unique.

Keys must only contain alphanumeric characters and dashes.

The key is used to generate the url to your add-on's module. The url is generated as a combination of your add-on key and module key. For example, an add-on which looks like:

1
2
3
4
5
6
7
8
9
{
    "key": "my-addon",
    "modules": {
        "configurePage": {
            "key": "configure-me",
        }
    }
}

Will have a configuration page module with a URL of /plugins/servlet/ac/my-addon/configure-me.


logoUrl
Type
Format
uri
Required
Yes
Description

The logo for the development tool, will be displayed in an area 16 by 16 pixels


name
Type
Required
Yes
Description

A human readable name.

Represents a string that can be resolved via a localization properties file. You can use the same i18n Property key and value in multiple places if you like, but identical keys must have identical values.

Example

1
2
3
4
{
  "value": "My text"
}

Properties

value
Type
Max length
1500
Required
Yes
Description

The human-readable default value. This will be used if no translation exists. Only the following HTML tags are supported: b, i, strong, em, and code.

i18n
Type
Max length
300
Description

The localization key for the human-readable value. Translations for the keys are defined at the top level of the add-on descriptor.


url
Type
Format
uri
Required
Yes
Description

A URL to the development tool


actions
Type
Description

Optional actions that can be performed by Jira users, e.g., create branch, etc.

Development actions that can be performed by Jira users.

Each action is optional (unless indicated otherwise). The absence of an action indicates that the action is not supported by the provider.

Properties

associateRepository
Type
Description

Action for fetching development repository for a given repository ID.

If a repository with the given ID does not exist, the response should be a HTTP 404.

Example request

The templateUrl property of this action will receive a POST request when this action is invoked. The repository ID to be fetched will be included in the body.

1
2
3
4
5

 {
   "id": "XXXX"
 }
 

Example response

1
2
3
4
5
6
7
8
9
10
11
12
13
14

 {
   // Identifier of the repository which will be used to hydrate repository details. The ID does not need to conform to any specific format.
   id: "f730ce9c-3442-4f8a-93a4-a44f3b35c46b/target/111-222-333"
   // Human readable name of the repository
   name: "my-repo-name"
   // Url allowing Jira to link directly to the provider's repository
   url: "https://my.devinfo.provider.com/f730ce9c-3442-4f8a-93a4-a44f3b35c46b/container/f730ce9c-3442-4f8a-93a4-a44f3b35c46b"
   // Optional, url providing the avatar for the repository.
   avatarUrl: "https://res.cloudinary.com/snyk/image/upload/v1584038122/groups/Atlassian_Logo.png"
   // The date and time this repository was last scanned/updated
   lastUpdatedDate: "2022-01-19T23:27:25+00:00"
 }
 

Defines the URL template that is used when an action is invoked.

For the create branch action, the following context parameters are supported: {issue.key}, {issue.summary}.

createBranch
Type
Description

Defines the URL template that is used when an action is invoked.

For the create branch action, the following context parameters are supported: {issue.key}, {issue.summary}.

createRepository
Type
Description

Action for creating a new repository.

Example request

The templateUrl property of this action will receive a POST request with request body when this action is invoked. The request body will be a JOSN payload consisting of: - workspaceId: The ID of the workspace in which to create the repository. This will be an ID which was supplied via the searchRepositories action within this same module. - name: The name of the repository to create.

If the input provided is invalid, then the response should be a HTTP 400.

1
2
3
4
5
6
7
8

 "https://my.devinfo.provider.com/repos/create"

Body: {
     "workspaceId": "12345",
     "name": "my-repo-name"
 }
 

Example response

1
2
3
4
5
6
7
8
9
10
11
12
13
14

 {
   // Identifier of the repository which will be used to hydrate repository details
   "id": "f730ce9c-3442-4f8a-93a4-a44f3b35c46b/target/111-222-333"
   // Human readable name of the repository
   "name": "my-repo-name"
   // Url allowing Jira to link directly to the provider's repository
   "url": "https://my.devinfo.provider.com/f730ce9c-3442-4f8a-93a4-a44f3b35c46b/repo/f730ce9c-3442-4f8a-93a4-a44f3b35c46b"
   // Optional, url providing the avatar for the repository.
   "avatarUrl": "https://res.cloudinary.com/snyk/image/upload/v1584038122/groups/Atlassian_Logo.png"
   // The date and time this repository was last scanned/updated
   "lastUpdatedDate": "2022-01-19T23:27:25+00:00"
 }
 

Defines the URL template that is used when an action is invoked.

For the create branch action, the following context parameters are supported: {issue.key}, {issue.summary}.

disassociateRepository
Type
Description

The disassociate action is called when a container is disassociated from the Jira project which it was previously associated with. This action is called to notify the provider to stop syncing this container with Jira.

Example request

The templateUrl property of this action will receive a POST request when this action is invoked. The repository ID will be included in the request body.

1
2
3
4
5

 {
   "id": "XXXX"
 }
 

Defines the URL template that is used when an action is invoked.

For the create branch action, the following context parameters are supported: {issue.key}, {issue.summary}.

searchConnectedWorkspaces
Type
Description

Action for showing any partial or full matches using a search on the connected development workspace name.

Example request

The templateUrl property of this action will receive a GET request with searchQuery when this action is invoked. The searchQuery param will be the users input. This query parameter is optional. This should be searched for against the workspace names, i.e. results for searchQuery="my-workspace-n" should include "my-workspace-name".

1
2
3

 "https://my.devinfo.provider.com/repos/search?searchQuery=my-workspace-name"
 

Example response

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

 {
   "workspaces": [
     {
       // Identifier of the workspace which will be used to hydrate workspace details. The ID does not need to conform to any specific format.
       "id": "f730ce9c-3442-4f8a-93a4-a44f3b35c46b/target/111-222-333"
       // Human readable name of the workspace
       "name": "my-workspace-name"
       // Optional, url allowing Jira to link directly to the provider's workspace
       "url": "https://my.devinfo.provider.com/f730ce9c-3442-4f8a-93a4-a44f3b35c46b/repo/f730ce9c-3442-4f8a-93a4-a44f3b35c46b"
       // Optional, url providing the avatar for the workspace.
       "avatarUrl": "https://res.cloudinary.com/snyk/image/upload/v1584038122/groups/Atlassian_Logo.png"
     }
   ]
 }
 

Defines the URL template that is used when an action is invoked.

For the create branch action, the following context parameters are supported: {issue.key}, {issue.summary}.

searchRepositories
Type
Description

Action for showing any partial or full matches using a search on the repository name.

Note that the workspace which each repository is contained within must be returned as a property of each repository.

Example request

The templateUrl property of this action will receive a GET request with optional query params searchQuery,page and limit when this action is invoked. - searchQuery: Optional, the users input. This should be searched for against the repository names, i.e. results for searchQuery="my-repo-n" should include "my-repo-name". - page: Optional, the current page for returning paginated results (default to 1) - limit: Optional, the number of items per page (default to 100)

1
2
3

 "https://my.devinfo.provider.com/repos/search?searchQuery=my-repo-name&page=3&limit=50"
 

Example response

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

 {
   "containers": [
     {
       // Identifier of the repository which will be used to hydrate repository details
       "id": "f730ce9c-3442-4f8a-93a4-a44f3b35c46b/target/111-222-333"
       // Human readable name of the repository
       "name": "my-repo-name"
       // Url allowing Jira to link directly to the provider's repository
       "url": "https://my.devinfo.provider.com/f730ce9c-3442-4f8a-93a4-a44f3b35c46b/repo/f730ce9c-3442-4f8a-93a4-a44f3b35c46b"
       // Optional, url providing the avatar for the repository.
       "avatarUrl": "https://res.cloudinary.com/snyk/image/upload/v1584038122/groups/Atlassian_Logo.png"
       // The date and time this repository was last scanned/updated
       "lastUpdatedDate": "2022-01-19T23:27:25+00:00"
       // The details of the workspace which this repository is in.
       "workspace": {
          // Identifier of the workspace
          "id": "f730ce9c-3442-4f8a-93a4-a44f3b35c46b/target/111-222-333"
          // Human readable name of the workspace
          "name": "my-workspace-name"
       }
     }
   ]
 }
 

Defines the URL template that is used when an action is invoked.

For the create branch action, the following context parameters are supported: {issue.key}, {issue.summary}.