microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0.5.2

Branches

Tags

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

Clone

HTTPS

Download ZIP

gulpfile.js

232lines · 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");
3fb37ad5unknown10 years ago11var runSequence = require("run-sequence");
62b110e3Dmitry Zinovyev9 years ago12var ts = require("gulp-typescript");
13var mocha = require("gulp-mocha");
9adec70dJoshua Skelton10 years ago14var GulpExtras = require("./tools/gulp-extras");
62b110e3Dmitry Zinovyev9 years ago15var minimist = require("minimist");
92f13422Jimmy Thomson9 years ago16var os = require("os");
17var fs = require("fs");
18var Q = require("q");
28d84585Vladimir Kotikov8 years ago19var remapIstanbul = require('remap-istanbul/lib/gulpRemapIstanbul');
572cd3badigeff10 years ago20
9adec70dJoshua Skelton10 years ago21var copyright = GulpExtras.checkCopyright;
22var imports = GulpExtras.checkImports;
7212311dDaniel Lebu10 years ago23var executeCommand = GulpExtras.executeCommand;
8ba55f4cJimmy Thomson10 years ago24
62b110e3Dmitry Zinovyev9 years ago25var srcPath = "src";
3c172a05Artem Egorov8 years ago26var testPath = "test";
89973b41dlebu10 years ago27
8ba55f4cJimmy Thomson10 years ago28var sources = [
89973b41dlebu10 years ago29srcPath,
3c172a05Artem Egorov8 years ago30testPath,
31].map(function (tsFolder) { return tsFolder + "/**/*.ts"; });
8ba55f4cJimmy Thomson10 years ago32
572cd3badigeff10 years ago33var knownOptions = {
62b110e3Dmitry Zinovyev9 years ago34string: "env",
35default: { env: "production" }
572cd3badigeff10 years ago36};
37
38var options = minimist(process.argv.slice(2), knownOptions);
39
3aa3017bDmitry Zinovyev9 years ago40var tsProject = ts.createProject("tsconfig.json");
41
c55d31ecdigeff10 years ago42// TODO: The file property should point to the generated source (this implementation adds an extra folder to the path)
43// We should also make sure that we always generate urls in all the path properties (We shouldn't have \\s. This seems to
44// be an issue on Windows platforms)
3aa3017bDmitry Zinovyev9 years ago45gulp.task("build", ["check-imports", "check-copyright"], build);
46
47gulp.task("quick-build", build);
48
49function build(callback) {
62b110e3Dmitry Zinovyev9 years ago50var tsProject = ts.createProject("tsconfig.json");
51var isProd = options.env === "production";
cc7a6803digeff10 years ago52var preprocessorContext = isProd ? { PROD: true } : { DEBUG: true };
572cd3badigeff10 years ago53log(`Building with preprocessor context: ${JSON.stringify(preprocessorContext)}`);
8ba55f4cJimmy Thomson10 years ago54return tsProject.src()
9c1d0f41digeff10 years ago55.pipe(preprocess({ context: preprocessorContext })) //To set environment variables in-line
8ba55f4cJimmy Thomson10 years ago56.pipe(sourcemaps.init())
6d5c8798Nikita Matrosov9 years ago57.pipe(tsProject())
62b110e3Dmitry Zinovyev9 years ago58.on("error", function (e) {
d63a3130digeff10 years ago59callback(e);
60})
62b110e3Dmitry Zinovyev9 years ago61.pipe(sourcemaps.write(".", {
c55d31ecdigeff10 years ago62includeContent: false,
8bb73579Dmitry Zinovyev9 years ago63sourceRoot: "."
c55d31ecdigeff10 years ago64}))
678db279Artem Egorov8 years ago65.pipe(gulp.dest(function (file) {
66return file.cwd;
67}));
3aa3017bDmitry Zinovyev9 years ago68}
8ba55f4cJimmy Thomson10 years ago69
62b110e3Dmitry Zinovyev9 years ago70gulp.task("watch", ["build"], function (cb) {
71log("Watching build sources...");
72return gulp.watch(sources, ["build"]);
8ba55f4cJimmy Thomson10 years ago73});
74
62b110e3Dmitry Zinovyev9 years ago75gulp.task("default", function (callback) {
89973b41dlebu10 years ago76runSequence("clean", "build", "tslint", callback);
3fb37ad5unknown10 years ago77});
8ba55f4cJimmy Thomson10 years ago78
79var lintSources = [
89973b41dlebu10 years ago80srcPath,
3c172a05Artem Egorov8 years ago81testPath
62b110e3Dmitry Zinovyev9 years ago82].map(function (tsFolder) { return tsFolder + "/**/*.ts"; });
3fde2079Jimmy Thomson10 years ago83lintSources = lintSources.concat([
62b110e3Dmitry Zinovyev9 years ago84"!src/typings/**",
3c172a05Artem Egorov8 years ago85"!test/resources/sampleReactNative022Project/**",
3fde2079Jimmy Thomson10 years ago86]);
8ba55f4cJimmy Thomson10 years ago87
27710197Vladimir Kotikov8 years ago88var libtslint = require("tslint");
62b110e3Dmitry Zinovyev9 years ago89var tslint = require("gulp-tslint");
90gulp.task("tslint", function () {
27710197Vladimir Kotikov8 years ago91var program = libtslint.Linter.createProgram("./tsconfig.json");
62b110e3Dmitry Zinovyev9 years ago92return gulp.src(lintSources, { base: "." })
27710197Vladimir Kotikov8 years ago93.pipe(tslint({
94formatter: "verbose",
95program: program
96}))
97.pipe(tslint.report());
8ba55f4cJimmy Thomson10 years ago98});
99
100function test() {
211ffe84digeff10 years ago101// Check if arguments were passed
572081b0Mark Oswald10 years ago102if (options.pattern) {
103console.log("\nTesting cases that match pattern: " + options.pattern);
7d22ec66digeff10 years ago104} else {
572081b0Mark Oswald10 years ago105console.log("\nTesting cases that don't match pattern: extensionContext");
211ffe84digeff10 years ago106}
107
678db279Artem Egorov8 years ago108return gulp.src(["test/**/*.test.js", "!test/extension/**"])
d500558fJimmy Thomson10 years ago109.pipe(mocha({
62b110e3Dmitry Zinovyev9 years ago110ui: "tdd",
d500558fJimmy Thomson10 years ago111useColors: true,
572081b0Mark Oswald10 years ago112invert: !options.pattern,
113grep: options.pattern || "extensionContext"
d500558fJimmy Thomson10 years ago114}));
8ba55f4cJimmy Thomson10 years ago115}
116
62b110e3Dmitry Zinovyev9 years ago117gulp.task("test", ["build", "tslint"], test);
28d84585Vladimir Kotikov8 years ago118
119gulp.task('coverage:instrument', function () {
678db279Artem Egorov8 years ago120return gulp.src(["src/**/*.js", "!test/**"])
28d84585Vladimir Kotikov8 years ago121.pipe(istanbul({
122// Use the isparta instrumenter (code coverage for ES6)
123instrumenter: isparta.Instrumenter,
124includeUntested: true
125}))
126// Force `require` to return covered files
127.pipe(istanbul.hookRequire());
128});
129
130gulp.task('coverage:report', function (done) {
131return gulp.src(
678db279Artem Egorov8 years ago132["src/**/*.js", "!test/**"],
28d84585Vladimir Kotikov8 years ago133{ read: false }
134)
135.pipe(istanbul.writeReports({
297822a1Vladimir Kotikov8 years ago136reporters: ['json', 'text-summary']
28d84585Vladimir Kotikov8 years ago137}));
138});
139
140gulp.task('coverage:remap', function () {
141return gulp.src('coverage/coverage-final.json')
142.pipe(remapIstanbul({
143reports: {
144'json': 'coverage/coverage.json',
145'html': 'coverage/html-report'
146}
147}));
148});
149
150gulp.task("test:coverage", function (done) {
151runSequence("quick-build", 'coverage:instrument',
152"test-no-build", 'coverage:report', 'coverage:remap', done);
153});
154
62b110e3Dmitry Zinovyev9 years ago155gulp.task("test-no-build", test);
8ba55f4cJimmy Thomson10 years ago156
62b110e3Dmitry Zinovyev9 years ago157gulp.task("check-imports", function (cb) {
9adec70dJoshua Skelton10 years ago158return tsProject.src()
159.pipe(imports());
7d0d8776digeff10 years ago160});
161
62b110e3Dmitry Zinovyev9 years ago162gulp.task("check-copyright", function (cb) {
a3fd5ee9Joshua Skelton10 years ago163return gulp.src([
9c1d0f41digeff10 years ago164"**/*.ts",
165"**/*.js",
166"!**/*.d.ts",
2331a749Vladimir Kotikov8 years ago167"!coverage/**",
0fc1f1deJimmy Thomson9 years ago168"!node_modules/**",
678db279Artem Egorov8 years ago169"!test/**/*.js",
0fc1f1deJimmy Thomson9 years ago170"!SampleApplication/**",
3c172a05Artem Egorov8 years ago171"!test/resources/sampleReactNative022Project/**/*.js",
9c1d0f41digeff10 years ago172])
9adec70dJoshua Skelton10 years ago173.pipe(copyright());
7d0d8776digeff10 years ago174});
379834c9Jimmy Thomson10 years ago175
62b110e3Dmitry Zinovyev9 years ago176gulp.task("watch-build-test", ["build", "build-test"], function () {
177return gulp.watch(sources, ["build", "build-test"]);
8ba55f4cJimmy Thomson10 years ago178});
89973b41dlebu10 years ago179
ee16550eGuillaume Jenkins10 years ago180gulp.task("clean", function () {
89973b41dlebu10 years ago181var del = require("del");
ee16550eGuillaume Jenkins10 years ago182var pathsToDelete = [
678db279Artem Egorov8 years ago183"src/**/*.js",
184"src/**/*.js.map",
185"test/**/*.js",
186"test/**/*.js.map",
187"out/",
188"!test/resources/sampleReactNative022Project/**/*.js",
189".vscode-test/",
190]
ee16550eGuillaume Jenkins10 years ago191return del(pathsToDelete, { force: true });
8edb50b4Jimmy Thomson10 years ago192});
7212311dDaniel Lebu10 years ago193
194gulp.task("package", function (callback) {
92f13422Jimmy Thomson9 years ago195var command = path.join(__dirname, "node_modules", ".bin", "vsce");
7212311dDaniel Lebu10 years ago196var args = ["package"];
197executeCommand(command, args, callback);
92f13422Jimmy Thomson9 years ago198});
199
200gulp.task("release", ["build"], function () {
201var licenseFiles = ["LICENSE.txt", "ThirdPartyNotices.txt"];
62b110e3Dmitry Zinovyev9 years ago202var backupFolder = path.resolve(path.join(os.tmpdir(), "vscode-react-native"));
92f13422Jimmy Thomson9 years ago203if (!fs.existsSync(backupFolder)) {
204fs.mkdirSync(backupFolder);
205}
206
207return Q({})
208.then(function () {
209/* back up LICENSE.txt, ThirdPartyNotices.txt, README.md */
210console.log("Backing up license files to " + backupFolder + "...");
211licenseFiles.forEach(function (fileName) {
212fs.writeFileSync(path.join(backupFolder, fileName), fs.readFileSync(fileName));
213});
214
215/* copy over the release package license files */
216console.log("Preparing license files for release...");
62b110e3Dmitry Zinovyev9 years ago217fs.writeFileSync("LICENSE.txt", fs.readFileSync("release/LICENSE.txt"));
218fs.writeFileSync("ThirdPartyNotices.txt", fs.readFileSync("release/ThirdPartyNotices.txt"));
3aa3017bDmitry Zinovyev9 years ago219}).then(() => {
92f13422Jimmy Thomson9 years ago220console.log("Creating release package...");
221var deferred = Q.defer();
222// NOTE: vsce must see npm 3.X otherwise it will not correctly strip out dev dependencies.
3aa3017bDmitry Zinovyev9 years ago223executeCommand("vsce", ["package"], function (arg) { if (arg) { deferred.reject(arg); } deferred.resolve() }, { cwd: path.resolve(__dirname) });
92f13422Jimmy Thomson9 years ago224return deferred.promise;
225}).finally(function () {
226/* restore backed up files */
227console.log("Restoring modified files...");
228licenseFiles.forEach(function (fileName) {
229fs.writeFileSync(path.join(__dirname, fileName), fs.readFileSync(path.join(backupFolder, fileName)));
230});
231});
297822a1Vladimir Kotikov8 years ago232})