8
0

tasks.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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 ckeditor5Dirs = require( '../../utils/ckeditor5-dirs' );
  12. /**
  13. * Run task over ckeditor5 repositories.
  14. *
  15. * Example:
  16. * gulp exec --task task-name
  17. *
  18. * Example of running task just for one repository:
  19. * gulp exec --task task-name --repository ckeditor5-utils
  20. *
  21. * @param {Object} config Task runner configuration.
  22. * @returns {Stream} Stream with processed files.
  23. */
  24. module.exports = ( config ) => {
  25. const ckeditor5Path = process.cwd();
  26. const packageJSON = require( '../../../package.json' );
  27. const tasks = {
  28. execOnRepositories() {
  29. // Omit `gulp exec` part of arguments
  30. const parameters = minimist( process.argv.slice( 3 ), {
  31. stopEarly: false,
  32. } );
  33. let task;
  34. try {
  35. if ( parameters.task ) {
  36. task = require( `./functions/${ parameters.task }` );
  37. } else {
  38. throw new Error( 'Missing task parameter: --task task-name' );
  39. }
  40. } catch ( error ) {
  41. log.err( error );
  42. }
  43. return execute( task, ckeditor5Path, packageJSON, config.WORKSPACE_DIR, parameters );
  44. },
  45. register() {
  46. gulp.task( 'exec', tasks.execOnRepositories );
  47. }
  48. };
  49. return tasks;
  50. };
  51. /**
  52. * Execute given task with provided options and command-line parameters.
  53. *
  54. * @param {Function} execTask Task to use on each dependency.
  55. * @param {String} ckeditor5Path Path to main CKEditor5 repository.
  56. * @param {Object} packageJSON Parsed package.json file from CKEditor5 repository.
  57. * @param {String} workspaceRoot Relative path to workspace root.
  58. * @param {Object} parameters Parameters provided to the task via command-line.
  59. * @returns {Stream} Merged stream of processed files.
  60. */
  61. function execute( execTask, ckeditor5Path, packageJSON, workspaceRoot, parameters ) {
  62. const workspacePath = path.join( ckeditor5Path, workspaceRoot );
  63. const mergedStream = merge();
  64. const specificRepository = parameters.repository;
  65. let devDirectories = ckeditor5Dirs.getDevDirectories( workspacePath, packageJSON, ckeditor5Path );
  66. if ( specificRepository ) {
  67. devDirectories = devDirectories.filter( ( dir ) => {
  68. return dir.repositoryURL === `ckeditor/${ specificRepository }`;
  69. } );
  70. }
  71. for ( let dir of devDirectories ) {
  72. try {
  73. log.out( `Executing task on ${ dir.repositoryURL }...` );
  74. mergedStream.add( execTask( dir.repositoryPath, parameters ) );
  75. } catch ( error ) {
  76. log.err( error );
  77. }
  78. }
  79. return mergedStream;
  80. }