8
0

tasks.js 2.7 KB

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