diff --git a/src/DrupalCI/Build/Environment/Environment.php b/src/DrupalCI/Build/Environment/Environment.php index d2e6cfc847c9a0c799a2c442eaba72db2f645a91..386bfd4b37566f6dd7edd3ecf539c71e89b8c5ef 100644 --- a/src/DrupalCI/Build/Environment/Environment.php +++ b/src/DrupalCI/Build/Environment/Environment.php @@ -390,4 +390,15 @@ class Environment implements Injectable, EnvironmentInterface { return $this->chromeContainer['name']; } + /** + * @inheritDoc + */ + public function getHostProcessorCount() { + $cpuinfo = file_get_contents('/proc/cpuinfo'); + preg_match_all('/^processor/m', $cpuinfo, $matches); + $numCpus = count($matches[0]); + return $numCpus; + } + + } diff --git a/src/DrupalCI/Build/Environment/EnvironmentInterface.php b/src/DrupalCI/Build/Environment/EnvironmentInterface.php index 0b3ec96b352818a99e682bc99881b0c6102d0235..9582c83e7bce8a8e3058430b461fff1f65b11a60 100644 --- a/src/DrupalCI/Build/Environment/EnvironmentInterface.php +++ b/src/DrupalCI/Build/Environment/EnvironmentInterface.php @@ -62,4 +62,10 @@ interface EnvironmentInterface { */ public function getContainerComposerCacheDir(); + /** + * @return int + * The number of processors available in the host environment + */ + public function getHostProcessorCount(); + } diff --git a/src/DrupalCI/Plugin/BuildTask/BuildStep/CodebaseValidate/PhpLint.php b/src/DrupalCI/Plugin/BuildTask/BuildStep/CodebaseValidate/PhpLint.php index d489ab82d9b217ac7dd5a8c3e10dea21bcae3351..db8ba4e10c3602363a2f90a3cd1b01165341eb7a 100644 --- a/src/DrupalCI/Plugin/BuildTask/BuildStep/CodebaseValidate/PhpLint.php +++ b/src/DrupalCI/Plugin/BuildTask/BuildStep/CodebaseValidate/PhpLint.php @@ -60,9 +60,14 @@ class PhpLint extends BuildTaskBase implements BuildStepInterface, BuildTaskInte // Make sure if (0 < filesize($lintable_files)) { $this->saveHostArtifact($lintable_files,'lintable_files.txt'); + + if (empty($this->configuration['concurrency'])) { + $this->configuration['concurrency'] = $this->environment->getHostProcessorCount(); + } + $concurrency = $this->configuration['concurrency']; + // This should be come Codebase->getLocalDir() or similar // Use xargs to concurrently run linting on file. - $concurrency = $this->configuration['concurrency']; $cmd = "cd " . $this->environment->getExecContainerSourceDir() . " && xargs -P $concurrency -a " . $this->environment->getContainerWorkDir() . '/' . $this->pluginDir . "/lintable_files.txt -I {} php -l '{}'"; // TODO Throw a BuildException if there are syntax errors. $result = $this->environment->executeCommands($cmd); @@ -79,7 +84,6 @@ class PhpLint extends BuildTaskBase implements BuildStepInterface, BuildTaskInte */ public function getDefaultConfiguration() { return [ - 'concurrency' => '4', ]; } diff --git a/src/DrupalCI/Plugin/BuildTask/BuildStep/Testing/Simpletest.php b/src/DrupalCI/Plugin/BuildTask/BuildStep/Testing/Simpletest.php index e35e4f4fff76a1982d3d50e42102c6d1c3483858..8a8ea0510e232ba378fc129f675304395a07957f 100644 --- a/src/DrupalCI/Plugin/BuildTask/BuildStep/Testing/Simpletest.php +++ b/src/DrupalCI/Plugin/BuildTask/BuildStep/Testing/Simpletest.php @@ -217,7 +217,6 @@ class Simpletest extends BuildTaskBase implements BuildStepInterface, BuildTaskI public function getDefaultConfiguration() { return [ 'testgroups' => '--all', - 'concurrency' => 4, 'types' => 'Simpletest,PHPUnit-Unit,PHPUnit-Kernel,PHPUnit-Functional', 'color' => TRUE, 'die-on-fail' => FALSE, @@ -394,6 +393,10 @@ class Simpletest extends BuildTaskBase implements BuildStepInterface, BuildTaskI if (empty($config['url'])) { $config['url'] = 'http://' . $this->environment->getExecContainer()['name'] . '/subdirectory'; } + if (empty($config['concurrency'])) { + $config['concurrency'] = $this->environment->getHostProcessorCount(); + } + foreach ($config as $key => $value) { // Temporary backwards compatibility fix for https://www.drupal.org/node/2906212 // This will allow us to use older build.yml files. Remove after Feb 2018 or so.