1
1
"use strict" ;
2
2
// Copyright (c) Microsoft Corporation.
3
+ // Copyright (c) Microsoft Corporation.
3
4
// Licensed under the MIT license.
5
+ var __createBinding = ( this && this . __createBinding ) || ( Object . create ? ( function ( o , m , k , k2 ) {
6
+ if ( k2 === undefined ) k2 = k ;
7
+ Object . defineProperty ( o , k2 , { enumerable : true , get : function ( ) { return m [ k ] ; } } ) ;
8
+ } ) : ( function ( o , m , k , k2 ) {
9
+ if ( k2 === undefined ) k2 = k ;
10
+ o [ k2 ] = m [ k ] ;
11
+ } ) ) ;
12
+ var __setModuleDefault = ( this && this . __setModuleDefault ) || ( Object . create ? ( function ( o , v ) {
13
+ Object . defineProperty ( o , "default" , { enumerable : true , value : v } ) ;
14
+ } ) : function ( o , v ) {
15
+ o [ "default" ] = v ;
16
+ } ) ;
17
+ var __importStar = ( this && this . __importStar ) || function ( mod ) {
18
+ if ( mod && mod . __esModule ) return mod ;
19
+ var result = { } ;
20
+ if ( mod != null ) for ( var k in mod ) if ( k !== "default" && Object . hasOwnProperty . call ( mod , k ) ) __createBinding ( result , mod , k ) ;
21
+ __setModuleDefault ( result , mod ) ;
22
+ return result ;
23
+ } ;
4
24
var __awaiter = ( this && this . __awaiter ) || function ( thisArg , _arguments , P , generator ) {
5
25
function adopt ( value ) { return value instanceof P ? value : new P ( function ( resolve ) { resolve ( value ) ; } ) ; }
6
26
return new ( P || ( P = Promise ) ) ( function ( resolve , reject ) {
@@ -10,30 +30,30 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
30
step ( ( generator = generator . apply ( thisArg , _arguments || [ ] ) ) . next ( ) ) ;
11
31
} ) ;
12
32
} ;
13
- var __importStar = ( this && this . __importStar ) || function ( mod ) {
14
- if ( mod && mod . __esModule ) return mod ;
15
- var result = { } ;
16
- if ( mod != null ) for ( var k in mod ) if ( Object . hasOwnProperty . call ( mod , k ) ) result [ k ] = mod [ k ] ;
17
- result [ "default" ] = mod ;
18
- return result ;
19
- } ;
20
33
Object . defineProperty ( exports , "__esModule" , { value : true } ) ;
34
+ exports . run = exports . findHelm = exports . downloadHelm = exports . walkSync = exports . getStableHelmVersion = exports . getHelmDownloadURL = exports . getExecutableExtension = void 0 ;
21
35
const os = __importStar ( require ( "os" ) ) ;
22
36
const path = __importStar ( require ( "path" ) ) ;
23
37
const util = __importStar ( require ( "util" ) ) ;
24
38
const fs = __importStar ( require ( "fs" ) ) ;
25
39
const semver = __importStar ( require ( "semver" ) ) ;
26
40
const toolCache = __importStar ( require ( "@actions/tool-cache" ) ) ;
27
41
const core = __importStar ( require ( "@actions/core" ) ) ;
42
+ const graphql_1 = require ( "@octokit/graphql" ) ;
28
43
const helmToolName = 'helm' ;
29
44
const stableHelmVersion = 'v3.2.1' ;
45
+ const stableHelm3Version = 'v3.5.3' ;
46
+ const stableHelm2Version = 'v2.17.0' ;
47
+ const LATEST_HELM2_VERSION = '2.*' ;
48
+ const LATEST_HELM3_VERSION = '3.*' ;
30
49
const helmAllReleasesUrl = 'https://api.github.com/repos/helm/helm/releases' ;
31
50
function getExecutableExtension ( ) {
32
51
if ( os . type ( ) . match ( / ^ W i n / ) ) {
33
52
return '.exe' ;
34
53
}
35
54
return '' ;
36
55
}
56
+ exports . getExecutableExtension = getExecutableExtension ;
37
57
function getHelmDownloadURL ( version ) {
38
58
switch ( os . type ( ) ) {
39
59
case 'Linux' :
@@ -45,6 +65,7 @@ function getHelmDownloadURL(version) {
45
65
return util . format ( 'https://get.helm.sh/helm-%s-windows-amd64.zip' , version ) ;
46
66
}
47
67
}
68
+ exports . getHelmDownloadURL = getHelmDownloadURL ;
48
69
function getStableHelmVersion ( ) {
49
70
return __awaiter ( this , void 0 , void 0 , function * ( ) {
50
71
try {
@@ -71,12 +92,13 @@ function getStableHelmVersion() {
71
92
return stableHelmVersion ;
72
93
} ) ;
73
94
}
74
- var walkSync = function ( dir , filelist , fileToFind ) {
95
+ exports . getStableHelmVersion = getStableHelmVersion ;
96
+ exports . walkSync = function ( dir , filelist , fileToFind ) {
75
97
var files = fs . readdirSync ( dir ) ;
76
98
filelist = filelist || [ ] ;
77
99
files . forEach ( function ( file ) {
78
100
if ( fs . statSync ( path . join ( dir , file ) ) . isDirectory ( ) ) {
79
- filelist = walkSync ( path . join ( dir , file ) , filelist , fileToFind ) ;
101
+ filelist = exports . walkSync ( path . join ( dir , file ) , filelist , fileToFind ) ;
80
102
}
81
103
else {
82
104
core . debug ( file ) ;
@@ -113,26 +135,81 @@ function downloadHelm(version) {
113
135
return helmpath ;
114
136
} ) ;
115
137
}
138
+ exports . downloadHelm = downloadHelm ;
139
+ function getLatestHelmVersionFor ( type ) {
140
+ return __awaiter ( this , void 0 , void 0 , function * ( ) {
141
+ const token = core . getInput ( 'token' , { 'required' : true } ) ;
142
+ try {
143
+ const { repository } = yield graphql_1 . graphql ( `{
144
+ repository(name: "helm", owner: "helm") {
145
+ releases(last: 100) {
146
+ nodes {
147
+ tagName
148
+ }
149
+ }
150
+ }
151
+ }` , {
152
+ headers : {
153
+ authorization : `token ${ token } `
154
+ }
155
+ } ) ;
156
+ const releases = repository . releases . nodes . reverse ( ) ;
157
+ let latestValidRelease = releases . find ( release => isValidVersion ( release . tagName , type ) ) ;
158
+ if ( latestValidRelease )
159
+ return latestValidRelease . tagName ;
160
+ }
161
+ catch ( err ) {
162
+ core . warning ( util . format ( "Error while fetching the latest Helm %s release. Error: %s. Using default Helm version %s." , type , err . toString ( ) , getStableHelmVersionFor ( type ) ) ) ;
163
+ return getStableHelmVersionFor ( type ) ;
164
+ }
165
+ core . warning ( util . format ( "Could not find stable release for Helm %s. Using default Helm version %s." , type , getStableHelmVersionFor ( type ) ) ) ;
166
+ return getStableHelmVersionFor ( type ) ;
167
+ } ) ;
168
+ }
169
+ function getStableHelmVersionFor ( type ) {
170
+ return type === "v2" ? stableHelm2Version : stableHelm3Version ;
171
+ }
172
+ // isValidVersion checks if verison matches the specified type and is a stable release
173
+ function isValidVersion ( version , type ) {
174
+ if ( ! version . toLocaleLowerCase ( ) . startsWith ( type ) )
175
+ return false ;
176
+ return version . indexOf ( 'rc' ) == - 1 ;
177
+ }
116
178
function findHelm ( rootFolder ) {
117
179
fs . chmodSync ( rootFolder , '777' ) ;
118
180
var filelist = [ ] ;
119
- walkSync ( rootFolder , filelist , helmToolName + getExecutableExtension ( ) ) ;
120
- if ( ! filelist ) {
121
- throw new Error ( util . format ( "Helm executable not found in path " , rootFolder ) ) ;
181
+ exports . walkSync ( rootFolder , filelist , helmToolName + getExecutableExtension ( ) ) ;
182
+ if ( ! filelist || filelist . length == 0 ) {
183
+ throw new Error ( util . format ( "Helm executable not found in path" , rootFolder ) ) ;
122
184
}
123
185
else {
124
186
return filelist [ 0 ] ;
125
187
}
126
188
}
189
+ exports . findHelm = findHelm ;
127
190
function run ( ) {
128
191
return __awaiter ( this , void 0 , void 0 , function * ( ) {
129
192
let version = core . getInput ( 'version' , { 'required' : true } ) ;
130
- if ( version . toLocaleLowerCase ( ) === 'latest' ) {
131
- version = yield getStableHelmVersion ( ) ;
193
+ if ( process . env [ 'HELM_INSTALLER_LEGACY_VERSIONING' ] == 'true' ) {
194
+ if ( version . toLocaleLowerCase ( ) === 'latest' ) {
195
+ version = yield getStableHelmVersion ( ) ;
196
+ }
197
+ else if ( ! version . toLocaleLowerCase ( ) . startsWith ( 'v' ) ) {
198
+ version = 'v' + version ;
199
+ }
132
200
}
133
- else if ( ! version . toLocaleLowerCase ( ) . startsWith ( 'v' ) ) {
134
- version = 'v' + version ;
201
+ else {
202
+ if ( version . toLocaleLowerCase ( ) === 'latest' || version === LATEST_HELM3_VERSION ) {
203
+ version = yield getLatestHelmVersionFor ( "v3" ) ;
204
+ }
205
+ else if ( version === LATEST_HELM2_VERSION ) {
206
+ version = yield getLatestHelmVersionFor ( "v2" ) ;
207
+ }
208
+ else if ( ! version . toLocaleLowerCase ( ) . startsWith ( 'v' ) ) {
209
+ version = 'v' + version ;
210
+ }
135
211
}
212
+ core . debug ( util . format ( "Downloading %s" , version ) ) ;
136
213
let cachedPath = yield downloadHelm ( version ) ;
137
214
try {
138
215
if ( ! process . env [ 'PATH' ] . startsWith ( path . dirname ( cachedPath ) ) ) {
@@ -146,4 +223,5 @@ function run() {
146
223
core . setOutput ( 'helm-path' , cachedPath ) ;
147
224
} ) ;
148
225
}
226
+ exports . run = run ;
149
227
run ( ) . catch ( core . setFailed ) ;
0 commit comments