summaryrefslogtreecommitdiffstatshomepage
path: root/tools/local-env/scripts/docker.js
diff options
context:
space:
mode:
Diffstat (limited to 'tools/local-env/scripts/docker.js')
-rw-r--r--tools/local-env/scripts/docker.js33
1 files changed, 24 insertions, 9 deletions
diff --git a/tools/local-env/scripts/docker.js b/tools/local-env/scripts/docker.js
index c1dc2b27e1..e39b42a812 100644
--- a/tools/local-env/scripts/docker.js
+++ b/tools/local-env/scripts/docker.js
@@ -1,21 +1,36 @@
-const dotenv = require( 'dotenv' );
+/* jshint node:true */
+
+const dotenv = require( 'dotenv' );
const dotenvExpand = require( 'dotenv-expand' );
-const { execSync } = require( 'child_process' );
+const { spawnSync } = require( 'child_process' );
const local_env_utils = require( './utils' );
dotenvExpand.expand( dotenv.config() );
const composeFiles = local_env_utils.get_compose_files();
-if (process.argv.includes('--coverage-html')) {
+if ( process.argv.includes( '--coverage-html' ) ) {
process.env.LOCAL_PHP_XDEBUG = 'true';
process.env.LOCAL_PHP_XDEBUG_MODE = 'coverage';
}
-// This try-catch prevents the superfluous Node.js debugging information from being shown if the command fails.
-try {
- // Execute any Docker compose command passed to this script.
- execSync( 'docker compose ' + composeFiles + ' ' + process.argv.slice( 2 ).join( ' ' ), { stdio: 'inherit' } );
-} catch ( error ) {
- process.exit( 1 );
+// Add --no-TTY (-T) arg after exec and run commands when STDIN is not a TTY.
+const dockerCommand = process.argv.slice( 2 );
+if ( [ 'exec', 'run' ].includes( dockerCommand[0] ) && ! process.stdin.isTTY ) {
+ dockerCommand.splice( 1, 0, '--no-TTY' );
}
+
+// Execute any Docker compose command passed to this script.
+const returns = spawnSync(
+ 'docker',
+ [
+ 'compose',
+ ...composeFiles
+ .map( ( composeFile ) => [ '-f', composeFile ] )
+ .flat(),
+ ...dockerCommand,
+ ],
+ { stdio: 'inherit' }
+);
+
+process.exit( returns.status );