1
1
import * as taskLib from 'vsts-task-lib/task' ;
2
2
import * as toolLib from 'vsts-task-tool-lib/tool' ;
3
3
import * as os from 'os' ;
4
+ import * as fetch from 'node-fetch' ;
4
5
5
6
async function run ( ) {
6
7
try {
7
- let version = taskLib . getInput ( 'version' , true ) ;
8
+ let version = taskLib . getInput ( 'version' , false ) || await getVersion ( ) ;
8
9
await getNode ( version ) ;
9
10
}
10
11
catch ( error ) {
@@ -25,24 +26,42 @@ async function acquireNode(version: string): Promise<string> {
25
26
version = toolLib . cleanVersion ( version ) ;
26
27
let downloadUrl = downloadLink ( version , os . platform ( ) , os . arch ( ) )
27
28
28
- let downloadPath = await toolLib . downloadTool ( downloadUrl ) ;
29
+ let downloadPath = await toolLib . downloadTool ( await downloadUrl ) ;
29
30
let extPath : string = await toolLib . extractZip ( downloadPath ) ;
30
31
31
32
return await toolLib . cacheDir ( extPath , 'packer' , version ) ;
32
33
}
33
34
34
35
run ( ) ;
35
36
36
- export default function downloadLink ( version : string , os : string , arch : string ) : string {
37
- if ( os == 'win32' ) {
38
- os = 'windows' ;
39
- }
37
+ export async function downloadLink ( version : string , os : string , arch : string ) : Promise < string > {
38
+ os = getOs ( os ) ;
39
+ arch = getArch ( arch ) ;
40
+
41
+ return `https://releases.hashicorp.com/packer/${ version } /packer_${ version } _${ os } _${ arch } .zip` ;
42
+ }
40
43
44
+ function getArch ( arch : string ) {
41
45
if ( arch == 'x32' || arch == 'ia32' ) {
42
- arch = '386' ;
43
- } else if ( arch == 'x64' ) {
44
- arch = 'amd64' ;
46
+ return '386' ;
47
+ }
48
+
49
+ if ( arch == 'x64' ) {
50
+ return 'amd64' ;
45
51
}
46
52
47
- return `https://releases.hashicorp.com/packer/${ version } /packer_${ version } _${ os } _${ arch } .zip` ;
48
- }
53
+ return arch ;
54
+ }
55
+
56
+ function getOs ( os : string ) {
57
+ if ( os == 'win32' ) {
58
+ return 'windows' ;
59
+ }
60
+
61
+ return os ;
62
+ }
63
+
64
+ export async function getVersion ( ) : Promise < string > {
65
+ const res = await fetch . default ( 'https://checkpoint-api.hashicorp.com/v1/check/packer' ) ;
66
+ return ( await res . json ( ) ) . current_version ;
67
+ }
0 commit comments