microsoft/vscode-react-native

Public

mirrored from https://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0.6.0

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

gulpfile.js

249lines · modeblame

b8ecee4ddigeff10 years ago1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for details.
8ba55f4cJimmy Thomson10 years ago3
62b110e3Dmitry Zinovyev9 years ago4var gulp = require("gulp");
5var log = require("gulp-util").log;
28d84585Vladimir Kotikov8 years ago6var istanbul = require('gulp-istanbul');
7var isparta = require('isparta');
62b110e3Dmitry Zinovyev9 years ago8var sourcemaps = require("gulp-sourcemaps");
9var path = require("path");
10var preprocess = require("gulp-preprocess");
07edfe91Sergey Akhalkov8 years ago11var install = require("gulp-install");
3fb37ad5unknown10 years ago12var runSequence = require("run-sequence");
62b110e3Dmitry Zinovyev9 years ago13var ts = require("gulp-typescript");
14var mocha = require("gulp-mocha");
9adec70dJoshua Skelton10 years ago15var GulpExtras = require("./tools/gulp-extras");
62b110e3Dmitry Zinovyev9 years ago16var minimist = require("minimist");
92f13422Jimmy Thomson9 years ago17var os = require("os");
18var fs = require("fs");
19var Q = require("q");
28d84585Vladimir Kotikov8 years ago20var remapIstanbul = require('remap-istanbul/lib/gulpRemapIstanbul');
3b6f5f91Sergey Akhalkov8 years ago21var execSync = require('child_process').execSync;
572cd3badigeff10 years ago22
9adec70dJoshua Skelton10 years ago23var copyright = GulpExtras.checkCopyright;
24var imports = GulpExtras.checkImports;
7212311dDaniel Lebu10 years ago25var executeCommand = GulpExtras.executeCommand;
8ba55f4cJimmy Thomson10 years ago26
936ae21cmax-mironov8 years ago27
62b110e3Dmitry Zinovyev9 years ago28var srcPath = "src";
3c172a05Artem Egorov8 years ago29var testPath = "test";
89973b41dlebu10 years ago30
8ba55f4cJimmy Thomson10 years ago31var sources = [
89973b41dlebu10 years ago32srcPath,
3c172a05Artem Egorov8 years ago33testPath,
34].map(function (tsFolder) { return tsFolder + "/**/*.ts"; });
8ba55f4cJimmy Thomson10 years ago35
572cd3badigeff10 years ago36var knownOptions = {
62b110e3Dmitry Zinovyev9 years ago37string: "env",
38default: { env: "production" }
572cd3badigeff10 years ago39};
40
41var options = minimist(process.argv.slice(2), knownOptions);
42
3aa3017bDmitry Zinovyev9 years ago43var tsProject = ts.createProject("tsconfig.json");
44
c55d31ecdigeff10 years ago45// TODO: The file property should point to the generated source (this implementation adds an extra folder to the path)
46// We should also make sure that we always generate urls in all the path properties (We shouldn't have \\s. This seems to
47// be an issue on Windows platforms)
3aa3017bDmitry Zinovyev9 years ago48gulp.task("build", ["check-imports", "check-copyright"], build);
49
50gulp.task("quick-build", build);
51
52function build(callback) {
62b110e3Dmitry Zinovyev9 years ago53var tsProject = ts.createProject("tsconfig.json");
54var isProd = options.env === "production";
cc7a6803digeff10 years ago55var preprocessorContext = isProd ? { PROD: true } : { DEBUG: true };
572cd3badigeff10 years ago56log(`Building with preprocessor context: ${JSON.stringify(preprocessorContext)}`);
8ba55f4cJimmy Thomson10 years ago57return tsProject.src()
9c1d0f41digeff10 years ago58.pipe(preprocess({ context: preprocessorContext })) //To set environment variables in-line
8ba55f4cJimmy Thomson10 years ago59.pipe(sourcemaps.init())
6d5c8798Nikita Matrosov9 years ago60.pipe(tsProject())
62b110e3Dmitry Zinovyev9 years ago61.on("error", function (e) {
d63a3130digeff10 years ago62callback(e);
63})
62b110e3Dmitry Zinovyev9 years ago64.pipe(sourcemaps.write(".", {
c55d31ecdigeff10 years ago65includeContent: false,
8bb73579Dmitry Zinovyev9 years ago66sourceRoot: "."
c55d31ecdigeff10 years ago67}))
678db279Artem Egorov8 years ago68.pipe(gulp.dest(function (file) {
69return file.cwd;
70}));
3aa3017bDmitry Zinovyev9 years ago71}
8ba55f4cJimmy Thomson10 years ago72
62b110e3Dmitry Zinovyev9 years ago73gulp.task("watch", ["build"], function (cb) {
74log("Watching build sources...");
75return gulp.watch(sources, ["build"]);
8ba55f4cJimmy Thomson10 years ago76});
77
62b110e3Dmitry Zinovyev9 years ago78gulp.task("default", function (callback) {
89973b41dlebu10 years ago79runSequence("clean", "build", "tslint", callback);
3fb37ad5unknown10 years ago80});
8ba55f4cJimmy Thomson10 years ago81
82var lintSources = [
89973b41dlebu10 years ago83srcPath,
3c172a05Artem Egorov8 years ago84testPath
62b110e3Dmitry Zinovyev9 years ago85].map(function (tsFolder) { return tsFolder + "/**/*.ts"; });
3fde2079Jimmy Thomson10 years ago86lintSources = lintSources.concat([
62b110e3Dmitry Zinovyev9 years ago87"!src/typings/**",
3c172a05Artem Egorov8 years ago88"!test/resources/sampleReactNative022Project/**",
ba841d7fSergey Akhalkov8 years ago89"!src/extension/appcenter/lib/**"
3fde2079Jimmy Thomson10 years ago90]);
8ba55f4cJimmy Thomson10 years ago91
27710197Vladimir Kotikov8 years ago92var libtslint = require("tslint");
62b110e3Dmitry Zinovyev9 years ago93var tslint = require("gulp-tslint");
94gulp.task("tslint", function () {
27710197Vladimir Kotikov8 years ago95var program = libtslint.Linter.createProgram("./tsconfig.json");
62b110e3Dmitry Zinovyev9 years ago96return gulp.src(lintSources, { base: "." })
27710197Vladimir Kotikov8 years ago97.pipe(tslint({
98formatter: "verbose",
99program: program
100}))
101.pipe(tslint.report());
8ba55f4cJimmy Thomson10 years ago102});
103
104function test() {
211ffe84digeff10 years ago105// Check if arguments were passed
572081b0Mark Oswald10 years ago106if (options.pattern) {
107console.log("\nTesting cases that match pattern: " + options.pattern);
7d22ec66digeff10 years ago108} else {
572081b0Mark Oswald10 years ago109console.log("\nTesting cases that don't match pattern: extensionContext");
211ffe84digeff10 years ago110}
111
678db279Artem Egorov8 years ago112return gulp.src(["test/**/*.test.js", "!test/extension/**"])
d500558fJimmy Thomson10 years ago113.pipe(mocha({
62b110e3Dmitry Zinovyev9 years ago114ui: "tdd",
d500558fJimmy Thomson10 years ago115useColors: true,
572081b0Mark Oswald10 years ago116invert: !options.pattern,
117grep: options.pattern || "extensionContext"
d500558fJimmy Thomson10 years ago118}));
8ba55f4cJimmy Thomson10 years ago119}
120
62b110e3Dmitry Zinovyev9 years ago121gulp.task("test", ["build", "tslint"], test);
28d84585Vladimir Kotikov8 years ago122
123gulp.task('coverage:instrument', function () {
936ae21cmax-mironov8 years ago124return gulp.src(["src/**/*.js", "!test/**", "!src/extension/appcenter/lib/**"])
28d84585Vladimir Kotikov8 years ago125.pipe(istanbul({
126// Use the isparta instrumenter (code coverage for ES6)
127instrumenter: isparta.Instrumenter,
128includeUntested: true
129}))
130// Force `require` to return covered files
131.pipe(istanbul.hookRequire());
132});
133
134gulp.task('coverage:report', function (done) {
135return gulp.src(
936ae21cmax-mironov8 years ago136["src/**/*.js", "!test/**", "!src/extension/appcenter/lib/**"],
28d84585Vladimir Kotikov8 years ago137{ read: false }
138)
139.pipe(istanbul.writeReports({
297822a1Vladimir Kotikov8 years ago140reporters: ['json', 'text-summary']
28d84585Vladimir Kotikov8 years ago141}));
142});
143
144gulp.task('coverage:remap', function () {
145return gulp.src('coverage/coverage-final.json')
146.pipe(remapIstanbul({
147reports: {
148'json': 'coverage/coverage.json',
149'html': 'coverage/html-report'
150}
151}));
152});
153
154gulp.task("test:coverage", function (done) {
155runSequence("quick-build", 'coverage:instrument',
156"test-no-build", 'coverage:report', 'coverage:remap', done);
157});
158
62b110e3Dmitry Zinovyev9 years ago159gulp.task("test-no-build", test);
8ba55f4cJimmy Thomson10 years ago160
62b110e3Dmitry Zinovyev9 years ago161gulp.task("check-imports", function (cb) {
9adec70dJoshua Skelton10 years ago162return tsProject.src()
163.pipe(imports());
7d0d8776digeff10 years ago164});
165
62b110e3Dmitry Zinovyev9 years ago166gulp.task("check-copyright", function (cb) {
a3fd5ee9Joshua Skelton10 years ago167return gulp.src([
9c1d0f41digeff10 years ago168"**/*.ts",
169"**/*.js",
170"!**/*.d.ts",
2331a749Vladimir Kotikov8 years ago171"!coverage/**",
0fc1f1deJimmy Thomson9 years ago172"!node_modules/**",
4b37483dmax-mironov8 years ago173"!lib/**",
678db279Artem Egorov8 years ago174"!test/**/*.js",
0fc1f1deJimmy Thomson9 years ago175"!SampleApplication/**",
3c172a05Artem Egorov8 years ago176"!test/resources/sampleReactNative022Project/**/*.js",
ba841d7fSergey Akhalkov8 years ago177"!src/extension/appcenter/lib/**",
9c1d0f41digeff10 years ago178])
9adec70dJoshua Skelton10 years ago179.pipe(copyright());
7d0d8776digeff10 years ago180});
379834c9Jimmy Thomson10 years ago181
62b110e3Dmitry Zinovyev9 years ago182gulp.task("watch-build-test", ["build", "build-test"], function () {
183return gulp.watch(sources, ["build", "build-test"]);
8ba55f4cJimmy Thomson10 years ago184});
89973b41dlebu10 years ago185
ee16550eGuillaume Jenkins10 years ago186gulp.task("clean", function () {
89973b41dlebu10 years ago187var del = require("del");
ee16550eGuillaume Jenkins10 years ago188var pathsToDelete = [
678db279Artem Egorov8 years ago189"src/**/*.js",
190"src/**/*.js.map",
191"test/**/*.js",
192"test/**/*.js.map",
193"out/",
194"!test/resources/sampleReactNative022Project/**/*.js",
195".vscode-test/",
ba841d7fSergey Akhalkov8 years ago196"!src/extension/appcenter/lib/**/*.js",
678db279Artem Egorov8 years ago197]
ee16550eGuillaume Jenkins10 years ago198return del(pathsToDelete, { force: true });
8edb50b4Jimmy Thomson10 years ago199});
7212311dDaniel Lebu10 years ago200
201gulp.task("package", function (callback) {
92f13422Jimmy Thomson9 years ago202var command = path.join(__dirname, "node_modules", ".bin", "vsce");
7212311dDaniel Lebu10 years ago203var args = ["package"];
204executeCommand(command, args, callback);
92f13422Jimmy Thomson9 years ago205});
206
207gulp.task("release", ["build"], function () {
208var licenseFiles = ["LICENSE.txt", "ThirdPartyNotices.txt"];
62b110e3Dmitry Zinovyev9 years ago209var backupFolder = path.resolve(path.join(os.tmpdir(), "vscode-react-native"));
92f13422Jimmy Thomson9 years ago210if (!fs.existsSync(backupFolder)) {
211fs.mkdirSync(backupFolder);
212}
213
214return Q({})
215.then(function () {
216/* back up LICENSE.txt, ThirdPartyNotices.txt, README.md */
217console.log("Backing up license files to " + backupFolder + "...");
218licenseFiles.forEach(function (fileName) {
219fs.writeFileSync(path.join(backupFolder, fileName), fs.readFileSync(fileName));
220});
221
222/* copy over the release package license files */
223console.log("Preparing license files for release...");
62b110e3Dmitry Zinovyev9 years ago224fs.writeFileSync("LICENSE.txt", fs.readFileSync("release/LICENSE.txt"));
225fs.writeFileSync("ThirdPartyNotices.txt", fs.readFileSync("release/ThirdPartyNotices.txt"));
3aa3017bDmitry Zinovyev9 years ago226}).then(() => {
92f13422Jimmy Thomson9 years ago227console.log("Creating release package...");
228var deferred = Q.defer();
229// NOTE: vsce must see npm 3.X otherwise it will not correctly strip out dev dependencies.
3aa3017bDmitry Zinovyev9 years ago230executeCommand("vsce", ["package"], function (arg) { if (arg) { deferred.reject(arg); } deferred.resolve() }, { cwd: path.resolve(__dirname) });
92f13422Jimmy Thomson9 years ago231return deferred.promise;
232}).finally(function () {
233/* restore backed up files */
234console.log("Restoring modified files...");
235licenseFiles.forEach(function (fileName) {
236fs.writeFileSync(path.join(__dirname, fileName), fs.readFileSync(path.join(backupFolder, fileName)));
237});
238});
07edfe91Sergey Akhalkov8 years ago239});
240
3b6f5f91Sergey Akhalkov8 years ago241gulp.task("postinstall", function (done) {
242execSync('node ./node_modules/vscode/bin/install');
243
244const packages = [
07edfe91Sergey Akhalkov8 years ago245path.join(__dirname, "src", "extension", "appcenter", "lib", "codepush-node-sdk", "dist", "package.json"),
246];
247return gulp.src(packages)
248.pipe(install());
249});