tasks.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /**
  2. * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
  3. * For licensing, see LICENSE.md.
  4. */
  5. 'use strict';
  6. const gulp = require( 'gulp' );
  7. const gutil = require( 'gulp-util' );
  8. const minimist = require( 'minimist' );
  9. const path = require( 'path' );
  10. const merge = require( 'merge-stream' );
  11. const log = require( '../../lib/log' );
  12. const tools = require( '../../lib/tools' );
  13. const git = require( '../../lib/git' );
  14. module.exports = ( config ) => {
  15. const ckeditor5Path = process.cwd();
  16. const packageJSON = require( '../../../package.json' );
  17. // Configure logging.
  18. log.configure(
  19. ( msg ) => gutil.log( msg ),
  20. ( msg ) => gutil.log( gutil.colors.red( msg ) )
  21. );
  22. const tasks = {
  23. execOnRepositories() {
  24. // Omit `gulp exec` part of arguments
  25. const options = minimist( process.argv.slice( 3 ), {
  26. stopEarly: false,
  27. } );
  28. let execTask;
  29. try {
  30. if ( options.task ) {
  31. execTask = require( `./functions/${ options.task }` );
  32. } else {
  33. throw new Error( 'Missing task parameter: --task task-name' );
  34. }
  35. } catch ( error ) {
  36. log.err( error );
  37. }
  38. if ( execTask ) {
  39. return exec( execTask, ckeditor5Path, packageJSON, config.WORKSPACE_DIR, options );
  40. }
  41. },
  42. register() {
  43. gulp.task( 'exec', tasks.execOnRepositories );
  44. }
  45. };
  46. return tasks;
  47. };
  48. /**
  49. * @param {Function} execTask Task to use on each dependency.
  50. * @param {String} ckeditor5Path Path to main CKEditor5 repository.
  51. * @param {Object} packageJSON Parsed package.json file from CKEditor5 repository.
  52. * @param {String} workspaceRoot Relative path to workspace root.
  53. * @param {Object} params Parameters provided to the task via command-line.
  54. */
  55. function exec( execTask, ckeditor5Path, packageJSON, workspaceRoot, params ) {
  56. const workspaceAbsolutePath = path.join( ckeditor5Path, workspaceRoot );
  57. // Get all CKEditor dependencies from package.json.
  58. const dependencies = tools.getCKEditorDependencies( packageJSON.dependencies );
  59. const mergedStream = merge();
  60. if ( dependencies ) {
  61. const directories = tools.getCKE5Directories( workspaceAbsolutePath );
  62. if ( directories.length ) {
  63. for ( let dependency in dependencies ) {
  64. const repositoryURL = dependencies[ dependency ];
  65. const urlInfo = git.parseRepositoryUrl( repositoryURL );
  66. const repositoryAbsolutePath = path.join( ckeditor5Path, 'node_modules', dependency );
  67. // Check if repository's directory already exists.
  68. if ( directories.indexOf( urlInfo.name ) > -1 ) {
  69. try {
  70. log.out( `Executing task on ${ repositoryURL }...` );
  71. mergedStream.add( execTask( repositoryAbsolutePath, params ) );
  72. } catch ( error ) {
  73. log.err( error );
  74. }
  75. }
  76. }
  77. } else {
  78. log.out( 'No CKEditor5 plugins in development mode.' );
  79. }
  80. } else {
  81. log.out( 'No CKEditor5 dependencies found in package.json file.' );
  82. }
  83. return mergedStream;
  84. }