Skip to content

Commit caf04ed

Browse files
TS-46000: Fix name of connector option
1 parent e3b9c56 commit caf04ed

2 files changed

Lines changed: 35 additions & 2 deletions

File tree

src/TeamscaleClient.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,18 @@ export default class TeamscaleClient {
152152
return promise;
153153
}
154154

155+
/**
156+
* Retrieves the server version info from the Teamscale server.
157+
*/
158+
public retrieveServerVersion(): PromiseLike<{ maxApiVersion: { major: number, minor: number, patch: number } }> {
159+
const xhr = this.generateRequest('GET', '/api/version');
160+
const promise = this.generatePromise<string>(xhr).then(result => {
161+
return JSON.parse(result);
162+
});
163+
xhr.send();
164+
return promise;
165+
}
166+
155167
/**
156168
* Retrieves a list of accessible Teamscale projects from the Teamscale server.
157169
*/

src/Utils/ProjectsUtils.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,14 +107,35 @@ async function hasFindingsChurn(teamscaleClient: TeamscaleClient, projectCandida
107107
*/
108108
export async function retrieveRequirementsConnectorId(teamscaleClient: TeamscaleClient, projectCandidate: string) {
109109
let connectorId: string = '';
110-
const projectConnectorList = await teamscaleClient.retrieveProjectConnectorList();
110+
const [projectConnectorList, connectorIdOptionName] = await Promise.all([
111+
teamscaleClient.retrieveProjectConnectorList(),
112+
getConnectorIdOptionName(teamscaleClient)
113+
]);
111114
if (projectConnectorList.hasOwnProperty(projectCandidate)) {
112115
for (const projectConnector of projectConnectorList[projectCandidate]) {
113116
if (projectConnector.type !== 'Azure DevOps Boards as Requirement Management Tool') {
114117
continue;
115118
}
116-
connectorId = projectConnector.options['Requirements Connector Identifier'];
119+
connectorId = projectConnector.options[connectorIdOptionName];
117120
}
118121
}
119122
return connectorId;
123+
}
124+
125+
/**
126+
* Returns the correct option name for the connector identifier based on the Teamscale server version.
127+
* Before 2026.1 it was "Requirements Connector identifier", from 2026.1 onwards "Requirements Connector Identifier".
128+
*/
129+
async function getConnectorIdOptionName(teamscaleClient: TeamscaleClient): Promise<string> {
130+
try {
131+
const versionInfo = await teamscaleClient.retrieveServerVersion();
132+
const version = versionInfo.maxApiVersion;
133+
if (version.major > 2026 || (version.major === 2026 && version.minor >= 1)) {
134+
return 'Requirements Connector Identifier';
135+
}
136+
} catch (e) {
137+
// Fall back to new name if version check fails
138+
return 'Requirements Connector Identifier';
139+
}
140+
return 'Requirements Connector identifier';
120141
}

0 commit comments

Comments
 (0)