@@ -18,6 +18,20 @@ export type TarVersion = {
18
18
version : string ;
19
19
} ;
20
20
21
+ async function isBinaryAccessible (
22
+ binary : string ,
23
+ logger : Logger ,
24
+ ) : Promise < boolean > {
25
+ try {
26
+ await safeWhich ( binary ) ;
27
+ logger . debug ( `Found ${ binary } .` ) ;
28
+ return true ;
29
+ } catch ( e ) {
30
+ logger . debug ( `Could not find ${ binary } : ${ e } ` ) ;
31
+ return false ;
32
+ }
33
+ }
34
+
21
35
async function getTarVersion ( ) : Promise < TarVersion > {
22
36
const tar = await safeWhich ( "tar" ) ;
23
37
let stdout = "" ;
@@ -53,36 +67,40 @@ async function getTarVersion(): Promise<TarVersion> {
53
67
54
68
export interface ZstdAvailability {
55
69
available : boolean ;
70
+ foundZstdBinary : boolean ;
56
71
version ?: TarVersion ;
57
72
}
58
73
59
74
export async function isZstdAvailable (
60
75
logger : Logger ,
61
76
) : Promise < ZstdAvailability > {
77
+ const foundZstdBinary = await isBinaryAccessible ( "zstd" , logger ) ;
62
78
try {
63
79
const tarVersion = await getTarVersion ( ) ;
64
80
const { type, version } = tarVersion ;
65
81
logger . info ( `Found ${ type } tar version ${ version } .` ) ;
66
82
switch ( type ) {
67
83
case "gnu" :
68
84
return {
69
- available : version >= MIN_REQUIRED_GNU_TAR_VERSION ,
85
+ available : foundZstdBinary && version >= MIN_REQUIRED_GNU_TAR_VERSION ,
86
+ foundZstdBinary,
70
87
version : tarVersion ,
71
88
} ;
72
89
case "bsd" :
73
90
return {
74
- available : version >= MIN_REQUIRED_BSD_TAR_VERSION ,
91
+ available : foundZstdBinary && version >= MIN_REQUIRED_BSD_TAR_VERSION ,
92
+ foundZstdBinary,
75
93
version : tarVersion ,
76
94
} ;
77
95
default :
78
96
assertNever ( type ) ;
79
97
}
80
98
} catch ( e ) {
81
- logger . error (
82
- "Failed to determine tar version, therefore will assume zstd may not be available. " +
99
+ logger . warning (
100
+ "Failed to determine tar version, therefore will assume zstd is not available. " +
83
101
`The underlying error was: ${ e } ` ,
84
102
) ;
85
- return { available : false } ;
103
+ return { available : false , foundZstdBinary } ;
86
104
}
87
105
}
88
106
0 commit comments