@@ -22,7 +22,7 @@ const path = require('path');
2222const jeditor = require ( "gulp-json-editor" ) ;
2323const del = require ( 'del' ) ;
2424const sourcemaps = require ( 'gulp-sourcemaps' ) ;
25- const fs = require ( 'fs' ) ;
25+ const fs = require ( 'fs-extra ' ) ;
2626const fsExtra = require ( 'fs-extra' ) ;
2727const remapIstanbul = require ( 'remap-istanbul' ) ;
2828const istanbul = require ( 'istanbul' ) ;
@@ -107,8 +107,6 @@ gulp.task('clean:out', () => del(['out']));
107107
108108gulp . task ( 'clean' , gulp . parallel ( 'output:clean' , 'cover:clean' , 'clean:vsix' ) ) ;
109109
110- gulp . task ( 'clean:ptvsd' , ( ) => del ( [ 'coverage' , 'pythonFiles/experimental/ptvsd/*' ] ) ) ;
111-
112110gulp . task ( 'checkNativeDependencies' , ( done ) => {
113111 if ( hasNativeDependencies ( ) ) {
114112 throw new Error ( 'Native dependencies deteced' ) ;
@@ -202,11 +200,32 @@ gulp.task('webpack', async () => {
202200gulp . task ( 'prePublishBundle' , gulp . series ( 'checkNativeDependencies' , 'check-datascience-dependencies' , 'compile' , 'clean:cleanExceptTests' , 'webpack' ) ) ;
203201gulp . task ( 'prePublishNonBundle' , gulp . series ( 'checkNativeDependencies' , 'check-datascience-dependencies' , 'compile' , 'compile-webviews' ) ) ;
204202
203+ const installPythonLibArgs = [ '-m' , 'pip' , '--disable-pip-version-check' , 'install' ,
204+ '-t' , './pythonFiles/lib/python' , '--no-cache-dir' , '--implementation' , 'py' , '--no-deps' ,
205+ '--upgrade' , '-r' , 'requirements.txt' ] ;
206+ gulp . task ( 'installPythonLibs' , async ( ) => {
207+ const requirements = fs . readFileSync ( path . join ( __dirname , 'requirements.txt' ) , 'utf8' ) . split ( '\n' ) . map ( item => item . trim ( ) ) . filter ( item => item . length > 0 ) ;
208+ const args = [ '-m' , 'pip' , '--disable-pip-version-check' , 'install' , '-t' , './pythonFiles/lib/python' , '--no-cache-dir' , '--implementation' , 'py' , '--no-deps' , '--upgrade' ] ;
209+ await Promise . all ( requirements . map ( async requirement => {
210+ const success = await spawnAsync ( process . env . CI_PYTHON_PATH || 'python3' , args . concat ( requirement ) )
211+ . then ( ( ) => true )
212+ . catch ( ex => {
213+ console . error ( 'Failed to install Python Libs using \'python3\'' , ex ) ;
214+ return false
215+ } ) ;
216+ if ( ! success ) {
217+ console . info ( 'Failed to install Python Libs using \'python3\', attempting to install using \'python\'' ) ;
218+ await spawnAsync ( 'python' , args . concat ( requirement ) )
219+ . catch ( ex => console . error ( 'Failed to install Python Libs using \'python\'' , ex ) ) ;
220+ }
221+ } ) ) ;
222+ } ) ;
223+
205224function spawnAsync ( command , args ) {
206225 return new Promise ( ( resolve , reject ) => {
207226 const proc = spawn ( command , args , { cwd : __dirname } ) ;
208227 proc . stdout . on ( 'data' , data => {
209- // Log output on CI.
228+ // Log output on CI (else travis times out when there's not output) .
210229 if ( isCI ) {
211230 console . log ( data . toString ( ) ) ;
212231 }
0 commit comments