Compare commits

...

2 Commits

Author SHA1 Message Date
rgsubh
e045d11f39 Changed the documentation to specify v before 'version' and code changes to append 'v' if it not provided in version (#11)
* Chnaged the documentation to sepcify v before 'version'

* append v to version incase it does not already include

* review comments fix
2020-05-14 12:12:24 +05:30
shigupt202
b1c4524a5f Users/shigupt/fixing helm latest releases master (#14)
* Updating the logic for downloading latest Helm version

* Adding semver to package.json
2020-05-13 21:53:04 +05:30
4 changed files with 74 additions and 47 deletions

View File

@@ -1,7 +1,7 @@
# Setup Helm # Setup Helm
#### Install a specific version of helm binary on the runner. #### Install a specific version of helm binary on the runner.
Acceptable values are latest or any semantic version string like `1.15.0`. Use this action in workflow to define which version of helm will be used. Acceptable values are latest or any semantic version string like v2.16.7 Use this action in workflow to define which version of helm will be used.
```yaml ```yaml
- uses: azure/setup-helm@v1 - uses: azure/setup-helm@v1

View File

@@ -22,11 +22,12 @@ const os = __importStar(require("os"));
const path = __importStar(require("path")); const path = __importStar(require("path"));
const util = __importStar(require("util")); const util = __importStar(require("util"));
const fs = __importStar(require("fs")); const fs = __importStar(require("fs"));
const semver = __importStar(require("semver"));
const toolCache = __importStar(require("@actions/tool-cache")); const toolCache = __importStar(require("@actions/tool-cache"));
const core = __importStar(require("@actions/core")); const core = __importStar(require("@actions/core"));
const helmToolName = 'helm'; const helmToolName = 'helm';
const stableHelmVersion = 'v2.14.1'; const stableHelmVersion = 'v3.2.1';
const helmLatestReleaseUrl = 'https://api.github.com/repos/helm/helm/releases/latest'; const helmAllReleasesUrl = 'https://api.github.com/repos/helm/helm/releases';
function getExecutableExtension() { function getExecutableExtension() {
if (os.type().match(/^Win/)) { if (os.type().match(/^Win/)) {
return '.exe'; return '.exe';
@@ -46,17 +47,28 @@ function getHelmDownloadURL(version) {
} }
function getStableHelmVersion() { function getStableHelmVersion() {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
return toolCache.downloadTool(helmLatestReleaseUrl).then((downloadPath) => { try {
const response = JSON.parse(fs.readFileSync(downloadPath, 'utf8').toString().trim()); const downloadPath = yield toolCache.downloadTool(helmAllReleasesUrl);
if (!response.tag_name) { const responseArray = JSON.parse(fs.readFileSync(downloadPath, 'utf8').toString().trim());
return stableHelmVersion; let latestHelmVersion = semver.clean(stableHelmVersion);
} responseArray.forEach(response => {
return response.tag_name; if (response && response.tag_name) {
}, (error) => { let currentHelmVerison = semver.clean(response.tag_name.toString());
core.debug(error); if (currentHelmVerison) {
core.warning(util.format("Failed to read latest kubectl version from stable.txt. From URL %s. Using default stable version %s", helmLatestReleaseUrl, stableHelmVersion)); if (currentHelmVerison.toString().indexOf('rc') == -1 && semver.gt(currentHelmVerison, latestHelmVersion)) {
return stableHelmVersion; //If current helm version is not a pre release and is greater than latest helm version
}); latestHelmVersion = currentHelmVerison;
}
}
}
});
latestHelmVersion = "v" + latestHelmVersion;
return latestHelmVersion;
}
catch (error) {
core.warning(util.format("Cannot get the latest Helm info from %s. Error %s. Using default Helm version %s.", helmAllReleasesUrl, error, stableHelmVersion));
}
return stableHelmVersion;
}); });
} }
var walkSync = function (dir, filelist, fileToFind) { var walkSync = function (dir, filelist, fileToFind) {
@@ -118,6 +130,9 @@ function run() {
if (version.toLocaleLowerCase() === 'latest') { if (version.toLocaleLowerCase() === 'latest') {
version = yield getStableHelmVersion(); version = yield getStableHelmVersion();
} }
else if (!version.toLocaleLowerCase().startsWith('v')) {
version = 'v' + version;
}
let cachedPath = yield downloadHelm(version); let cachedPath = yield downloadHelm(version);
try { try {
if (!process.env['PATH'].startsWith(path.dirname(cachedPath))) { if (!process.env['PATH'].startsWith(path.dirname(cachedPath))) {

View File

@@ -9,7 +9,8 @@
"@actions/tool-cache": "1.1.2", "@actions/tool-cache": "1.1.2",
"@actions/io": "^1.0.0", "@actions/io": "^1.0.0",
"@actions/core": "^1.0.0", "@actions/core": "^1.0.0",
"@actions/exec": "^1.0.0" "@actions/exec": "^1.0.0",
"semver": "^6.1.0"
}, },
"main": "lib/run.js", "main": "lib/run.js",
"scripts": { "scripts": {

View File

@@ -5,13 +5,14 @@ import * as os from 'os';
import * as path from 'path'; import * as path from 'path';
import * as util from 'util'; import * as util from 'util';
import * as fs from 'fs'; import * as fs from 'fs';
import * as semver from 'semver';
import * as toolCache from '@actions/tool-cache'; import * as toolCache from '@actions/tool-cache';
import * as core from '@actions/core'; import * as core from '@actions/core';
const helmToolName = 'helm'; const helmToolName = 'helm';
const stableHelmVersion = 'v2.14.1'; const stableHelmVersion = 'v3.2.1';
const helmLatestReleaseUrl = 'https://api.github.com/repos/helm/helm/releases/latest'; const helmAllReleasesUrl = 'https://api.github.com/repos/helm/helm/releases';
function getExecutableExtension(): string { function getExecutableExtension(): string {
if (os.type().match(/^Win/)) { if (os.type().match(/^Win/)) {
@@ -36,40 +37,48 @@ function getHelmDownloadURL(version: string): string {
} }
async function getStableHelmVersion(): Promise<string> { async function getStableHelmVersion(): Promise<string> {
return toolCache.downloadTool(helmLatestReleaseUrl).then((downloadPath) => { try {
const response = JSON.parse(fs.readFileSync(downloadPath, 'utf8').toString().trim()); const downloadPath = await toolCache.downloadTool(helmAllReleasesUrl);
if (!response.tag_name) const responseArray = JSON.parse(fs.readFileSync(downloadPath, 'utf8').toString().trim());
{ let latestHelmVersion = semver.clean(stableHelmVersion);
return stableHelmVersion; responseArray.forEach(response => {
} if (response && response.tag_name) {
let currentHelmVerison = semver.clean(response.tag_name.toString());
return response.tag_name; if (currentHelmVerison) {
}, (error) => { if (currentHelmVerison.toString().indexOf('rc') == -1 && semver.gt(currentHelmVerison, latestHelmVersion)) {
core.debug(error); //If current helm version is not a pre release and is greater than latest helm version
core.warning(util.format("Failed to read latest kubectl version from stable.txt. From URL %s. Using default stable version %s", helmLatestReleaseUrl, stableHelmVersion)); latestHelmVersion = currentHelmVerison;
return stableHelmVersion; }
}); }
}
});
latestHelmVersion = "v" + latestHelmVersion;
return latestHelmVersion;
} catch (error) {
core.warning(util.format("Cannot get the latest Helm info from %s. Error %s. Using default Helm version %s.", helmAllReleasesUrl, error, stableHelmVersion));
}
return stableHelmVersion;
} }
var walkSync = function(dir, filelist, fileToFind) { var walkSync = function (dir, filelist, fileToFind) {
var files = fs.readdirSync(dir); var files = fs.readdirSync(dir);
filelist = filelist || []; filelist = filelist || [];
files.forEach(function(file) { files.forEach(function (file) {
if (fs.statSync(path.join(dir, file)).isDirectory()) { if (fs.statSync(path.join(dir, file)).isDirectory()) {
filelist = walkSync(path.join(dir, file), filelist, fileToFind); filelist = walkSync(path.join(dir, file), filelist, fileToFind);
} }
else { else {
core.debug(file); core.debug(file);
if(file == fileToFind) if (file == fileToFind) {
{ filelist.push(path.join(dir, file));
filelist.push(path.join(dir, file)); }
} }
}
}); });
return filelist; return filelist;
}; };
async function downloadHelm(version: string): Promise<string> { async function downloadHelm(version: string): Promise<string> {
if (!version) { version = await getStableHelmVersion(); } if (!version) { version = await getStableHelmVersion(); }
let cachedToolpath = toolCache.find(helmToolName, version); let cachedToolpath = toolCache.find(helmToolName, version);
@@ -90,7 +99,7 @@ async function downloadHelm(version: string): Promise<string> {
if (!helmpath) { if (!helmpath) {
throw new Error(util.format("Helm executable not found in path ", cachedToolpath)); throw new Error(util.format("Helm executable not found in path ", cachedToolpath));
} }
fs.chmodSync(helmpath, '777'); fs.chmodSync(helmpath, '777');
return helmpath; return helmpath;
} }
@@ -111,12 +120,14 @@ async function run() {
let version = core.getInput('version', { 'required': true }); let version = core.getInput('version', { 'required': true });
if (version.toLocaleLowerCase() === 'latest') { if (version.toLocaleLowerCase() === 'latest') {
version = await getStableHelmVersion(); version = await getStableHelmVersion();
} else if (!version.toLocaleLowerCase().startsWith('v')) {
version = 'v' + version;
} }
let cachedPath = await downloadHelm(version); let cachedPath = await downloadHelm(version);
try { try {
if (!process.env['PATH'].startsWith(path.dirname(cachedPath))) { if (!process.env['PATH'].startsWith(path.dirname(cachedPath))) {
core.addPath(path.dirname(cachedPath)); core.addPath(path.dirname(cachedPath));
} }