Skip to content

Commit fa01d49

Browse files
2197050 Validate tool versions before running them (#453)
* 2197050 Validate tool versions before running them * Review Points addressed * Review Points addressed * Review Points addressed
1 parent 7595f31 commit fa01d49

File tree

4 files changed

+47
-4
lines changed

4 files changed

+47
-4
lines changed

common-npm-packages/azure-arm-rest/azCliUtility.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { IExecSyncResult } from 'azure-pipelines-task-lib/toolrunner';
55
import { getHandlerFromToken, WebApi } from "azure-devops-node-api";
66
import { ITaskApi } from "azure-devops-node-api/TaskApi";
77
import { TaskHubOidcToken } from "azure-devops-node-api/interfaces/TaskAgentInterfaces";
8+
import * as webClient from "./webClient";
89
import Q = require('q');
910

1011
tl.setResourcePath(path.join(__dirname, 'module.json'), true);
@@ -188,4 +189,45 @@ function isAzVersionGreaterOrEqual(azVersionResultOutput: string, versionToCompa
188189
tl.error(`Error checking Azure CLI version: ${error.message}`);
189190
return false;
190191
}
192+
}
193+
194+
async function getLatestAzureModuleReleaseVersion(moduleName: string): Promise<string> {
195+
try {
196+
let request = new webClient.WebRequest();
197+
request.uri = `https://api.github.com/repos/Azure/${moduleName}/releases`;
198+
request.method = 'GET';
199+
request.headers = request.headers || {};
200+
const response = await webClient.sendRequest(request);
201+
const lastestCliRelease = moduleName === "azure-powershell" ? response?.body?.filter(x => x?.tag_name?.match(/^v\d+\.\d+\.0/))?.[0] : response?.body?.[0];
202+
return lastestCliRelease?.tag_name
203+
} catch (err) {
204+
tl.error(`Error checking Azure version: ${err.message}`);
205+
}
206+
}
207+
208+
export async function validateAzModuleVersion(moduleName: string, currentVersion: string, displayName: string, versionTolerance: number, checkOnlyMajorVersion: boolean = false): Promise<void> {
209+
const DisplayWarningForOlderAzVersion: boolean = tl.getPipelineFeature("ShowWarningOnOlderAzureModules");
210+
try {
211+
if (DisplayWarningForOlderAzVersion) {
212+
const latestRelease: string = await getLatestAzureModuleReleaseVersion(moduleName);
213+
if (latestRelease) {
214+
const [latestsemver, latestMajor, latestMinor] = latestRelease.match(/(\d+).(\d+).(\d+)/);
215+
const [currentsemver, currentMajor, currentMinor] = currentVersion.match(/(\d+).(\d+).(\d+)/);
216+
tl.debug(`For the module ${moduleName} the current semver Version is ${currentsemver} and the latest semver version is ${latestsemver}`)
217+
let displayWarning = false;
218+
if (checkOnlyMajorVersion && Number(currentMajor) < Number(latestMajor) - versionTolerance) {
219+
displayWarning = true;
220+
}
221+
if (!checkOnlyMajorVersion && (Number(currentMajor) < Number(latestMajor) || Number(currentMinor) < Number(latestMinor) - versionTolerance)) {
222+
displayWarning = true;
223+
}
224+
if (displayWarning) {
225+
tl.warning(tl.loc('lowerAzWarning', displayName, currentsemver, latestsemver))
226+
}
227+
}
228+
}
229+
} catch (err) {
230+
tl.error(`Error on validating Azure version: ${err.message}`);
231+
}
232+
191233
}

common-npm-packages/azure-arm-rest/module.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@
188188
"VirtualApplicationDoesNotExist": "Virtual application doesn't exists : %s",
189189
"CantDownloadClusterCredentials": "Failed to fetch credentials for the cluster %s. Reason %s. Make sure the service connection is assigned an appropriate Azure RBAC role: https://aka.ms/azdo-aks-rm-access.",
190190
"KubernetesClusterResourceGroup": "Kubernetes cluster %s, resource group %s.",
191-
"SettingAzureCloud": "Setting active cloud to: %s"
191+
"SettingAzureCloud": "Setting active cloud to: %s",
192+
"lowerAzWarning": "%s version %s is out of date, the latest version is %s"
192193
}
193194
}

common-npm-packages/azure-arm-rest/package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

common-npm-packages/azure-arm-rest/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "azure-pipelines-tasks-azure-arm-rest",
3-
"version": "3.256.1",
3+
"version": "3.257.0",
44
"description": "Common Lib for Azure ARM REST apis",
55
"repository": {
66
"type": "git",

0 commit comments

Comments
 (0)