2021-03-17 14:26:33 +05:30
"use strict" ;
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
var _ _createBinding = ( this && this . _ _createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
Object . defineProperty ( o , k2 , { enumerable : true , get : function ( ) { return m [ k ] ; } } ) ;
} ) : ( function ( o , m , k , k2 ) {
if ( k2 === undefined ) k2 = k ;
o [ k2 ] = m [ k ] ;
} ) ) ;
var _ _setModuleDefault = ( this && this . _ _setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
} ) : function ( o , v ) {
o [ "default" ] = v ;
} ) ;
var _ _importStar = ( this && this . _ _importStar ) || function ( mod ) {
if ( mod && mod . _ _esModule ) return mod ;
var result = { } ;
if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . hasOwnProperty . call ( mod , k ) ) _ _createBinding ( result , mod , k ) ;
_ _setModuleDefault ( result , mod ) ;
return result ;
} ;
var _ _awaiter = ( this && this . _ _awaiter ) || function ( thisArg , _arguments , P , generator ) {
function adopt ( value ) { return value instanceof P ? value : new P ( function ( resolve ) { resolve ( value ) ; } ) ; }
return new ( P || ( P = Promise ) ) ( function ( resolve , reject ) {
function fulfilled ( value ) { try { step ( generator . next ( value ) ) ; } catch ( e ) { reject ( e ) ; } }
function rejected ( value ) { try { step ( generator [ "throw" ] ( value ) ) ; } catch ( e ) { reject ( e ) ; } }
function step ( result ) { result . done ? resolve ( result . value ) : adopt ( result . value ) . then ( fulfilled , rejected ) ; }
step ( ( generator = generator . apply ( thisArg , _arguments || [ ] ) ) . next ( ) ) ;
} ) ;
} ;
Object . defineProperty ( exports , "__esModule" , { value : true } ) ;
const os = _ _importStar ( require ( "os" ) ) ;
const path = _ _importStar ( require ( "path" ) ) ;
const util = _ _importStar ( require ( "util" ) ) ;
const fs = _ _importStar ( require ( "fs" ) ) ;
const toolCache = _ _importStar ( require ( "@actions/tool-cache" ) ) ;
const core = _ _importStar ( require ( "@actions/core" ) ) ;
const graphql _1 = require ( "@octokit/graphql" ) ;
const helmToolName = 'helm' ;
const stableHelmVersion = 'v3.2.1' ;
const LATEST _HELM2 _VERSION = '2.*' ;
const LATEST _HELM3 _VERSION = '3.*' ;
function getExecutableExtension ( ) {
if ( os . type ( ) . match ( /^Win/ ) ) {
return '.exe' ;
}
return '' ;
}
function getHelmDownloadURL ( version ) {
switch ( os . type ( ) ) {
case 'Linux' :
return util . format ( 'https://get.helm.sh/helm-%s-linux-amd64.zip' , version ) ;
case 'Darwin' :
return util . format ( 'https://get.helm.sh/helm-%s-darwin-amd64.zip' , version ) ;
case 'Windows_NT' :
default :
return util . format ( 'https://get.helm.sh/helm-%s-windows-amd64.zip' , version ) ;
}
}
var walkSync = function ( dir , filelist , fileToFind ) {
var files = fs . readdirSync ( dir ) ;
filelist = filelist || [ ] ;
files . forEach ( function ( file ) {
if ( fs . statSync ( path . join ( dir , file ) ) . isDirectory ( ) ) {
filelist = walkSync ( path . join ( dir , file ) , filelist , fileToFind ) ;
}
else {
core . debug ( file ) ;
if ( file == fileToFind ) {
filelist . push ( path . join ( dir , file ) ) ;
}
}
} ) ;
return filelist ;
} ;
function downloadHelm ( version ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
if ( ! version ) {
version = yield getLatestHelmVersionFor ( "v3" ) ;
}
let cachedToolpath = toolCache . find ( helmToolName , version ) ;
if ( ! cachedToolpath ) {
let helmDownloadPath ;
try {
helmDownloadPath = yield toolCache . downloadTool ( getHelmDownloadURL ( version ) ) ;
}
catch ( exception ) {
throw new Error ( util . format ( "Failed to download Helm from location " , getHelmDownloadURL ( version ) ) ) ;
}
fs . chmodSync ( helmDownloadPath , '777' ) ;
const unzipedHelmPath = yield toolCache . extractZip ( helmDownloadPath ) ;
cachedToolpath = yield toolCache . cacheDir ( unzipedHelmPath , helmToolName , version ) ;
}
const helmpath = findHelm ( cachedToolpath ) ;
if ( ! helmpath ) {
throw new Error ( util . format ( "Helm executable not found in path " , cachedToolpath ) ) ;
}
fs . chmodSync ( helmpath , '777' ) ;
return helmpath ;
} ) ;
}
function getLatestHelmVersionFor ( type ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
const token = core . getInput ( 'token' , { 'required' : true } ) ;
try {
const { repository } = yield graphql _1 . graphql ( ` {
repository ( name : "helm" , owner : "helm" ) {
releases ( last : 100 ) {
nodes {
tagName
2019-10-04 12:16:40 +05:30
}
2019-11-26 17:55:31 +05:30
}
2021-03-17 14:26:33 +05:30
}
} ` , {
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 ( ) , stableHelmVersion ) ) ;
}
core . warning ( util . format ( "Could not find stable release for Helm %s. Using default Helm version %s." , type , stableHelmVersion ) ) ;
return stableHelmVersion ;
} ) ;
}
// isValidVersion checks if verison matches the specified type and is a stable release
function isValidVersion ( version , type ) {
if ( ! version . toLocaleLowerCase ( ) . startsWith ( type ) )
return false ;
return version . indexOf ( 'rc' ) == - 1 ;
}
function findHelm ( rootFolder ) {
fs . chmodSync ( rootFolder , '777' ) ;
var filelist = [ ] ;
walkSync ( rootFolder , filelist , helmToolName + getExecutableExtension ( ) ) ;
if ( ! filelist ) {
throw new Error ( util . format ( "Helm executable not found in path " , rootFolder ) ) ;
}
else {
return filelist [ 0 ] ;
}
}
function run ( ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
let version = core . getInput ( 'version' , { 'required' : true } ) ;
if ( version . toLocaleLowerCase ( ) === 'latest' || version === LATEST _HELM3 _VERSION ) {
version = yield getLatestHelmVersionFor ( "v3" ) ;
}
else if ( version === LATEST _HELM2 _VERSION ) {
version = yield getLatestHelmVersionFor ( "v2" ) ;
}
else if ( ! version . toLocaleLowerCase ( ) . startsWith ( 'v' ) ) {
version = 'v' + version ;
}
core . debug ( util . format ( "Downloading %s" , version ) ) ;
let cachedPath = yield downloadHelm ( version ) ;
try {
if ( ! process . env [ 'PATH' ] . startsWith ( path . dirname ( cachedPath ) ) ) {
core . addPath ( path . dirname ( cachedPath ) ) ;
}
}
catch ( _a ) {
//do nothing, set as output variable
}
console . log ( ` Helm tool version: ' ${ version } ' has been cached at ${ cachedPath } ` ) ;
core . setOutput ( 'helm-path' , cachedPath ) ;
} ) ;
}
run ( ) . catch ( core . setFailed ) ;