diff --git a/gulpfile.js b/gulpfile.js index 8e14ebd744..641e8b6099 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,24 +1,52 @@ const gulp = require('gulp'); -const { execCommand } = require('@joplin/utils'); +const execa = require('execa'); +const { stdout } = require('process'); + +const execCommand = async (executableName, args, options = null) => { + options = { + showInput: true, + showStdout: true, + showStderr: true, + quiet: false, + ...options, + }; + + if (options.quiet) { + options.showInput = false; + options.showStdout = false; + options.showStderr = false; + } + + if (options.showInput) { + stdout.write(`> ${executableName} ${args.join(' ')}\n`); + } + + const promise = execa(executableName, args); + if (options.showStdout && promise.stdout) promise.stdout.pipe(process.stdout); + if (options.showStderr && promise.stderr) promise.stderr.pipe(process.stderr); + const result = await promise; + return result.stdout.trim(); +}; + const tasks = { completePublishAll: { fn: async () => { - await execCommand(['git', 'add', '-A']); - await execCommand(['git', 'commit', '-m', 'Releasing sub-packages']); + await execCommand('git', ['add', '-A']); + await execCommand('git', ['commit', '-m', 'Releasing sub-packages']); // Lerna does some unnecessary auth check that doesn't work with // automation tokens, thus the --no-verify-access. Automation token // is still used for access when publishing even with this flag // (publishing would fail otherwise). // https://github.com/lerna/lerna/issues/2788 - await execCommand(['lerna', 'publish', 'from-package', '-y', '--no-verify-access']); + await execCommand('lerna', ['publish', 'from-package', '-y', '--no-verify-access']); - await execCommand(['yarn', 'install']); - await execCommand(['git', 'add', '-A']); - await execCommand(['git', 'commit', '-m', 'Lock file']); + await execCommand('yarn', ['install']); + await execCommand('git', ['add', '-A']); + await execCommand('git', ['commit', '-m', 'Lock file']); - await execCommand(['git', 'push']); + await execCommand('git', ['push']); }, }, build: { @@ -31,9 +59,9 @@ const tasks = { // faster, especially when having to rebuild after adding a // dependency. if (process.env.BUILD_SEQUENCIAL === '1') { - await execCommand(['yarn', 'run', 'buildSequential']); + await execCommand('yarn', ['run', 'buildSequential']); } else { - await execCommand(['yarn', 'run', 'buildParallel']); + await execCommand('yarn', ['run', 'buildParallel']); } }, }, diff --git a/package.json b/package.json index d56d3bad8f..75dfa02b1b 100644 --- a/package.json +++ b/package.json @@ -75,6 +75,7 @@ "eslint-plugin-jest": "27.2.1", "eslint-plugin-promise": "6.1.1", "eslint-plugin-react": "7.32.0", + "execa": "5.1.1", "fs-extra": "11.1.1", "glob": "8.1.0", "gulp": "4.0.2", diff --git a/packages/utils/execCommand.ts b/packages/utils/execCommand.ts index 40415d87c2..34d0132cba 100644 --- a/packages/utils/execCommand.ts +++ b/packages/utils/execCommand.ts @@ -38,7 +38,7 @@ export default async (command: string | string[], options: ExecCommandOptions | args.splice(0, 1); const promise = execa(executableName, args); if (options.showStdout && promise.stdout) promise.stdout.pipe(process.stdout); - if (options.showStderr && promise.stdout) promise.stdout.pipe(process.stderr); + if (options.showStderr && promise.stderr) promise.stderr.pipe(process.stderr); const result = await promise; return result.stdout.trim(); }; diff --git a/yarn.lock b/yarn.lock index f860fdd4fc..c99ef7df43 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28910,6 +28910,7 @@ __metadata: eslint-plugin-jest: 27.2.1 eslint-plugin-promise: 6.1.1 eslint-plugin-react: 7.32.0 + execa: 5.1.1 fs-extra: 11.1.1 glob: 8.1.0 gulp: 4.0.2