Add SCM data (technical preview)
You can inject SCM (source code management) data into OpenText Core Software Delivery Platform using the REST API. Then you can use OpenText Core SDP to track commits and other relevant data such as repositories and branches, and perform code analysis.
Flow
You can inject SCM data to the OpenText Core SDP server directly using the API.
To inject SCM data using the API:
-
Authenticate and sign in as a user with the necessary permissions. For details, see Authentication.
-
Push the SCM data into OpenText Core SDP using either:
-
Pipeline context flow. SCM data is injected with the CI Job execution details, and the commits associated with the pipeline run. For details, see Push SCM data using the pipeline context flow.
-
Workspace context flow. SCM data is injected for the workspace input; the data is standalone without reference to the pipeline. For details, see Push SCM data using the workspace context flow.
Tip:
-
We recommend using the pipeline context flow because test failure analysis, code coverage, and the vulnerability features are not supported in the workspace context flow.
-
If you push SCM data using both the pipeline context flow and the workspace context flow, data sent from the workspace context flow is ignored.
-
-
Check the status of the push, and get commit and branch data. For details, see Check results.
Push SCM data using the pipeline context flow
Use the PUT operation with a payload to create new SCM Data entities, like repositories, branches, and commits.
The unique commit identifier is parentRevId. If the revision ID is found in the context but for a different repository/branch, the commit is linked to the other repository.
Request syntax
The request syntax for injecting SCM information using the CI event flow is:
PUT .../api/shared_spaces/space_id/scm-commits?instance-id='<instance_id>'&job-ci-id='<path_to_file>'&build-ci-id='<build_id>'
When PUTing, specify:
-
A query for identifying the pipeline run.
-
A request body containing the JSON payload described below.
-
The Content-Type header field, set to application/json.
-
Optionally, the content can be compressed in gzip format. In this case, the Content-Encoding header field must be set to application/gzip.
The following table describes how to identify the corresponding pipeline run in request.
Item | Field |
---|---|
CI server ID |
instance-id |
Job name, such as Jenkins | job-ci-id |
Build ID |
build-ci-id |
For details on the JSON payload in the request body, see JSON payload in the request body.
Push SCM data using the workspace context flow
You can inject SCM commits using the workspace context flow, instead of the pipeline context flow.
To push SCM data into a workspace using the workspace context flow, specify the workspace ID in the following format:
field name workspace=<workspace_id>
For details on the JSON payload in the request body, see JSON payload in the request body.
Note:
-
Test failure analysis, code coverage, and vulnerability features are not supported for commits that were injected using the workspace context flow.
-
You can set injection to one workspace only.
JSON payload in the request body
The payload in the request body describes the pipeline run or workspace that you want to update with SCM data.
You can specify more than one commit in the payload.
The payload uses the standard REST API syntax.
Example:
[{ "repository": { "type": "git", "url": " https://github.com/repository.git", "branch": "master" }, "commits": [{ "user": "user", "userEmail": "user@mail.com", "time": "1586269223000", "parentRevId": "e5358a5f1456aebbf5c436790179fe6b218def89", "comment": "some comment", "revId": "7583cc0704efd0ef96bbb4689a401d252adea821", "changes": [{ "type": "edit", "file": "src/…filePath/Example1.java", "renameToFile": null, "commitId": null } ] }, { "user": "user", "userEmail": "user@mail.com", "time": "1586269223000", "parentRevId": "e5358a5f1456aebbf5c436790179fe6b218def81", "comment": "some comment", "revId": "7583cc0704efd0ef96bbb4689a401d252adea822", "changes": [{ "type": "edit", "file": "src/…filePath/Example2.java", "renameToFile": null, "commitId": null } ] } ] }]
The following table describes the fields in the payload request body.
Field | Description |
---|---|
Repository | One element. |
type | Tool type: “svn","git","starteam". Free text string. |
url | URL to the SCM repository. |
branch |
Branch where commits were done. |
Commits | Array. |
parentRevId | Commit parentRevId, received from SCM tool. |
revId | Commit revId, received from SCM tool. |
comment | Commit comment, received from SCM tool. |
time | Commit time, received from SCM tool. |
userEmail | Email of the workspace user responsible for the commit. This field is used to identify the user. Optional. |
user | User name. |
Changes | Array of changes. Optional. |
type | “edit”, “add”, “delete”. Free text string. |
file | Changed file name. |
Check results
If successful, return code 200 is returned.
Make sure that the SCM data has been pushed correctly into OpenText Core SDP.
-
Check the response for errors that may have occurred.
In addition to a success or error code, a background task ID that tracks the commits injection process is also returned.
-
Check if the commits exist in OpenText Core SDP. For details, see Track commits to your SCM system.
Workspace context only: Tracking commits that were added are shown in dashboards and in the Team Backlog > Development tab only.
Get commit and branch data
You can see existing SCM commits and their IDs using a GET operation:
GET .../api/shared_spaces/<space_id>/workspaces/<workspace_id>/scm_commits
See Examples.
You can see existing SCM branches and their IDs using a GET operation:
GET .../api/shared_spaces/<space_id>/workspaces/<workspace_id>/scm_repositories
Examples
For example, we have in the request:
Example: GET .../api/shared_spaces/<space_id>/workspaces/<workspace_id>/scm_commits/1213269?fields=creation_time,client_lock_stamp,stories,version_stamp,commit_time,revision,workspace_id,repositories,name,workspace_user,risk,comment,last_modified,user,email
Without workspace user, repositories, and stories, the response is:
Example: GET .../api/shared_spaces/<space_id>/workspaces/<workspace_id>/scm_commits/1213269?fields=creation_time,client_lock_stamp ,version_stamp,commit_time,revision,workspace_id,name,risk,comment,last_modified,user,email
{
"type": "scm_commit",
"last_modified": "2020-08-22T22:31:25Z",
"revision": "53e564566a75fcc073a5ed0dd71bad0f0f588855",
"creation_time": "2020-08-20T08:34:10Z",
"user": "userName",
"risk": false,
"comment": "user story #1053020. user story 11111111",
"commit_time": "2020-08-20T08:33:06Z",
"name": "commit name",
"workspace_id": 33006,
"id": "1213269",
"version_stamp": 14,
"client_lock_stamp": 1
}
With the SCM data, the response is:
Example: {
"type": "scm_commit",
"last_modified": "2020-08-22T22:31:25Z",
"revision": "53e564566a75fcc073a5ed0dd71bad0f0f588855",
"creation_time": "2020-08-20T08:34:10Z",
"user": "evgene.lock",
"risk": false,
"comment": "user story #1053020. user story 11111111",
"commit_time": "2020-08-20T08:33:06Z",
"name": "commit name",
"workspace_id": 33006,
"id": "1213269",
"version_stamp": 14,
"client_lock_stamp": 1,
"stories": {
"total_count": 1,
"data": [{
"type": "work_item",
"id": "1053020",
"name": "US1",
"subtype": "story"
}
]
},
"repositories": {
"total_count": 1,
"data": [{
"type": "scm_repository",
"scm_source_view": null,
"scm_type": 2,
"scm_diff": null,
"workspace_id": 33006,
"branch": "master",
"id": "324004",
"name": "repository.git:master",
"url": "https://github.com/repository.git"
}
]
},
"workspace_user": {
"type": "workspace_user",
"id": "117001",
"workspace_id": 33006,
"activity_level": 0,
"full_name": "User Name",
"name": "userName@mail.com"
}
}
See also: