gulpfile.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Licensed under the MIT License. See License.txt in the project root for license information.
  4. *--------------------------------------------------------------------------------------------*/
  5. var gulp = require('gulp');
  6. var tsb = require('gulp-tsb');
  7. var assign = require('object-assign');
  8. var fs = require('fs');
  9. var path = require('path');
  10. var merge = require('merge-stream');
  11. var rjs = require('gulp-requirejs');
  12. var uglify = require('gulp-uglify');
  13. var rimraf = require('rimraf');
  14. var es = require('event-stream');
  15. gulp.task('clean-release', function(cb) { rimraf('release', { maxBusyTries: 1 }, cb); });
  16. gulp.task('release', ['clean-release','compile'], function() {
  17. var sha1 = getGitVersion(__dirname);
  18. var semver = require('./package.json').version;
  19. var headerVersion = semver + '(' + sha1 + ')';
  20. var BUNDLED_FILE_HEADER = [
  21. '/*!-----------------------------------------------------------------------------',
  22. ' * Copyright (c) Microsoft Corporation. All rights reserved.',
  23. ' * monaco-languages version: ' + headerVersion,
  24. ' * Released under the MIT license',
  25. ' * https://github.com/Microsoft/monaco-languages/blob/master/LICENSE.md',
  26. ' *-----------------------------------------------------------------------------*/',
  27. ''
  28. ].join('\n');
  29. function bundleOne(moduleId, exclude) {
  30. return rjs({
  31. baseUrl: '/out/',
  32. name: 'vs/basic-languages/' + moduleId,
  33. out: moduleId + '.js',
  34. exclude: exclude,
  35. paths: {
  36. 'vs/basic-languages': __dirname + '/out'
  37. }
  38. })
  39. }
  40. return merge(
  41. bundleOne('src/monaco.contribution'),
  42. bundleOne('src/bat'),
  43. bundleOne('src/css'),
  44. bundleOne('src/coffee'),
  45. bundleOne('src/cpp'),
  46. bundleOne('src/csharp'),
  47. bundleOne('src/dockerfile'),
  48. bundleOne('src/fsharp'),
  49. bundleOne('src/go'),
  50. bundleOne('src/handlebars'),
  51. bundleOne('src/html'),
  52. bundleOne('src/ini'),
  53. bundleOne('src/pug'),
  54. bundleOne('src/java'),
  55. bundleOne('src/less'),
  56. bundleOne('src/lua'),
  57. bundleOne('src/markdown'),
  58. bundleOne('src/msdax'),
  59. bundleOne('src/objective-c'),
  60. bundleOne('src/php'),
  61. bundleOne('src/powershell'),
  62. bundleOne('src/postiats'),
  63. bundleOne('src/python'),
  64. bundleOne('src/r'),
  65. bundleOne('src/razor'),
  66. bundleOne('src/ruby'),
  67. bundleOne('src/scss'),
  68. bundleOne('src/sql'),
  69. bundleOne('src/swift'),
  70. bundleOne('src/vb'),
  71. bundleOne('src/xml'),
  72. bundleOne('src/yaml'),
  73. bundleOne('src/solidity')
  74. )
  75. .pipe(uglify({
  76. output: {
  77. comments: /^!/
  78. }
  79. }))
  80. .pipe(es.through(function(data) {
  81. data.contents = new Buffer(
  82. BUNDLED_FILE_HEADER
  83. + data.contents.toString()
  84. );
  85. this.emit('data', data);
  86. }))
  87. .pipe(gulp.dest('./release/'));
  88. });
  89. var compilation = tsb.create(assign({ verbose: true }, require('./tsconfig.json').compilerOptions));
  90. var tsSources = require('./tsconfig.json').include.concat(require('./tsconfig.json').files);
  91. function compileTask() {
  92. return merge(
  93. gulp.src(tsSources, { base: '.' }).pipe(compilation())
  94. )
  95. .pipe(gulp.dest('out'));
  96. }
  97. gulp.task('clean-out', function(cb) { rimraf('out', { maxBusyTries: 1 }, cb); });
  98. gulp.task('compile', ['clean-out'], compileTask);
  99. gulp.task('compile-without-clean', compileTask);
  100. gulp.task('watch', ['compile'], function() {
  101. gulp.watch(tsSources, ['compile-without-clean']);
  102. });
  103. function getGitVersion(repo) {
  104. var git = path.join(repo, '.git');
  105. var headPath = path.join(git, 'HEAD');
  106. var head;
  107. try {
  108. head = fs.readFileSync(headPath, 'utf8').trim();
  109. } catch (e) {
  110. return void 0;
  111. }
  112. if (/^[0-9a-f]{40}$/i.test(head)) {
  113. return head;
  114. }
  115. var refMatch = /^ref: (.*)$/.exec(head);
  116. if (!refMatch) {
  117. return void 0;
  118. }
  119. var ref = refMatch[1];
  120. var refPath = path.join(git, ref);
  121. try {
  122. return fs.readFileSync(refPath, 'utf8').trim();
  123. } catch (e) {
  124. // noop
  125. }
  126. var packedRefsPath = path.join(git, 'packed-refs');
  127. var refsRaw;
  128. try {
  129. refsRaw = fs.readFileSync(packedRefsPath, 'utf8').trim();
  130. } catch (e) {
  131. return void 0;
  132. }
  133. var refsRegex = /^([0-9a-f]{40})\s+(.+)$/gm;
  134. var refsMatch;
  135. var refs = {};
  136. while (refsMatch = refsRegex.exec(refsRaw)) {
  137. refs[refsMatch[2]] = refsMatch[1];
  138. }
  139. return refs[ref];
  140. }