@@ -57,27 +57,38 @@ type FullJSON = {
57
57
// On Linux, getting the exact download variant to pick is hard, so we still
58
58
// use mongodb-download-url for that. For macOS, either would probably be fine.
59
59
// TODO: upstream all of this into mongodb-download-url :(
60
- async function lookupDownloadUrl ( versionInfo : VersionInfo ) : Promise < string > {
61
- const knownDistroRegex = / ^ (?< name > r h e l 8 0 | r h e l 7 [ 0 - 9 ] | d e b i a n 1 0 ) / ;
60
+ async function lookupDownloadUrl ( versionInfo : VersionInfo , enterprise : boolean ) : Promise < string > {
61
+ const knownDistroRegex = / ^ (?< name > r h e l 8 0 | r h e l 7 [ 0 - 9 ] | d e b i a n 1 0 | u b u n t u (?: \d + ) ) / ;
62
62
const { version } = versionInfo ;
63
63
const distroId = process . env . DISTRO_ID || '' ;
64
64
if ( ( process . platform === 'win32' && semver . lt ( version , '4.4.0' ) ) ||
65
65
( process . platform === 'linux' && semver . lt ( version , '4.2.0' ) ) ||
66
66
( process . platform !== 'win32' && ! knownDistroRegex . test ( distroId ) ) ) {
67
- return ( await promisify ( getDownloadURL ) ( { version } ) ) . url ;
67
+ let { url } = ( await promisify ( getDownloadURL ) ( { version, enterprise } ) ) ;
68
+ if ( semver . gte ( version , '4.2.0' ) ) {
69
+ url = url . replace ( 'mongodb-osx' , 'mongodb-macos' ) ;
70
+ }
71
+ if ( semver . lt ( version , '4.2.0' ) && distroId ) {
72
+ url = url . replace ( 'enterprise-linux_64' , `enterprise-${ distroId . split ( '-' ) [ 0 ] } ` ) ;
73
+ }
74
+ return url ;
68
75
}
69
76
70
77
let downloadInfo : DownloadInfo ;
71
78
if ( process . platform === 'win32' ) {
72
79
downloadInfo = versionInfo . downloads
73
80
. find ( ( downloadInfo : DownloadInfo ) =>
74
- downloadInfo . target === 'windows' && downloadInfo . edition === 'base' ) as DownloadInfo ;
81
+ downloadInfo . target === 'windows' &&
82
+ downloadInfo . edition === ( enterprise ? 'enterprise' : 'base' ) &&
83
+ downloadInfo . arch === 'x86_64' ) as DownloadInfo ;
75
84
} else {
76
85
let distro = distroId . match ( knownDistroRegex ) ! . groups ! . name ;
77
86
if ( distro . match ( / r h e l 7 [ 0 - 9 ] / ) ) distro = 'rhel70' ;
78
87
downloadInfo = versionInfo . downloads
79
88
. find ( ( downloadInfo : DownloadInfo ) =>
80
- downloadInfo . target === distro && downloadInfo . edition === 'targeted' ) as DownloadInfo ;
89
+ downloadInfo . target === distro &&
90
+ downloadInfo . edition === ( enterprise ? 'enterprise' : 'targeted' ) &&
91
+ downloadInfo . arch === 'x86_64' ) as DownloadInfo ;
81
92
}
82
93
return downloadInfo . archive . url ;
83
94
}
@@ -116,7 +127,7 @@ export async function downloadMongoDb(targetVersionSemverSpecifier = '*'): Promi
116
127
. filter ( ( info : VersionInfo ) => semver . satisfies ( info . version , targetVersionSemverSpecifier ) )
117
128
. sort ( ( a : VersionInfo , b : VersionInfo ) => semver . rcompare ( a . version , b . version ) ) ;
118
129
const versionInfo : VersionInfo = productionVersions [ 0 ] ;
119
- return await doDownload ( versionInfo . version , ( ) => lookupDownloadUrl ( versionInfo ) ) ;
130
+ return await doDownload ( versionInfo . version , ( ) => lookupDownloadUrl ( versionInfo , true ) ) ;
120
131
}
121
132
122
133
const downloadPromises : Record < string , Promise < string > > = { } ;
0 commit comments