mirror of
https://github.com/Azure/setup-helm.git
synced 2026-04-06 14:39:28 +00:00
Adding graph ql for Helm versions (#21)
* Adding graphql query to fetch latest helm release of specified type * Updating typescript version and js file * Fixing PR comments in release * Adding feature flag as environment variable in release * Changing feature flag name * Updating files as per latest changes in master after resolving merge conflicts * Removing non prod modules
This commit is contained in:
parent
d55017e2a0
commit
18bc768116
365 changed files with 48161 additions and 800510 deletions
88
src/run.ts
88
src/run.ts
|
|
@ -1,4 +1,5 @@
|
|||
// Copyright (c) Microsoft Corporation.
|
||||
// Copyright (c) Microsoft Corporation.
|
||||
// Licensed under the MIT license.
|
||||
|
||||
import * as os from 'os';
|
||||
|
|
@ -9,19 +10,24 @@ import * as semver from 'semver';
|
|||
|
||||
import * as toolCache from '@actions/tool-cache';
|
||||
import * as core from '@actions/core';
|
||||
import { graphql } from '@octokit/graphql';
|
||||
|
||||
const helmToolName = 'helm';
|
||||
const stableHelmVersion = 'v3.2.1';
|
||||
const stableHelm3Version = 'v3.5.3';
|
||||
const stableHelm2Version = 'v2.17.0';
|
||||
const LATEST_HELM2_VERSION = '2.*';
|
||||
const LATEST_HELM3_VERSION = '3.*';
|
||||
const helmAllReleasesUrl = 'https://api.github.com/repos/helm/helm/releases';
|
||||
|
||||
function getExecutableExtension(): string {
|
||||
export function getExecutableExtension(): string {
|
||||
if (os.type().match(/^Win/)) {
|
||||
return '.exe';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
function getHelmDownloadURL(version: string): string {
|
||||
export function getHelmDownloadURL(version: string): string {
|
||||
switch (os.type()) {
|
||||
case 'Linux':
|
||||
return util.format('https://get.helm.sh/helm-%s-linux-amd64.zip', version);
|
||||
|
|
@ -35,7 +41,7 @@ function getHelmDownloadURL(version: string): string {
|
|||
}
|
||||
}
|
||||
|
||||
async function getStableHelmVersion(): Promise<string> {
|
||||
export async function getStableHelmVersion(): Promise<string> {
|
||||
try {
|
||||
const downloadPath = await toolCache.downloadTool(helmAllReleasesUrl);
|
||||
const responseArray = JSON.parse(fs.readFileSync(downloadPath, 'utf8').toString().trim());
|
||||
|
|
@ -60,8 +66,7 @@ async function getStableHelmVersion(): Promise<string> {
|
|||
return stableHelmVersion;
|
||||
}
|
||||
|
||||
|
||||
var walkSync = function (dir, filelist, fileToFind) {
|
||||
export var walkSync = function (dir, filelist, fileToFind) {
|
||||
var files = fs.readdirSync(dir);
|
||||
filelist = filelist || [];
|
||||
files.forEach(function (file) {
|
||||
|
|
@ -78,7 +83,7 @@ var walkSync = function (dir, filelist, fileToFind) {
|
|||
return filelist;
|
||||
};
|
||||
|
||||
async function downloadHelm(version: string): Promise<string> {
|
||||
export async function downloadHelm(version: string): Promise<string> {
|
||||
if (!version) { version = await getStableHelmVersion(); }
|
||||
let cachedToolpath = toolCache.find(helmToolName, version);
|
||||
if (!cachedToolpath) {
|
||||
|
|
@ -103,26 +108,81 @@ async function downloadHelm(version: string): Promise<string> {
|
|||
return helmpath;
|
||||
}
|
||||
|
||||
function findHelm(rootFolder: string): string {
|
||||
async function getLatestHelmVersionFor(type: string): Promise<string> {
|
||||
const token = core.getInput('token', { 'required': true });
|
||||
try {
|
||||
const { repository } = await graphql(
|
||||
`{
|
||||
repository(name: "helm", owner: "helm") {
|
||||
releases(last: 100) {
|
||||
nodes {
|
||||
tagName
|
||||
}
|
||||
}
|
||||
}
|
||||
}`,
|
||||
{
|
||||
headers: {
|
||||
authorization: `token ${token}`
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
const releases = repository.releases.nodes.reverse();
|
||||
let latestValidRelease = releases.find(release => isValidVersion(release.tagName, type));
|
||||
if (latestValidRelease)
|
||||
return latestValidRelease.tagName;
|
||||
} catch (err) {
|
||||
core.warning(util.format("Error while fetching the latest Helm %s release. Error: %s. Using default Helm version %s.", type, err.toString(), getStableHelmVersionFor(type)));
|
||||
return getStableHelmVersionFor(type);
|
||||
}
|
||||
core.warning(util.format("Could not find stable release for Helm %s. Using default Helm version %s.", type, getStableHelmVersionFor(type)));
|
||||
return getStableHelmVersionFor(type);
|
||||
}
|
||||
|
||||
function getStableHelmVersionFor(type: string) {
|
||||
return type === "v2" ? stableHelm2Version : stableHelm3Version;
|
||||
}
|
||||
|
||||
// isValidVersion checks if verison matches the specified type and is a stable release
|
||||
function isValidVersion(version: string, type: string): boolean {
|
||||
if (!version.toLocaleLowerCase().startsWith(type))
|
||||
return false;
|
||||
return version.indexOf('rc') == -1;
|
||||
}
|
||||
|
||||
export function findHelm(rootFolder: string): string {
|
||||
fs.chmodSync(rootFolder, '777');
|
||||
var filelist: string[] = [];
|
||||
walkSync(rootFolder, filelist, helmToolName + getExecutableExtension());
|
||||
if (!filelist) {
|
||||
throw new Error(util.format("Helm executable not found in path ", rootFolder));
|
||||
if (!filelist || filelist.length == 0) {
|
||||
throw new Error(util.format("Helm executable not found in path", rootFolder));
|
||||
}
|
||||
else {
|
||||
return filelist[0];
|
||||
}
|
||||
}
|
||||
|
||||
async function run() {
|
||||
export async function run() {
|
||||
let version = core.getInput('version', { 'required': true });
|
||||
if (version.toLocaleLowerCase() === 'latest') {
|
||||
version = await getStableHelmVersion();
|
||||
} else if (!version.toLocaleLowerCase().startsWith('v')) {
|
||||
version = 'v' + version;
|
||||
|
||||
if (process.env['HELM_INSTALLER_LEGACY_VERSIONING'] == 'true') {
|
||||
if (version.toLocaleLowerCase() === 'latest') {
|
||||
version = await getStableHelmVersion();
|
||||
} else if (!version.toLocaleLowerCase().startsWith('v')) {
|
||||
version = 'v' + version;
|
||||
}
|
||||
} else {
|
||||
if (version.toLocaleLowerCase() === 'latest' || version === LATEST_HELM3_VERSION) {
|
||||
version = await getLatestHelmVersionFor("v3");
|
||||
} else if (version === LATEST_HELM2_VERSION) {
|
||||
version = await getLatestHelmVersionFor("v2");
|
||||
} else if (!version.toLocaleLowerCase().startsWith('v')) {
|
||||
version = 'v' + version;
|
||||
}
|
||||
}
|
||||
|
||||
core.debug(util.format("Downloading %s", version));
|
||||
let cachedPath = await downloadHelm(version);
|
||||
|
||||
try {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue