diff --git a/gulpfile.js b/gulpfile.js index 2024412a..db75e032 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -14,6 +14,9 @@ const root = __dirname; gulp.task('install.all', 'Install dependencies for all subdirectory packages', ['js.core.install', 'native.core.install', 'health-check.install']); +gulp.task('install.all.windows', 'Install dependencies for all subdirectory packages for MS Windows', + ['js.core.install', 'native.core.install.windows', 'health-check.install']); + gulp.task('lint', 'Emit linting errors in source and test files', ['js.core.lint', 'native.core.lint']); @@ -30,7 +33,12 @@ gulp.task('link', 'Link local packages together after building', gulp.start('link.only'); }); -gulp.task('setup', 'One-time setup for a clean repository', ['install.all', 'link']); +gulp.task('setup', 'One-time setup for a clean repository', ['install.all'], () => { + gulp.start('link'); +}); +gulp.task('setup.windows', 'One-time setup for a clean repository for MS Windows', ['install.all.windows'], () => { + gulp.start('link'); +}); gulp.task('clean', 'Delete generated files', ['js.core.clean', 'native.core.clean']); diff --git a/install-nvm-windows.ps1 b/install-nvm-windows.ps1 new file mode 100644 index 00000000..709a1ec2 --- /dev/null +++ b/install-nvm-windows.ps1 @@ -0,0 +1,26 @@ +# Copyright 2017 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# We're going to store nvm-windows in the .\nvm directory. +$env:NVM_HOME = (Get-Item -Path ".\" -Verbose).FullName + "\nvm" + +# Downloading and unpacking nvm-windows +Invoke-WebRequest -Uri https://github.com/coreybutler/nvm-windows/releases/download/1.1.5/nvm-noinstall.zip -OutFile nvm-noinstall.zip +Add-Type -AssemblyName System.IO.Compression.FileSystem +[System.IO.Compression.ZipFile]::ExtractToDirectory("nvm-noinstall.zip", "nvm") + +$env:Path = $env:NVM_HOME + ";" + $env:Path +Out-File -Encoding "OEM" nvm\settings.txt +nvm root $env:NVM_HOME +"%*" | Out-File -Encoding "OEM" nvm\elevate.cmd diff --git a/kokoro.bat b/kokoro.bat new file mode 100644 index 00000000..fc5fd8b2 --- /dev/null +++ b/kokoro.bat @@ -0,0 +1,22 @@ +@rem Copyright 2017 gRPC authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem http://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. + +@echo "Starting Windows test" + +cd /d %~dp0 + +git submodule update --init +git submodule foreach --recursive git submodule update --init + +.\run-tests.bat diff --git a/packages/grpc-native-core/gulpfile.js b/packages/grpc-native-core/gulpfile.js index 7d85cf5b..07fadde8 100644 --- a/packages/grpc-native-core/gulpfile.js +++ b/packages/grpc-native-core/gulpfile.js @@ -30,7 +30,16 @@ gulp.task('native.core.install', 'Install native core dependencies', () => { {cwd: nativeCoreDir, stdio: 'inherit'}); }); -gulp.task('native.core.link.create', 'Create npm link', ['native.core.install'], () => { +gulp.task('native.core.install.windows', 'Install native core dependencies for MS Windows', () => { + return execa('npm', ['install', '--build-from-source'], + {cwd: nativeCoreDir, stdio: 'inherit'}).catch(() => +del(path.resolve(process.env.USERPROFILE, '.node-gyp', process.versions.node, 'include/node/openssl'), { force: true }).then(() => +execa('npm', ['install', '--build-from-source'], + {cwd: nativeCoreDir, stdio: 'inherit'}) + )) +}); + +gulp.task('native.core.link.create', 'Create npm link', () => { return execa('npm', ['link'], {cwd: nativeCoreDir, stdio: 'inherit'}); }); @@ -41,7 +50,7 @@ gulp.task('native.core.lint', 'Emits linting errors', () => { }); gulp.task('native.core.build', 'Build native package', () => { - return execa('node-pre-gyp', ['build'], {cwd: nativeCoreDir, stdio: 'inherit'}); + return execa('npm', ['run', 'build'], {cwd: nativeCoreDir, stdio: 'inherit'}); }); gulp.task('native.core.test', 'Run all tests', ['native.core.build'], () => { diff --git a/packages/grpc-native-core/package.json b/packages/grpc-native-core/package.json index 19828430..6ad9013b 100644 --- a/packages/grpc-native-core/package.json +++ b/packages/grpc-native-core/package.json @@ -21,6 +21,7 @@ "scripts": { "lint": "node ./node_modules/jshint/bin/jshint src test index.js --exclude-path=.jshintignore", "test": "./node_modules/.bin/mocha test && npm run-script lint", + "build": "./node_modules/.bin/node-pre-gyp build", "electron-build": "./node_modules/.bin/node-pre-gyp configure build --runtime=electron --disturl=https://atom.io/download/atom-shell", "gen_docs": "./node_modules/.bin/jsdoc -c jsdoc_conf.json", "coverage": "./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha test", diff --git a/run-tests.bat b/run-tests.bat new file mode 100644 index 00000000..207efed2 --- /dev/null +++ b/run-tests.bat @@ -0,0 +1,46 @@ +@rem Copyright 2017 gRPC authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem http://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. + +SET ROOT=%~dp0 +cd /d %~dp0 + +PowerShell -Command .\install-nvm-windows.ps1 + +SET NVM_HOME=%ROOT%nvm +SET NVM_SYMLINK=%ROOT%nvm\nodejs +SET PATH=%NVM_HOME%;%NVM_SYMLINK%;%PATH% + +nvm version + +nvm install 8.5.0 +nvm use 8.5.0 + +call npm install || goto :error + +for %%v in (4.8.4 6.11.3 7.9.0 8.5.0) do ( + nvm install %%v + nvm use %%v + node -e "console.log(process.versions)" + + call .\node_modules\.bin\gulp clean.all || goto :error + call .\node_modules\.bin\gulp setup.windows || goto :error + call .\node_modules\.bin\gulp native.test || goto :error +) + +if %errorlevel% neq 0 exit /b %errorlevel% + +goto :EOF + +:error +exit /b 1 diff --git a/run-tests.sh b/run-tests.sh index bafed9bd..c1a76889 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -36,7 +36,6 @@ nvm use lts/* set -ex npm install --unsafe-perm -./node_modules/.bin/gulp setup mkdir -p reports @@ -55,7 +54,7 @@ do # Install dependencies and link packages together. ./node_modules/.bin/gulp clean.all - ./node_modules/.bin/gulp link + ./node_modules/.bin/gulp setup # Rebuild libraries and run tests. JUNIT_REPORT_PATH="reports/node$version/" JUNIT_REPORT_STACK=1 ./node_modules/.bin/gulp native.test || FAILED="true" diff --git a/test/kokoro/windows.cfg b/test/kokoro/windows.cfg new file mode 100644 index 00000000..e4a4524b --- /dev/null +++ b/test/kokoro/windows.cfg @@ -0,0 +1,19 @@ +# Copyright 2017 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Config file for Kokoro (in protobuf text format) + +# Location of the continuous shell script in repository. +build_file: "grpc-node/kokoro.bat" +timeout_mins: 60