From 314d682b27b3f80085466da16228486df77d353a Mon Sep 17 00:00:00 2001 From: TravisCarden Date: Tue, 8 Oct 2019 08:23:28 -0400 Subject: [PATCH 01/18] Back to dev. --- config/VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/VERSION b/config/VERSION index 795460fce..c7c15bae5 100644 --- a/config/VERSION +++ b/config/VERSION @@ -1 +1 @@ -v1.1.0 +v1.1.0-dev From ab5d9c0df189f21807362e36d6333f3a92f28b3a Mon Sep 17 00:00:00 2001 From: TravisCarden Date: Tue, 8 Oct 2019 12:46:57 -0400 Subject: [PATCH 02/18] Removed all commented out packages from packages.yml. [skip ci] --- config/packages.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/config/packages.yml b/config/packages.yml index 96339fb3d..e3126a6b7 100644 --- a/config/packages.yml +++ b/config/packages.yml @@ -40,8 +40,6 @@ # config/services.yml for the relevant code or bin/self-test for a usage # example. -#drupal/acquia_commercemanager: [] - drupal/acquia_connector: version_dev: 1.x-dev <2.0 @@ -55,8 +53,6 @@ drupal/acquia_lift: drupal/acquia_purge: [] -#drupal/acquia_search_solr: [] - drupal/acsf: [] acquia/blt: @@ -69,8 +65,6 @@ acquia/coding-standards: drupal/cog: type: drupal-theme -#drupal/cog_tools: [] - acquia/drupal-spec-tool: type: behat-extension From a6ca39ba5f75b70f2f8be6d5a5a36474f7be1472 Mon Sep 17 00:00:00 2001 From: Travis Carden Date: Thu, 10 Oct 2019 09:27:02 -0400 Subject: [PATCH 03/18] Added the ability to specify the coding standard used by PHPCS (#46) --- config/services.yml | 2 + docs/advanced-usage.md | 2 + example/.travis.yml | 6 + resources/phpcs.xml | 3 +- src/Command/Qa/QaFixerCommand.php | 52 +++++++- src/Command/Qa/QaStaticAnalysisCommand.php | 51 +++++++- src/Enum/PhpcsStandard.php | 34 ++++++ .../Fixer/PhpCodeBeautifierAndFixerTask.php | 29 +++-- src/Task/PhpcsConfigurator.php | 106 ++++++++++++++++ .../StaticAnalysisTool/PhpCodeSnifferTask.php | 61 ++++++---- src/Task/TaskBase.php | 18 ++- tests/Command/Qa/QaFixerCommandTest.php | 115 +++++++++++++++++- .../Qa/QaStaticAnalysisCommandTest.php | 115 +++++++++++++++++- tests/Task/TasksTest.php | 5 +- 14 files changed, 556 insertions(+), 43 deletions(-) create mode 100644 src/Enum/PhpcsStandard.php create mode 100644 src/Task/PhpcsConfigurator.php diff --git a/config/services.yml b/config/services.yml index a0062741a..8d9dba635 100644 --- a/config/services.yml +++ b/config/services.yml @@ -7,6 +7,7 @@ parameters: env(ORCA_FIXTURE_DIR): "%app.fixture_dir%" env(ORCA_PACKAGES_CONFIG): config/packages.yml env(ORCA_PACKAGES_CONFIG_ALTER): ~ + env(ORCA_PHPCS_STANDARD): "AcquiaDrupalTransitional" env(ORCA_TELEMETRY_ENABLE): false services: @@ -17,6 +18,7 @@ services: bind: $amplitude_api_key: "%env(ORCA_AMPLITUDE_API_KEY)%" $amplitude_user_id: "%env(ORCA_AMPLITUDE_USER_ID)%" + $default_phpcs_standard: "%env(ORCA_PHPCS_STANDARD)%" $fixture_dir: "%env(ORCA_FIXTURE_DIR)%" $project_dir: "%kernel.project_dir%" $packages_config: "%env(ORCA_PACKAGES_CONFIG)%" diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md index 58cc6c2aa..955a80de3 100644 --- a/docs/advanced-usage.md +++ b/docs/advanced-usage.md @@ -18,6 +18,8 @@ These affect ORCA in all contexts. * **`ORCA_PACKAGES_CONFIG_ALTER`**: Alter the main list of packages ORCA installs in fixtures and runs tests on (add, remove, or change packages and their properties). Acceptable values are any valid path to a YAML file relative to ORCA itself, e.g., `../example/tests/packages_alter.yml`. See [`.travis.yml`](../.travis.yml) and [`example/tests/packages_alter.yml`](../example/tests/packages_alter.yml) for an example and explanation of the schema. **Note:** This option should be used conservatively as it erodes the uniformity at the heart of ORCA's _representative_ nature. +* **`ORCA_PHPCS_STANDARD`**: Change the PHP Code Sniffer standard used by the `qa:static-analysis` and `qa:fixer` commands. Acceptable values are `AcquiaPHP`, `AcquiaDrupalStrict`, and `AcquiaDrupalTransitional`. See [Acquia Coding Standards for PHP](https://packagist.org/packages/acquia/coding-standards) for details. + * **`ORCA_TELEMETRY_ENABLE`**: Set to `TRUE` to enable telemetry with Amplitude. Requires [`ORCA_AMPLITUDE_API_KEY`](#ORCA_AMPLITUDE_API_KEY) and [`ORCA_AMPLITUDE_USER_ID`](#ORCA_AMPLITUDE_USER_ID) values. On Travis CI, only takes effect for cron events. ### Travis CI scripts diff --git a/example/.travis.yml b/example/.travis.yml index 83d5f34c4..96b310c6e 100644 --- a/example/.travis.yml +++ b/example/.travis.yml @@ -59,6 +59,12 @@ env: # @see https://github.com/acquia/orca/blob/master/docs/advanced-usage.md#ORCA_FIXTURE_PROFILE # - ORCA_FIXTURE_PROFILE=example # + # Change the PHP Code Sniffer standard used for static analysis. Acceptable + # values are "AcquiaPHP", "AcquiaDrupalStrict", and + # "AcquiaDrupalTransitional". Defaults to "AcquiaDrupalTransitional". + # @see https://github.com/acquia/orca/blob/master/docs/advanced-usage.md#ORCA_PHPCS_STANDARD + # - ORCA_PHPCS_STANDARD=AcquiaDrupalTransitional + # # To enable telemetry with Amplitude on cron runs, uncomment the following # line and set ORCA_AMPLITUDE_API_KEY in your Travis CI repository settings: # @see https://github.com/acquia/orca/blob/master/docs/advanced-usage.md#ORCA_TELEMETRY_ENABLE diff --git a/resources/phpcs.xml b/resources/phpcs.xml index 425243c54..3ce5de1da 100644 --- a/resources/phpcs.xml +++ b/resources/phpcs.xml @@ -16,7 +16,8 @@ vendor/ var/ - + + diff --git a/src/Command/Qa/QaFixerCommand.php b/src/Command/Qa/QaFixerCommand.php index b1f8794b2..4178c7566 100644 --- a/src/Command/Qa/QaFixerCommand.php +++ b/src/Command/Qa/QaFixerCommand.php @@ -2,6 +2,7 @@ namespace Acquia\Orca\Command\Qa; +use Acquia\Orca\Enum\PhpcsStandard; use Acquia\Orca\Enum\StatusCode; use Acquia\Orca\Task\Fixer\ComposerNormalizeTask; use Acquia\Orca\Task\Fixer\PhpCodeBeautifierAndFixerTask; @@ -53,11 +54,20 @@ class QaFixerCommand extends Command { */ protected static $defaultName = 'qa:fixer'; + /** + * The default PHPCS standard. + * + * @var string + */ + private $defaultPhpcsStandard; + /** * Constructs an instance. * * @param \Acquia\Orca\Task\Fixer\ComposerNormalizeTask $composer_normalize * The Composer normalize task. + * @param string $default_phpcs_standard + * The default PHPCS standard. * @param \Symfony\Component\Filesystem\Filesystem $filesystem * The filesystem. * @param \Acquia\Orca\Task\Fixer\PhpCodeBeautifierAndFixerTask $php_code_beautifier_and_fixer @@ -65,8 +75,9 @@ class QaFixerCommand extends Command { * @param \Acquia\Orca\Task\TaskRunner $task_runner * The task runner. */ - public function __construct(ComposerNormalizeTask $composer_normalize, Filesystem $filesystem, PhpCodeBeautifierAndFixerTask $php_code_beautifier_and_fixer, TaskRunner $task_runner) { + public function __construct(ComposerNormalizeTask $composer_normalize, string $default_phpcs_standard, Filesystem $filesystem, PhpCodeBeautifierAndFixerTask $php_code_beautifier_and_fixer, TaskRunner $task_runner) { $this->composerNormalize = $composer_normalize; + $this->defaultPhpcsStandard = $default_phpcs_standard; $this->filesystem = $filesystem; $this->phpCodeBeautifierAndFixer = $php_code_beautifier_and_fixer; $this->taskRunner = $task_runner; @@ -83,7 +94,11 @@ protected function configure() { ->setHelp('Tools can be specified individually or in combination. If none are specified, all will be run.') ->addArgument('path', InputArgument::REQUIRED, 'The path to fix issues in') ->addOption('composer', NULL, InputOption::VALUE_NONE, 'Run the Composer Normalizer tool') - ->addOption('phpcbf', NULL, InputOption::VALUE_NONE, 'Run the PHP Code Beautifier and Fixer tool'); + ->addOption('phpcbf', NULL, InputOption::VALUE_NONE, 'Run the PHP Code Beautifier and Fixer tool') + ->addOption('phpcs-standard', NULL, InputOption::VALUE_REQUIRED, implode(PHP_EOL, array_merge( + ['Change the PHPCS standard used:'], + PhpcsStandard::commandHelp() + )), $this->defaultPhpcsStandard); } /** @@ -95,7 +110,13 @@ public function execute(InputInterface $input, OutputInterface $output): int { $output->writeln(sprintf('Error: No such path: %s.', $path)); return StatusCode::ERROR; } - $this->configureTaskRunner($input); + try { + $this->configureTaskRunner($input); + } + catch (\UnexpectedValueException $e) { + $output->writeln($e->getMessage()); + return StatusCode::ERROR; + } return $this->taskRunner ->setPath($path) ->run(); @@ -116,8 +137,33 @@ private function configureTaskRunner(InputInterface $input) { $this->taskRunner->addTask($this->composerNormalize); } if ($all || $phpcbf) { + $this->phpCodeBeautifierAndFixer->setStandard($this->getStandard($input)); $this->taskRunner->addTask($this->phpCodeBeautifierAndFixer); } } + /** + * Gets the PHPCS standard to use. + * + * @param \Symfony\Component\Console\Input\InputInterface $input + * The command input. + * + * @return \Acquia\Orca\Enum\PhpcsStandard + * The PHPCS standard. + */ + private function getStandard(InputInterface $input): PhpcsStandard { + $standard = $input->getOption('phpcs-standard') ?? $this->defaultPhpcsStandard; + try { + $standard = new PhpcsStandard($standard); + } + catch (\UnexpectedValueException $e) { + $error_message = sprintf('Error: Invalid value for "--phpcs-standard" option: "%s".', $standard); + if (!$input->getParameterOption('--phpcs-standard')) { + $error_message = sprintf('Error: Invalid value for $ORCA_PHPCS_STANDARD environment variable: "%s".', $standard); + } + throw new \UnexpectedValueException($error_message, NULL, $e); + } + return $standard; + } + } diff --git a/src/Command/Qa/QaStaticAnalysisCommand.php b/src/Command/Qa/QaStaticAnalysisCommand.php index 010800289..9884bffe7 100644 --- a/src/Command/Qa/QaStaticAnalysisCommand.php +++ b/src/Command/Qa/QaStaticAnalysisCommand.php @@ -2,6 +2,7 @@ namespace Acquia\Orca\Command\Qa; +use Acquia\Orca\Enum\PhpcsStandard; use Acquia\Orca\Enum\StatusCode; use Acquia\Orca\Task\StaticAnalysisTool\ComposerValidateTask; use Acquia\Orca\Task\StaticAnalysisTool\PhpCodeSnifferTask; @@ -85,11 +86,20 @@ class QaStaticAnalysisCommand extends Command { */ protected static $defaultName = 'qa:static-analysis'; + /** + * The default PHPCS standard. + * + * @var string + */ + private $defaultPhpcsStandard; + /** * Constructs an instance. * * @param \Acquia\Orca\Task\StaticAnalysisTool\ComposerValidateTask $composer_validate * The Composer validate task. + * @param string $default_phpcs_standard + * The default PHPCs standard. * @param \Symfony\Component\Filesystem\Filesystem $filesystem * The filesystem. * @param \Acquia\Orca\Task\StaticAnalysisTool\PhpCodeSnifferTask $php_code_sniffer @@ -105,8 +115,9 @@ class QaStaticAnalysisCommand extends Command { * @param \Acquia\Orca\Task\StaticAnalysisTool\YamlLintTask $yaml_lint * The YAML lint task. */ - public function __construct(ComposerValidateTask $composer_validate, Filesystem $filesystem, PhpCodeSnifferTask $php_code_sniffer, PhpLintTask $php_lint, PhpLocTask $php_loc, PhpMessDetectorTask $php_mess_detector, TaskRunner $task_runner, YamlLintTask $yaml_lint) { + public function __construct(ComposerValidateTask $composer_validate, string $default_phpcs_standard, Filesystem $filesystem, PhpCodeSnifferTask $php_code_sniffer, PhpLintTask $php_lint, PhpLocTask $php_loc, PhpMessDetectorTask $php_mess_detector, TaskRunner $task_runner, YamlLintTask $yaml_lint) { $this->composerValidate = $composer_validate; + $this->defaultPhpcsStandard = $default_phpcs_standard; $this->filesystem = $filesystem; $this->phpCodeSniffer = $php_code_sniffer; $this->phpLint = $php_lint; @@ -128,6 +139,10 @@ protected function configure() { ->addArgument('path', InputArgument::REQUIRED, 'The path to analyze') ->addOption('composer', NULL, InputOption::VALUE_NONE, 'Run the Composer validation tool') ->addOption('phpcs', NULL, InputOption::VALUE_NONE, 'Run the PHP Code Sniffer tool') + ->addOption('phpcs-standard', NULL, InputOption::VALUE_REQUIRED, implode(PHP_EOL, array_merge( + ['Change the PHPCS standard used:'], + PhpcsStandard::commandHelp() + )), $this->defaultPhpcsStandard) ->addOption('phplint', NULL, InputOption::VALUE_NONE, 'Run the PHP Lint tool') ->addOption('phploc', NULL, InputOption::VALUE_NONE, 'Run the PHP LOC tool') ->addOption('phpmd', NULL, InputOption::VALUE_NONE, 'Run the PHP Mess Detector tool') @@ -143,7 +158,13 @@ public function execute(InputInterface $input, OutputInterface $output): int { $output->writeln(sprintf('Error: No such path: %s.', $path)); return StatusCode::ERROR; } - $this->configureTaskRunner($input); + try { + $this->configureTaskRunner($input); + } + catch (\UnexpectedValueException $e) { + $output->writeln($e->getMessage()); + return StatusCode::ERROR; + } return $this->taskRunner ->setPath($path) ->run(); @@ -162,12 +183,14 @@ private function configureTaskRunner(InputInterface $input) { $phploc = $input->getOption('phploc'); $phpmd = $input->getOption('phpmd'); $yamllint = $input->getOption('yamllint'); + // If NO tasks are specified, they are ALL implied. $all = !$composer && !$phpcs && !$phplint && !$phploc && !$phpmd && !$yamllint; if ($all || $composer) { $this->taskRunner->addTask($this->composerValidate); } if ($all || $phpcs) { + $this->phpCodeSniffer->setStandard($this->getStandard($input)); $this->taskRunner->addTask($this->phpCodeSniffer); } if ($all || $phploc) { @@ -184,4 +207,28 @@ private function configureTaskRunner(InputInterface $input) { } } + /** + * Gets the PHPCS standard to use. + * + * @param \Symfony\Component\Console\Input\InputInterface $input + * The command input. + * + * @return \Acquia\Orca\Enum\PhpcsStandard + * The PHPCS standard. + */ + private function getStandard(InputInterface $input): PhpcsStandard { + $standard = $input->getOption('phpcs-standard') ?? $this->defaultPhpcsStandard; + try { + $standard = new PhpcsStandard($standard); + } + catch (\UnexpectedValueException $e) { + $error_message = sprintf('Error: Invalid value for "--phpcs-standard" option: "%s".', $standard); + if (!$input->getParameterOption('--phpcs-standard')) { + $error_message = sprintf('Error: Invalid value for $ORCA_PHPCS_STANDARD environment variable: "%s".', $standard); + } + throw new \UnexpectedValueException($error_message, NULL, $e); + } + return $standard; + } + } diff --git a/src/Enum/PhpcsStandard.php b/src/Enum/PhpcsStandard.php new file mode 100644 index 000000000..87536ea6d --- /dev/null +++ b/src/Enum/PhpcsStandard.php @@ -0,0 +1,34 @@ +phpcsConfigurator->prepareTemporaryConfig(new PhpcsStandard($this->standard)); try { - $this->runPhpcbf(); + $this->processRunner->runOrcaVendorBin([ + 'phpcbf', + realpath($this->getPath()), + ], $this->phpcsConfigurator->getTempDir()); } catch (ProcessFailedException $e) { throw new TaskFailureException(); } + finally { + $this->phpcsConfigurator->cleanupTemporaryConfig(); + } } /** - * Runs phpcbf. + * Sets the standard to use. + * + * @param \Acquia\Orca\Enum\PhpcsStandard $standard + * The PHPCS standard. */ - public function runPhpcbf(): void { - $this->processRunner->runOrcaVendorBin([ - 'phpcbf', - realpath($this->getPath()), - ], "{$this->projectDir}/resources"); + public function setStandard(PhpcsStandard $standard): void { + $this->standard = $standard; } } diff --git a/src/Task/PhpcsConfigurator.php b/src/Task/PhpcsConfigurator.php new file mode 100644 index 000000000..ef73b097c --- /dev/null +++ b/src/Task/PhpcsConfigurator.php @@ -0,0 +1,106 @@ +filesystem = $filesystem; + $this->projectDir = $project_dir; + } + + /** + * The temporary directory. + * + * @var string|null + */ + private $tempDir; + + /** + * Prepares the temporary config. + * + * @param \Acquia\Orca\Enum\PhpcsStandard $standard + * The PHPCS standard to use. + */ + public function prepareTemporaryConfig(PhpcsStandard $standard): void { + $this->filesystem->mkdir($this->getTempDir()); + $this->filesystem->touch($this->getTemporaryConfigFile()); + $template = file_get_contents($this->getConfigFileTemplate()); + $contents = str_replace(self::VALUE_PLACEHOLDER, $standard->getValue(), $template); + $this->filesystem->dumpFile($this->getTemporaryConfigFile(), $contents); + } + + /** + * Cleans up the temporary config. + */ + public function cleanupTemporaryConfig(): void { + $this->filesystem->remove($this->getTempDir()); + } + + /** + * Gets the temporary directory. + * + * @return string + * The temporary directory. + */ + public function getTempDir(): string { + if ($this->tempDir) { + return $this->tempDir; + } + + $path = sprintf('%s/var/cache/phpcs/%s', $this->projectDir, uniqid()); + $this->tempDir = $path; + return $this->tempDir; + } + + /** + * Gets the path to the config file template. + * + * @return string + * The path to the config file template. + */ + private function getConfigFileTemplate(): string { + return "{$this->projectDir}/resources/phpcs.xml"; + } + + /** + * Gets the path to the temporary config file. + * + * @return string + * The path to the temporary config file. + */ + private function getTemporaryConfigFile(): string { + return "{$this->getTempDir()}/phpcs.xml"; + } + +} diff --git a/src/Task/StaticAnalysisTool/PhpCodeSnifferTask.php b/src/Task/StaticAnalysisTool/PhpCodeSnifferTask.php index 8509fac81..858d7cf0e 100644 --- a/src/Task/StaticAnalysisTool/PhpCodeSnifferTask.php +++ b/src/Task/StaticAnalysisTool/PhpCodeSnifferTask.php @@ -2,7 +2,7 @@ namespace Acquia\Orca\Task\StaticAnalysisTool; -use Acquia\Orca\Enum\StatusCode; +use Acquia\Orca\Enum\PhpcsStandard; use Acquia\Orca\Exception\TaskFailureException; use Acquia\Orca\Task\TaskBase; use Symfony\Component\Process\Exception\ProcessFailedException; @@ -15,11 +15,11 @@ class PhpCodeSnifferTask extends TaskBase { public const JSON_LOG_PATH = 'var/log/phpcs.json'; /** - * The status code. + * The standard to use. * - * @var int + * @var string */ - private $status = StatusCode::OK; + private $standard = PhpcsStandard::DEFAULT; /** * {@inheritdoc} @@ -39,37 +39,35 @@ public function statusMessage(): string { * {@inheritdoc} */ public function execute(): void { + $this->phpcsConfigurator->prepareTemporaryConfig(new PhpcsStandard($this->standard)); + try { - $this->runPhpcs(); + $this->runPhpcsCommand(); } catch (ProcessFailedException $e) { - throw new TaskFailureException(); + // Swallow failure from the first run so as not to prevent the log run, + // which will fail identically, ensuring the correct exception is thrown. } - } - /** - * Runs phpcs. - */ - public function runPhpcs(): int { try { - $this->runCommand(); + $this->logResults(); } catch (ProcessFailedException $e) { - $this->status = StatusCode::ERROR; + throw new TaskFailureException(NULL, NULL, $e); + } + finally { + $this->phpcsConfigurator->cleanupTemporaryConfig(); } - $this->logResults(); - return $this->status; } /** - * Runs phpcs and sends output to the console. + * Sets the standard to use. + * + * @param \Acquia\Orca\Enum\PhpcsStandard $standard + * The PHPCS standard. */ - private function runCommand(): void { - $this->processRunner->runOrcaVendorBin([ - 'phpcs', - '-s', - realpath($this->getPath()), - ], "{$this->projectDir}/resources"); + public function setStandard(PhpcsStandard $standard): void { + $this->standard = $standard; } /** @@ -77,14 +75,25 @@ private function runCommand(): void { */ private function logResults(): void { $this->output->comment('Logging results...'); + $this->runPhpcsCommand([ + sprintf('--report-file=%s/%s', $this->projectDir, self::JSON_LOG_PATH), + ]); + } - $this->processRunner->runOrcaVendorBin([ + /** + * Runs the PHPCS command. + * + * @param array $options + * Command line options to add to the defaults. + */ + private function runPhpcsCommand(array $options = []): void { + $command = array_merge([ 'phpcs', '-s', - '--report=json', - sprintf('--report-file=%s/%s', $this->projectDir, self::JSON_LOG_PATH), + ], $options, [ realpath($this->getPath()), - ], "{$this->projectDir}/resources"); + ]); + $this->processRunner->runOrcaVendorBin($command, $this->phpcsConfigurator->getTempDir()); } } diff --git a/src/Task/TaskBase.php b/src/Task/TaskBase.php index cf334e8f7..d6db5854e 100644 --- a/src/Task/TaskBase.php +++ b/src/Task/TaskBase.php @@ -62,6 +62,13 @@ abstract class TaskBase implements TaskInterface { */ protected $output; + /** + * The PHPCS configurator. + * + * @var \Acquia\Orca\Task\PhpcsConfigurator + */ + protected $phpcsConfigurator; + /** * Constructs an instance. * @@ -73,16 +80,25 @@ abstract class TaskBase implements TaskInterface { * The fixture. * @param \Symfony\Component\Console\Style\SymfonyStyle $output * The output decorator. + * @param \Acquia\Orca\Task\PhpcsConfigurator $phpcs_configurator + * The PHPCS configurator. * @param \Acquia\Orca\Utility\ProcessRunner $process_runner * The process runner. * @param string $project_dir * The ORCA project directory. */ - public function __construct(ConfigFileOverrider $config_file_overrider, Filesystem $filesystem, Fixture $fixture, SymfonyStyle $output, ProcessRunner $process_runner, string $project_dir) { + public function __construct(ConfigFileOverrider $config_file_overrider, Filesystem $filesystem, Fixture $fixture, SymfonyStyle $output, PhpcsConfigurator $phpcs_configurator, ProcessRunner $process_runner, string $project_dir) { $this->configFileOverrider = $config_file_overrider; $this->filesystem = $filesystem; $this->fixture = $fixture; $this->output = $output; + + // @todo The injection of this service in a base class like this constitutes + // a violation of the interface segregation principle because not all of + // its children use it. This is an indication for refactoring to use + // composition instead of inheritance. + $this->phpcsConfigurator = $phpcs_configurator; + $this->processRunner = $process_runner; $this->projectDir = $project_dir; } diff --git a/tests/Command/Qa/QaFixerCommandTest.php b/tests/Command/Qa/QaFixerCommandTest.php index f82bafc4a..c76001a0a 100644 --- a/tests/Command/Qa/QaFixerCommandTest.php +++ b/tests/Command/Qa/QaFixerCommandTest.php @@ -3,6 +3,7 @@ namespace Acquia\Orca\Tests\Command\Qa; use Acquia\Orca\Command\Qa\QaFixerCommand; +use Acquia\Orca\Enum\PhpcsStandard; use Acquia\Orca\Enum\StatusCode; use Acquia\Orca\Task\Fixer\ComposerNormalizeTask; use Acquia\Orca\Task\Fixer\PhpCodeBeautifierAndFixerTask; @@ -21,6 +22,8 @@ class QaFixerCommandTest extends CommandTestBase { private const SUT_PATH = '/var/www/example'; + private $defaultPhpcsStandard = PhpcsStandard::DEFAULT; + protected function setUp() { $this->composerNormalize = $this->prophesize(ComposerNormalizeTask::class); $this->filesystem = $this->prophesize(Filesystem::class); @@ -37,7 +40,7 @@ protected function createCommand(): Command { $php_code_beautifier_and_fixer = $this->phpCodeBeautifierAndFixer->reveal(); /** @var \Acquia\Orca\Task\TaskRunner $task_runner */ $task_runner = $this->taskRunner->reveal(); - return new QaFixerCommand($composer_normalize, $filesystem, $php_code_beautifier_and_fixer, $task_runner); + return new QaFixerCommand($composer_normalize, $this->defaultPhpcsStandard, $filesystem, $php_code_beautifier_and_fixer, $task_runner); } /** @@ -114,4 +117,114 @@ public function providerTaskFiltering() { ]; } + /** + * @dataProvider providerPhpcsStandardOption + */ + public function testPhpcsStandardOption($args, $standard) { + $this->filesystem + ->exists(self::SUT_PATH) + ->shouldBeCalledOnce() + ->willReturn(TRUE); + $this->phpCodeBeautifierAndFixer + ->setStandard(new PhpcsStandard($standard)) + ->shouldBeCalledOnce(); + $this->taskRunner + ->addTask($this->phpCodeBeautifierAndFixer->reveal()) + ->shouldBeCalledOnce() + ->willReturn($this->taskRunner); + $this->taskRunner + ->setPath(self::SUT_PATH) + ->shouldBeCalledOnce() + ->willReturn($this->taskRunner); + $this->taskRunner + ->run() + ->shouldBeCalledOnce(); + $args['--phpcbf'] = 1; + $args['path'] = self::SUT_PATH; + + $this->executeCommand($args); + + $this->assertEquals('', $this->getDisplay(), 'Displayed correct output.'); + $this->assertEquals(StatusCode::OK, $this->getStatusCode(), 'Returned correct status code.'); + } + + public function providerPhpcsStandardOption() { + return [ + [[], $this->defaultPhpcsStandard], + [['--phpcs-standard' => PhpcsStandard::ACQUIA_PHP], PhpcsStandard::ACQUIA_PHP], + [['--phpcs-standard' => PhpcsStandard::ACQUIA_DRUPAL_TRANSITIONAL], PhpcsStandard::ACQUIA_DRUPAL_TRANSITIONAL], + [['--phpcs-standard' => PhpcsStandard::ACQUIA_DRUPAL_STRICT], PhpcsStandard::ACQUIA_DRUPAL_STRICT], + ]; + } + + /** + * @dataProvider providerPhpcsStandardEnvVar + */ + public function testPhpcsStandardEnvVar($standard) { + $this->defaultPhpcsStandard = $standard; + $this->filesystem + ->exists(self::SUT_PATH) + ->shouldBeCalledTimes(1) + ->willReturn(TRUE); + $this->phpCodeBeautifierAndFixer + ->setStandard(new PhpcsStandard($this->defaultPhpcsStandard)) + ->shouldBeCalledOnce(); + $this->taskRunner + ->addTask($this->phpCodeBeautifierAndFixer->reveal()) + ->shouldBeCalledOnce() + ->willReturn($this->taskRunner); + $this->taskRunner + ->setPath(self::SUT_PATH) + ->shouldBeCalledOnce() + ->willReturn($this->taskRunner); + $this->taskRunner + ->run() + ->shouldBeCalledOnce(); + $args = [ + '--phpcbf' => 1, + 'path' => self::SUT_PATH, + ]; + + $this->executeCommand($args); + + $this->assertEquals('', $this->getDisplay(), 'Displayed correct output.'); + $this->assertEquals(StatusCode::OK, $this->getStatusCode(), 'Returned correct status code.'); + } + + public function providerPhpcsStandardEnvVar() { + return [ + [PhpcsStandard::ACQUIA_PHP], + [PhpcsStandard::ACQUIA_DRUPAL_TRANSITIONAL], + [PhpcsStandard::ACQUIA_DRUPAL_STRICT], + ]; + } + + /** + * @dataProvider providerInvalidPhpcsStandard + */ + public function testInvalidPhpcsStandard($args, $default_standard, $display) { + $this->defaultPhpcsStandard = $default_standard; + $this->filesystem + ->exists(self::SUT_PATH) + ->shouldBeCalledOnce() + ->willReturn(TRUE); + $this->taskRunner + ->run() + ->shouldNotBeCalled(); + $args['--phpcbf'] = 1; + $args['path'] = self::SUT_PATH; + + $this->executeCommand($args); + + $this->assertEquals($display, $this->getDisplay(), 'Displayed correct output.'); + $this->assertEquals(StatusCode::ERROR, $this->getStatusCode(), 'Returned correct status code.'); + } + + public function providerInvalidPhpcsStandard() { + return [ + [['--phpcs-standard' => 'invalid'], $this->defaultPhpcsStandard, 'Error: Invalid value for "--phpcs-standard" option: "invalid".' . PHP_EOL], + [[], 'invalid', 'Error: Invalid value for $ORCA_PHPCS_STANDARD environment variable: "invalid".' . PHP_EOL], + ]; + } + } diff --git a/tests/Command/Qa/QaStaticAnalysisCommandTest.php b/tests/Command/Qa/QaStaticAnalysisCommandTest.php index 64d10f9cb..7a355101d 100644 --- a/tests/Command/Qa/QaStaticAnalysisCommandTest.php +++ b/tests/Command/Qa/QaStaticAnalysisCommandTest.php @@ -3,6 +3,7 @@ namespace Acquia\Orca\Tests\Command\Qa; use Acquia\Orca\Command\Qa\QaStaticAnalysisCommand; +use Acquia\Orca\Enum\PhpcsStandard; use Acquia\Orca\Enum\StatusCode; use Acquia\Orca\Task\StaticAnalysisTool\ComposerValidateTask; use Acquia\Orca\Task\StaticAnalysisTool\PhpCodeSnifferTask; @@ -29,6 +30,8 @@ class QaStaticAnalysisCommandTest extends CommandTestBase { private const SUT_PATH = '/var/www/example'; + private $defaultPhpcsStandard = PhpcsStandard::DEFAULT; + protected function setUp() { $this->composerValidate = $this->prophesize(ComposerValidateTask::class); $this->filesystem = $this->prophesize(Filesystem::class); @@ -57,7 +60,7 @@ protected function createCommand(): Command { $task_runner = $this->taskRunner->reveal(); /** @var \Acquia\Orca\Task\StaticAnalysisTool\YamlLintTask $yaml_lint */ $yaml_lint = $this->yamlLint->reveal(); - return new QaStaticAnalysisCommand($composer_validate, $filesystem, $php_code_sniffer, $php_lint, $php_loc, $php_mess_detector, $task_runner, $yaml_lint); + return new QaStaticAnalysisCommand($composer_validate, $this->defaultPhpcsStandard, $filesystem, $php_code_sniffer, $php_lint, $php_loc, $php_mess_detector, $task_runner, $yaml_lint); } /** @@ -154,4 +157,114 @@ public function providerTaskFiltering() { ]; } + /** + * @dataProvider providerPhpcsStandardOption + */ + public function testPhpcsStandardOption($args, $standard) { + $this->filesystem + ->exists(self::SUT_PATH) + ->shouldBeCalledOnce() + ->willReturn(TRUE); + $this->phpCodeSniffer + ->setStandard(new PhpcsStandard($standard)) + ->shouldBeCalledOnce(); + $this->taskRunner + ->addTask($this->phpCodeSniffer->reveal()) + ->shouldBeCalledOnce() + ->willReturn($this->taskRunner); + $this->taskRunner + ->setPath(self::SUT_PATH) + ->shouldBeCalledOnce() + ->willReturn($this->taskRunner); + $this->taskRunner + ->run() + ->shouldBeCalledOnce(); + $args['--phpcs'] = 1; + $args['path'] = self::SUT_PATH; + + $this->executeCommand($args); + + $this->assertEquals('', $this->getDisplay(), 'Displayed correct output.'); + $this->assertEquals(StatusCode::OK, $this->getStatusCode(), 'Returned correct status code.'); + } + + public function providerPhpcsStandardOption() { + return [ + [[], $this->defaultPhpcsStandard], + [['--phpcs-standard' => PhpcsStandard::ACQUIA_PHP], PhpcsStandard::ACQUIA_PHP], + [['--phpcs-standard' => PhpcsStandard::ACQUIA_DRUPAL_TRANSITIONAL], PhpcsStandard::ACQUIA_DRUPAL_TRANSITIONAL], + [['--phpcs-standard' => PhpcsStandard::ACQUIA_DRUPAL_STRICT], PhpcsStandard::ACQUIA_DRUPAL_STRICT], + ]; + } + + /** + * @dataProvider providerPhpcsStandardEnvVar + */ + public function testPhpcsStandardEnvVar($standard) { + $this->defaultPhpcsStandard = $standard; + $this->filesystem + ->exists(self::SUT_PATH) + ->shouldBeCalledTimes(1) + ->willReturn(TRUE); + $this->phpCodeSniffer + ->setStandard(new PhpcsStandard($this->defaultPhpcsStandard)) + ->shouldBeCalledOnce(); + $this->taskRunner + ->addTask($this->phpCodeSniffer->reveal()) + ->shouldBeCalledOnce() + ->willReturn($this->taskRunner); + $this->taskRunner + ->setPath(self::SUT_PATH) + ->shouldBeCalledOnce() + ->willReturn($this->taskRunner); + $this->taskRunner + ->run() + ->shouldBeCalledOnce(); + $args = [ + '--phpcs' => 1, + 'path' => self::SUT_PATH, + ]; + + $this->executeCommand($args); + + $this->assertEquals('', $this->getDisplay(), 'Displayed correct output.'); + $this->assertEquals(StatusCode::OK, $this->getStatusCode(), 'Returned correct status code.'); + } + + public function providerPhpcsStandardEnvVar() { + return [ + [PhpcsStandard::ACQUIA_PHP], + [PhpcsStandard::ACQUIA_DRUPAL_TRANSITIONAL], + [PhpcsStandard::ACQUIA_DRUPAL_STRICT], + ]; + } + + /** + * @dataProvider providerInvalidPhpcsStandard + */ + public function testInvalidPhpcsStandard($args, $default_standard, $display) { + $this->defaultPhpcsStandard = $default_standard; + $this->filesystem + ->exists(self::SUT_PATH) + ->shouldBeCalledOnce() + ->willReturn(TRUE); + $this->taskRunner + ->run() + ->shouldNotBeCalled(); + $args['--phpcs'] = 1; + $args['path'] = self::SUT_PATH; + + $this->executeCommand($args); + + $this->assertEquals($display, $this->getDisplay(), 'Displayed correct output.'); + $this->assertEquals(StatusCode::ERROR, $this->getStatusCode(), 'Returned correct status code.'); + } + + public function providerInvalidPhpcsStandard() { + return [ + [['--phpcs-standard' => 'invalid'], $this->defaultPhpcsStandard, 'Error: Invalid value for "--phpcs-standard" option: "invalid".' . PHP_EOL], + [[], 'invalid', 'Error: Invalid value for $ORCA_PHPCS_STANDARD environment variable: "invalid".' . PHP_EOL], + ]; + } + } diff --git a/tests/Task/TasksTest.php b/tests/Task/TasksTest.php index 013635950..490fa6200 100644 --- a/tests/Task/TasksTest.php +++ b/tests/Task/TasksTest.php @@ -3,6 +3,7 @@ namespace Acquia\Orca\Tests\Task; use Acquia\Orca\Fixture\Fixture; +use Acquia\Orca\Task\PhpcsConfigurator; use Acquia\Orca\Task\StaticAnalysisTool\ComposerValidateTask; use Acquia\Orca\Task\StaticAnalysisTool\PhpCodeSnifferTask; use Acquia\Orca\Task\StaticAnalysisTool\PhpLintTask; @@ -29,11 +30,13 @@ public function testConstruction($class) { $fixture = $this->prophesize(Fixture::class)->reveal(); /** @var \Symfony\Component\Console\Style\SymfonyStyle $output */ $output = $this->prophesize(SymfonyStyle::class)->reveal(); + /** @var \Acquia\Orca\Task\PhpcsConfigurator $phpcs_configurator */ + $phpcs_configurator = $this->prophesize(PhpcsConfigurator::class)->reveal(); /** @var \Acquia\Orca\Utility\ProcessRunner $process_runner */ $process_runner = $this->prophesize(ProcessRunner::class)->reveal(); $project_dir = '/var/www/orca'; - $object = new $class($config_file_overrider, $filesystem, $fixture, $output, $process_runner, $project_dir); + $object = new $class($config_file_overrider, $filesystem, $fixture, $output, $phpcs_configurator, $process_runner, $project_dir); $this->assertInstanceOf($class, $object, sprintf('Successfully instantiated class: %s.', $class)); } From 35bf414a14959150f5bc23267afb2b3bbad42018 Mon Sep 17 00:00:00 2001 From: TravisCarden Date: Thu, 10 Oct 2019 13:45:09 -0400 Subject: [PATCH 04/18] Increased ORCA build history limit in after_script.sh. --- bin/travis/after_script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/travis/after_script.sh b/bin/travis/after_script.sh index 0242cac78..53a17d79b 100755 --- a/bin/travis/after_script.sh +++ b/bin/travis/after_script.sh @@ -19,4 +19,4 @@ fi # Show ORCA's own current build status. A failure may signify an upstream issue # or service level outage that could have affected this build. # @see https://travis-ci.org/acquia/orca/branches -travis history --no-interactive --repo=acquia/orca --branch=master --limit=1 --date +travis history --no-interactive --repo=acquia/orca --branch=master --limit=2 --date From 3dbdbb0ad6ef8ff9a2e306b71ff751c2309ec669 Mon Sep 17 00:00:00 2001 From: Travis Carden Date: Mon, 14 Oct 2019 14:08:18 -0400 Subject: [PATCH 05/18] Added example notifications to example/.travis.yml (#47) --- example/.travis.yml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/example/.travis.yml b/example/.travis.yml index 96b310c6e..74b8f1019 100644 --- a/example/.travis.yml +++ b/example/.travis.yml @@ -125,3 +125,36 @@ after_failure: ../orca/bin/travis/after_failure.sh # Perform final, post-script tasks. after_script: ../orca/bin/travis/after_script.sh + +# Get build notifications. +# @see https://docs.travis-ci.com/user/notifications +# notifications: +# slack: +# # @see https://docs.travis-ci.com/user/notifications#configuring-slack-notifications +# rooms: +# # Get this value from your Slack Travis CI app configuration and encrypt +# # it if your .travis.yml is stored in a public repository. +# # @see https://docs.travis-ci.com/user/notifications#configuring-slack-notifications +# # @see https://github.com/travis-ci/travis.rb#encrypt +# - secure: example_value_hdfgubdsifgudfbgs3453durghssecurestringidsuag34522irueg= +# # Limit to when the build changes from passing to failing or vice versa. +# on_success: change +# on_failure: change +# # Limit to the major version branches. +# if: branch = env(ORCA_SUT_BRANCH) +# email: +# # @see https://docs.travis-ci.com/user/notifications#configuring-email-notifications +# recipients: +# # Email distribution lists (groups) are preferable to individual addresses +# # so that personnel changes don't require corresponding code changes. +# # Though the online documentation doesn't explicitly mention it, this +# # value can also be encrypted if your .travis.yml is stored in a public +# # repository, e.g.: +# # @code travis encrypt username@example.com +# # @see https://github.com/travis-ci/travis.rb#encrypt +# - secure: example_value_hdfgubdsifgudfbgs3453durghssecurestringidsuag34522irueg= +# # Limit to when the build changes from passing to failing or vice versa. +# on_success: change +# on_failure: change +# # Limit to the major version branches. +# if: branch = env(ORCA_SUT_BRANCH) From 8e1ac08bfa7e41043db4aff438df3224584e7616 Mon Sep 17 00:00:00 2001 From: TravisCarden Date: Fri, 18 Oct 2019 10:25:05 -0400 Subject: [PATCH 06/18] Stopped sending telemetry for example module. --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a0fb3a69a..e48eacb0d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,7 +26,6 @@ env: - ORCA_PACKAGES_CONFIG=tests/Fixture/packages.yml - ORCA_PACKAGES_CONFIG_ALTER=example/tests/packages_alter.yml - ORCA_SUT_DIR=${TRAVIS_BUILD_DIR}/../example - - ORCA_TELEMETRY_ENABLE=TRUE matrix: fast_finish: true From 669e32e5b17600f696e929eb07599af3b0f120b0 Mon Sep 17 00:00:00 2001 From: Travis Carden Date: Wed, 6 Nov 2019 14:29:25 -0500 Subject: [PATCH 07/18] Updated application and documentation for Packagist release (#49) * Changed UI, documentation, and code references to "Acquia" to "company". * Made various documentation improvements. * Added support for installing ORCA via `composer create-project` rather than `git clone`. --- bin/travis/after_failure.sh | 4 +- bin/travis/before_install.sh | 6 ++- bin/travis/before_script.sh | 3 +- bin/travis/install.sh | 2 +- composer.json | 2 +- config/packages.yml | 2 +- docs/README.md | 16 ++++--- docs/getting-started.md | 38 +++++++--------- docs/glossary.md | 27 +++++++----- docs/understanding-orca.md | 19 ++++---- example/.travis.yml | 11 ++--- example/README.md | 3 +- .../FixtureEnableExtensionsCommand.php | 20 ++++----- src/Command/Fixture/FixtureInitCommand.php | 12 ++--- .../Fixture/FixtureInstallSiteCommand.php | 2 +- src/Command/Qa/QaAutomatedTestsCommand.php | 2 +- ...nabler.php => CompanyExtensionEnabler.php} | 22 +++++----- src/Fixture/FixtureCreator.php | 44 +++++++++---------- src/Fixture/SiteInstaller.php | 20 ++++----- src/Fixture/SubextensionManager.php | 8 ++-- .../FixtureEnableExtensionsCommandTest.php | 16 +++---- 21 files changed, 142 insertions(+), 137 deletions(-) rename src/Fixture/{AcquiaExtensionEnabler.php => CompanyExtensionEnabler.php} (90%) diff --git a/bin/travis/after_failure.sh b/bin/travis/after_failure.sh index 85e6e0de7..196a600d5 100755 --- a/bin/travis/after_failure.sh +++ b/bin/travis/after_failure.sh @@ -1,13 +1,13 @@ #!/usr/bin/env bash # NAME -# after_failure.sh - Display debugging information in case of build failure. +# after_failure.sh - Display debugging information. # # SYNOPSIS # after_failure.sh # # DESCRIPTION -# Displays Drupal error log. +# Displays debugging information in case of failure. cd "$(dirname "$0")" || exit; source _includes.sh diff --git a/bin/travis/before_install.sh b/bin/travis/before_install.sh index c71db9611..486fe97cf 100755 --- a/bin/travis/before_install.sh +++ b/bin/travis/before_install.sh @@ -43,8 +43,10 @@ composer global require \ # Install Travis command line client. gem install travis -# Install ORCA. -composer -d"$ORCA_ROOT" install +# Download and install ORCA libraries if necessary. This provides compatibility +# with the old method of installing ORCA via `git clone` rather than the newer +# `composer create-project` approach. +[[ -d "$ORCA_ROOT/vendor" ]] || composer -d"$ORCA_ROOT" install orca --version diff --git a/bin/travis/before_script.sh b/bin/travis/before_script.sh index 4d31131c6..9b11d595d 100755 --- a/bin/travis/before_script.sh +++ b/bin/travis/before_script.sh @@ -7,8 +7,7 @@ # before_script.sh # # DESCRIPTION -# Displays information about installed Composer packages and Drupal -# projects. +# Displays details about the fixture for debugging purposes. cd "$(dirname "$0")" || exit; source _includes.sh diff --git a/bin/travis/install.sh b/bin/travis/install.sh index 6b919eb6a..8b7531b2b 100755 --- a/bin/travis/install.sh +++ b/bin/travis/install.sh @@ -7,7 +7,7 @@ # install.sh # # DESCRIPTION -# Creates the test fixture. +# Creates the test fixture and places the SUT. cd "$(dirname "$0")" || exit; source _includes.sh diff --git a/composer.json b/composer.json index a25d01c1e..8f8b35e91 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,6 @@ { "name": "acquia/orca", - "description": "A tool for testing all of Acquia's software packages together in the context of a realistic, functioning, best practices Drupal build", + "description": "A tool for testing a company's software packages together in the context of a realistic, functioning, best practices Drupal build", "license": "GPL-2.0-or-later", "authors": [ { diff --git a/config/packages.yml b/config/packages.yml index e3126a6b7..4322ce3c3 100644 --- a/config/packages.yml +++ b/config/packages.yml @@ -1,5 +1,5 @@ --- -# An array of Acquia software package data. Each package datum is keyed by its +# An array of company software package data. Each package datum is keyed by its # package name, i.e., the "name" property in its composer.json file, e.g., # "drupal/example", and has a corresponding array value that may contain the # following key-value pairs: diff --git a/docs/README.md b/docs/README.md index d98610dd0..bf5da6304 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,16 +1,20 @@ # ORCA +[![Latest Stable Version](https://poser.pugx.org/acquia/orca/v/stable)](https://packagist.org/packages/acquia/orca) +[![Total Downloads](https://poser.pugx.org/acquia/orca/downloads)](https://packagist.org/packages/acquia/orca) +[![Latest Unstable Version](https://poser.pugx.org/acquia/orca/v/unstable)](https://packagist.org/packages/acquia/orca) +[![License](https://poser.pugx.org/acquia/orca/license)](https://packagist.org/packages/acquia/orca) [![Build Status](https://travis-ci.org/acquia/orca.svg?branch=master)](https://travis-ci.org/acquia/orca) -ORCA (Official Representative Customer Application) is a tool for testing Acquia software packages. It ensures their cross compatibility and correct functioning by installing all of them together into a realistic, functioning, best practices Drupal build and running automated tests on them. Its guiding design principle is to use Acquia packages as a customer would. It installs the latest recommended versions and performs no manual setup or configuration. +ORCA (Official Representative Customer Application) is a tool for testing a company's Drupal-adjacent software packages. It ensures their cross compatibility and correct functioning by installing all of them together into a realistic, functioning, best practices Drupal build and running automated tests and static code analysis on them. Its guiding design principle is to use company packages as a customer would. It installs the latest recommended versions via Composer and performs no manual setup or configuration. | What does it do? | What is the value? | | --- | --- | -| Adds all Acquia packages to a BLT project via Composer, installs them and their submodules, and runs their automated tests. | Ensures that all Acquia packages can be added to the same codebase via Composer (prevents dependency conflicts), that there are no install time or functional conflicts between them, and that they have no undeclared dependencies, and prevents regressions. | -| Adds only the package under test to a BLT project via Composer, installs it and its submodules, and runs its automated tests. | Ensures that the package under test has no undeclared dependencies on other Acquia packages and functions correctly on its own. | -| Performs the above tests with the recommended, stable versions of Acquia packages. | Ensures that the package under test still works with the versions of other software already released and in use and prevents releases of the package from disrupting the ecosystem. | -| Performs the above tests using the latest development versions of Acquia packages. | Ensures that the package under test will continue to work when new versions of other software are released and prevents changes in the ecosystem from breaking the package. Forces early awareness and collaboration between project teams and prevents rework and emergency support situations. | -| Performs the above tests using a threefold spread of Drupal core versions: the previous minor release, the current supported release, and the next minor dev version. | Ensures that the package under test still works with both supported releases of Drupal and will continue to work with the next one. | +| Adds all company packages to a BLT project via Composer, installs them and their subextensions, and runs their automated tests. | Ensures that all company packages can be added to the same codebase via Composer (prevents dependency conflicts), that there are no adverse install time or functional interactions between them, and that they have no undeclared dependencies, and prevents regressions. | +| Adds only the package under test to a BLT project via Composer, installs it and its subextensions, and runs its automated tests. | Ensures that the package under test has no undeclared dependencies on other company packages and functions correctly on its own. | +| Performs the above tests with the recommended, stable versions of company packages, Drush, and Drupal Console. | Ensures that the package under test still works with the versions of other software already released and in use and prevents releases of the package from disrupting the ecosystem. | +| Performs the above tests using the latest development versions of company packages, Drush, and Drupal Console. | Ensures that the package under test will continue to work when new versions of other software are released and prevents changes in the ecosystem from breaking the package. Forces early awareness and collaboration between project teams and prevents rework and release day emergency support situations. | +| Performs the above tests using a threefold spread of Drupal core versions: the previous minor release, the current supported release, and the next minor dev version. | Ensures that the package under test still works with both supported releases of Drupal and will continue to work when the next one drops. | | Performs static analysis of the package under test. | Ensures low level construction quality. (Prevents PHP warnings and errors, version incompatibility, etc.) | See [Continuous integration](understanding-orca.md#Continuous-integration) for exact details. diff --git a/docs/getting-started.md b/docs/getting-started.md index cd907b7a7..97ff0aac6 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -11,14 +11,14 @@ ORCA's primary use case is in a continuous integration workflow, running against pull requests and commits. It provides several scripts in `bin/travis` corresponding to Travis CI phases: -* **[`before_install.sh`](../bin/travis/before_install.sh)** prepares the environment and installs ORCA. -* **[`install.sh`](../bin/travis/install.sh)** creates the test fixture and places the system under test (SUT). +* **[`before_install.sh`](../bin/travis/before_install.sh)** configures the Travis CI environment, installs ORCA, and prepares the SUT. +* **[`install.sh`](../bin/travis/install.sh)** creates the test fixture and places the SUT. * **[`before_script.sh`](../bin/travis/before_script.sh)** displays details about the fixture for debugging purposes. -* **[`script.sh`](../bin/travis/script.sh)** runs static analysis and automated tests. +* **[`script.sh`](../bin/travis/script.sh)** runs static code analysis and automated tests. * **[`before_cache.sh`](../bin/travis/before_cache.sh)** is reserved for future use. * **[`after_success.sh`](../bin/travis/after_success.sh)** is reserved for future use. -* **[`after_failure.sh`](../bin/travis/after_failure.sh)** displays debugging information in case of job failure. -* **[`after_script.sh`](../bin/travis/after_script.sh)** is reserved for future use. +* **[`after_failure.sh`](../bin/travis/after_failure.sh)** displays debugging information in case of failure. +* **[`after_script.sh`](../bin/travis/after_script.sh)** conditionally logs the job and displays upstream ORCA status. See [`example/.travis.yml`](../example/.travis.yml) for an example Travis CI configuration. Features are explained in the comments. @@ -38,31 +38,25 @@ ORCA can also be installed and run locally for testing and development. Follow t PARENT_DIR="$HOME/Projects" ``` -1. Clone ORCA and your package(s) each into the directory, e.g.: +1. Install ORCA and clone your package(s) each into the directory, e.g.: ```bash - git clone git@github.com:acquia/orca.git "${PARENT_DIR}/orca" + composer create-project acquia/orca "${PARENT_DIR}/orca" git clone git@github.com:acquia/EXAMPLE.git "${PARENT_DIR}/EXAMPLE" ``` -1. Install ORCA with Composer, e.g.: - - ```bash - composer install --no-dev --working-dir="${PARENT_DIR}/orca" - ``` - 1. Optionally make the commandline executable globally-accessible... - Via symlink, e.g.: ```bash - ln -s path/to/orca/bin/orca /usr/local/bin/orca + ln -s /path/to/orca/bin/orca /usr/local/bin/orca ``` - Or via alias, e.g.: ```bash - alias orca="path/to/orca/bin/orca" + alias orca="/path/to/orca/bin/orca" ``` (Add this to your `.bash_profile`/`.bashrc` or equivalent to make it permanent.) @@ -71,19 +65,19 @@ ORCA can also be installed and run locally for testing and development. Follow t ```bash # Bash: - bash $(path/to/orca _completion --generate-hook) + bash $(/path/to/orca _completion --generate-hook) # Zsh: - source <(path/to/orca _completion --generate-hook) + source <(/path/to/orca _completion --generate-hook) ``` -Invoke ORCA from the terminal (`bin/orca`). Use the `--help` command option to learn more about the various commands or see how they're used in [`bin/travis/script`](../bin/travis/script). Use the `fixture:run-server` command to run the web server for local development. +Invoke ORCA from the terminal (`bin/orca`). Use the `--help` command option to learn more about the various commands or see how they're used in [`bin/travis/script.sh`](../bin/travis/script.sh). Use the `fixture:run-server` command to run the web server for local development. ## Running automated tests ### PHPUnit -ORCA has out-of-the-box support for [PHPUnit in Drupal 8](https://www.drupal.org/docs/8/phpunit) using core's configuration. Existing tests that work in Drupal should work in ORCA with no modification. [See a working example.](../example/tests/src/Unit/ExampleUnitTest.php) +ORCA has out-of-the-box support for [PHPUnit in Drupal](https://www.drupal.org/docs/8/phpunit) using core's configuration. Existing tests that work in Drupal should work in ORCA with no modification. [See a working example.](../example/tests/src/Unit/ExampleUnitTest.php) #### Behat @@ -108,11 +102,11 @@ ORCA uses tags (for Behat) and groups (for PHPUnit) to determine which tests to | Integrated tests (own) | ✓ | ✓ | | | Integrated tests (others') | | ✓ | | -The default behavior is to run a test only when the package providing it is the SUT--not when it is merely included in another package's test fixture. Any test not designated public or ignored is so treated. Such tests are referred to as "private tests". This should be considered the correct choice for most tests--particularly for features that involve little or no risk of conflict with other Acquia packages, including [isolated unit tests](http://wiki.c2.com/?UnitTestIsolation) by definition. +The default behavior is to run a test only when the package providing it is the SUT--not when it is merely included in another package's test fixture. Any test not designated public or ignored is so treated. Such tests are referred to as "private tests". This should be considered the correct choice for most tests--particularly for features that involve little or no risk of conflict with other company packages, including [isolated unit tests](glossary.md#isolated-unit-tests) by definition. -Public PHPUnit tests (`orca_public`) are _always_ run, including when testing packages other than the one providing them. (Behat has proved a source of too much instability to inflict across the board, so the default Travis CI jobs _never_ run non-SUT Behat tests.) For example, a public PHPUnit test provided by Lightning API will also be run during tests of Acquia Commerce Manager, Acquia Lift, and the rest. Public tests thus lengthen builds for _all Acquia packages_ and should be used judiciously. Reserve them for high value features with meaningful risk of being broken by other packages, and make them as fast as possible. +Public PHPUnit tests (`orca_public`) are _always_ run, including when testing packages other than the one providing them. (Behat has proved a source of too much instability to inflict across the board, so the default Travis CI jobs _never_ run non-SUT Behat tests.) In Acquia's implementation, for example, a public PHPUnit test provided by Lightning API will also be run during tests of Acquia Lift, Acquia Purge, and the rest. Public tests thus lengthen builds for _all company packages_ and should be used judiciously. Reserve them for high value features with meaningful risk of being broken by other packages, and make them as fast as possible. -Ignored tests (`orca_ignore`) are "ignored" and _never_ run by ORCA. Tests should be ignored when they depend upon setup or preconditions that ORCA doesn't provide, such as a fixture with unique dependencies or a database populated by SQL dump. Once ignored, such tests can be scripted to run apart from ORCA after custom setup. In practice, it should rarely be necessary to ignore a test, as most setup and teardown can be accomplished through [Behat hooks](http://behat.org/en/latest/user_guide/context/hooks.html) and [PHPUnit template methods](https://phpunit.de/manual/6.5/en/fixtures.html). +Ignored tests (`orca_ignore`) are "ignored" and _never_ run by ORCA. Tests should be ignored when they depend upon setup or preconditions that ORCA doesn't provide, such as a fixture with unique dependencies or a database populated by SQL dump. Once ignored, such tests can be scripted to run apart from ORCA after custom setup. In practice, it should rarely be necessary to ignore a test, as most setup and teardown can be accomplished through [PHPUnit template methods](https://phpunit.de/manual/6.5/en/fixtures.html) and [Behat hooks](http://behat.org/en/latest/user_guide/context/hooks.html). --- diff --git a/docs/glossary.md b/docs/glossary.md index 1ce7e9f09..115f40032 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -7,6 +7,7 @@ * [Ignored tests](#ignored-tests) * [Integrated test](#integrated-test) * [Isolated test](#isolated-test) +* [Isolated unit tests](#isolated-unit-tests) * [Non-SUT tests](#non-sut-tests) * [ORCA](#orca) * [ORCA internals](#orca-internals) @@ -24,11 +25,11 @@ ## Bare fixture -A [test fixture](#test-fixture) that neither includes nor installs any [SUT](#sut) or other Acquia packages (except of course for BLT which is the foundation of all fixtures). +A [test fixture](#test-fixture) that neither includes nor installs any [SUT](#sut) or other company packages (except of course for BLT which is the foundation of all fixtures). ## Behat -| 'bēhat | An open source Behavior-Driven Development framework for PHP. [[Website]](http://behat.org/) ORCA automatically runs [public](#public-tests) and [private](#private-tests) Behat tests in Acquia packages using any `behat.yml` files found in their root directories. See also [ignored tests](#ignored-tests). +| 'bēhat | An open source Behavior-Driven Development framework for PHP. [[Website]](http://behat.org/) ORCA automatically runs [public](#public-tests) and [private](#private-tests) Behat tests in the SUT only using a `behat.yml` files found in its root directory if present. See also [ignored tests](#ignored-tests). ## BLT @@ -40,19 +41,23 @@ Automated tests that ORCA "ignores" and never runs. These are designated with an ## Integrated test -A test of the [SUT](#sut) in the presence of all other Acquia packages (i.e., in a [standard fixture](#standard-fixture)). [Read more in Understanding ORCA.](understanding-orca.md#automated-tests) +A test of the [SUT](#sut) in the presence of all other company packages (i.e., in a [standard fixture](#standard-fixture)). [Read more in Understanding ORCA.](understanding-orca.md#automated-tests) ## Isolated test A test of the [SUT](#sut) in the absence of other non-required packages (i.e., in a [SUT-only fixture](#sut-only-fixture)). [Read more in Understanding ORCA.](understanding-orca.md#automated-tests) +## Isolated unit tests + +Unit tests that run "in isolation", i.e., separate and apart from the application and all other units. See [Unit Test Isolation](http://wiki.c2.com/?UnitTestIsolation). + ## Non-SUT tests -Automated tests provided by Acquia packages other than the [SUT](#sut). +Automated tests provided by company packages other than the [SUT](#sut). ## ORCA -Official Representative Customer Application: a tool for testing all of Acquia's software packages together in the context of a realistic, functioning, best practices Drupal build. (You are here.) +Official Representative Customer Application: a tool for testing all of a company's software packages together in the context of a realistic, functioning, best practices Drupal build. (You are here.) ## ORCA internals @@ -60,7 +65,7 @@ ORCA may be thought of as providing two interfaces: a "porcelain" interface comp ## PHPUnit -A programmer-oriented testing framework used by Drupal. [[Website]](https://phpunit.de/) [[Drupal.org]](https://www.drupal.org/docs/8/phpunit) ORCA automatically runs [public](#public-tests) and [private](#private-tests) PHPUnit tests found in Acquia packages. See also [ignored tests](#ignored-tests). +A programmer-oriented testing framework used by Drupal. [[Website]](https://phpunit.de/) [[Drupal.org]](https://www.drupal.org/docs/8/phpunit) ORCA automatically runs [public](#public-tests) and [private](#private-tests) PHPUnit tests found in company packages. See also [ignored tests](#ignored-tests). ## Private tests @@ -68,15 +73,15 @@ Automated tests that ORCA runs only when the package that provides them is the [ ## Public tests -Automated tests that ORCA runs regardless of whether or not the package that provides them is the [SUT](#sut). These are designated with an `orca_public` tag ([Behat](#behat)) or group ([PHPUnit](#phpunit)). Public tests should be limited to those covering features at the greatest risk of being broken by the presence or action of other Acquia packages, and they should be as fast as possible since they will be run on all other Acquia packages' builds. [Read more in Designing automated tests: Tagging/grouping.](getting-started.md#tagginggrouping) +Automated tests that ORCA runs regardless of whether or not the package that provides them is the [SUT](#sut). These are designated with an `orca_public` tag ([Behat](#behat)) or group ([PHPUnit](#phpunit)). Public tests should be limited to those covering features at the greatest risk of being broken by the presence or action of other company packages, and they should be as fast as possible since they will be run on all other company packages' builds. [Read more in Designing automated tests: Tagging/grouping.](getting-started.md#tagginggrouping) ## Standard fixture -A [test fixture](#test-fixture) that includes and installs the [SUT](#sut) as well as all other Acquia packages. See also [integrated test](#integrated-test). +A [test fixture](#test-fixture) that includes and installs the [SUT](#sut) as well as all other company packages. See also [integrated test](#integrated-test). ## SUT -| so͞ot | System Under Test: in automated testing, the software that is being tested for correct operation. In ORCA, that means an Acquia package. +| so͞ot | System Under Test: in automated testing, the software that is being tested for correct operation. In ORCA, that means a company package. ## SUT tests @@ -84,11 +89,11 @@ Automated tests provided by the [SUT](#sut). ## SUT-only fixture -A [test fixture](#test-fixture) that includes and installs the [SUT](#sut) and omits all other non-required Acquia packages. See also [isolated test](#isolated-test). +A [test fixture](#test-fixture) that includes and installs the [SUT](#sut) and omits all other non-required company packages. See also [isolated test](#isolated-test). ## Test fixture -In automated testing, a test fixture is all the things we need to have in place in order to run a test and expect a particular outcome.[[cit.]](http://xunitpatterns.com/test%20fixture%20-%20xUnit.html) In the case of ORCA, that means a [BLT](#blt) project with all applicable Acquia software packages in place and Drupal installed. [Read more in Getting Started.](getting-started.md#test-fixtures) +In automated testing, a test fixture is all the things we need to have in place in order to run a test and expect a particular outcome.[[cit.]](http://xunitpatterns.com/test%20fixture%20-%20xUnit.html) In the case of ORCA, that means a [BLT](#blt) project with all applicable company software packages in place and Drupal installed. [Read more in Understanding ORCA.](understanding-orca.md#test-fixtures) --- diff --git a/docs/understanding-orca.md b/docs/understanding-orca.md index 4bfe2e54d..3b5907763 100644 --- a/docs/understanding-orca.md +++ b/docs/understanding-orca.md @@ -8,7 +8,7 @@ ## The basics -ORCA is a [Symfony Console](https://symfony.com/doc/current/components/console.html) application. It requires PHP, Composer, SQLite (which it uses to avoid a MySQL requirement on the host), and Git. It expects to be installed in a directory adjacent to the [system under test (SUT)](glossary.md#sut). It creates its [test fixtures](glossary.md#test-fixture) under the same parent, e.g.: +At its heart, ORCA is a [Symfony Console](https://symfony.com/doc/current/components/console.html) application. It requires PHP, Composer, SQLite (which it uses to avoid a MySQL requirement on the host), and Git. It expects to be installed in a directory adjacent to the [system under test (SUT)](glossary.md#sut). It creates its [test fixtures](glossary.md#test-fixture) under the same parent, e.g.: ``` . @@ -18,12 +18,14 @@ ORCA is a [Symfony Console](https://symfony.com/doc/current/components/console.h └── orca-build # The test fixture ``` +Note: The fixture directory can be changed at runtime via [environment variable](advanced-usage.md#ORCA_FIXTURE_DIR). + ## Test fixtures -An ORCA test fixture is comprised of a [BLT](glossary.md#blt) project with one or all Acquia software packages (as specified in [`config/packages.yml`](../config/packages.yml)) added via Composer. There are two basic kinds: +An ORCA test fixture is comprised of a [BLT](glossary.md#blt) project with one or all company software packages (as specified by default in [`config/packages.yml`](../config/packages.yml) and configurable via [environment variables](advanced-usage.md#ORCA_PACKAGES_CONFIG)) added via Composer. There are two basic kinds: -* A **standard fixture** includes and installs the SUT as well as all other Acquia packages. -* A **SUT-only fixture** includes and installs the SUT and omits all other non-required Acquia packages. +* A **standard fixture** includes and installs the SUT as well as all other company packages. +* A **SUT-only fixture** includes and installs the SUT and omits all other non-required company packages. Packages are included at one of two levels of stability: @@ -39,10 +41,7 @@ ORCA checks the SUT for low level construction defects using the following stati * [Composer validate](https://getcomposer.org/doc/03-cli.md#validate) checks `composer.json` files for validity and completeness. * [Composer normalize](https://github.com/localheinz/composer-normalize) checks `composer.json` files for consistent ordering and formatting. * [PHP Parallel Lint](https://github.com/JakubOnderka/PHP-Parallel-Lint) checks PHP files for syntax errors. -* [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) detects coding standards violations using the following rulesets: - * [Drupal Code Sniffer](https://packagist.org/packages/drupal/coder) encapsulates [Drupal coding standards](https://www.drupal.org/coding-standards ) and best practices for module development. - * [PHPCompatibility](https://github.com/PHPCompatibility/PHPCompatibility) checks for PHP cross-version compatibility with all supported language versions. - * [phpcs-security-audit](https://packagist.org/packages/pheromone/phpcs-security-audit) finds vulnerabilities and weaknesses related to security in PHP code. +* [Acquia Coding Standards for PHP](https://github.com/acquia/coding-standards-php) checks for coding standards and best practices compliance, checks for PHP cross-version compatibility with all supported language versions, and finds vulnerabilities and weaknesses related to security in PHP code. * [PHP Mess Detector](https://phpmd.org/) looks for potential problems in PHP source code, such as possible bugs, suboptimal code, overcomplicated expressions, and unused parameters, methods, and properties. * The [Symfony YAML Linter](https://symfony.com/doc/current/components/yaml.html) checks YAML files for syntax errors. @@ -52,8 +51,8 @@ Static analysis requires no special setup of the SUT. ORCA tests for functional and behavioral correctness with [PHPUnit](glossary.md#phpunit) and [Behat](glossary.md#behat). -* An **integrated test** tests the SUT in the _presence_ of all other Acquia packages (i.e., in a standard fixture) to ensure that all packages can be added to the same codebase via Composer (preventing dependency conflicts), that there are no install time or functional conflicts between them, and prevents regressions. -* An **isolated test** tests the SUT in the _absence_ of other non-required packages (i.e., in a SUT-only fixture) to ensure that it has no undeclared dependencies on other packages and functions correctly on its own. +* An **integrated test** exercises the SUT in the _presence_ of all other company packages (i.e., in a standard fixture) to ensure that all packages can be added to the same codebase via Composer and that there are no install time or functional conflicts between them. +* An **isolated test** exercises the SUT in the _absence_ of other non-required packages (i.e., in a SUT-only fixture) to ensure that it has no undeclared dependencies on other packages and functions correctly on its own. See [Designing automated tests](getting-started.md#designing-automated-tests). diff --git a/example/.travis.yml b/example/.travis.yml index 74b8f1019..a0a5a98ca 100644 --- a/example/.travis.yml +++ b/example/.travis.yml @@ -44,10 +44,11 @@ env: # This may be the destination branch of a pull request or the nearest # ancestor of a topic branch. - ORCA_SUT_BRANCH=8.x-1.x - # Specify the version of ORCA to use. Use the master branch for the latest - # release, develop for Dev/HEAD, or a tag name (e.g., v1.0.0) for a specific - # release. - - ORCA_VERSION=master + # Specify the version of ORCA to use. Use dev-master to track the latest + # release, dev-develop to track Dev/HEAD, or any other Composer version + # string. + # @see https://getcomposer.org/doc/articles/versions.md + - ORCA_VERSION=dev-master # If your package isn't in ORCA's packages.yml or conflicts with details # that are, you can modify the active packages configuration at runtime by # uncommenting the following line and specifying your own alter file. @@ -102,7 +103,7 @@ matrix: # Install ORCA and prepare the environment. before_install: - - git clone --branch ${ORCA_VERSION} --depth 1 https://github.com/acquia/orca.git ../orca + - composer create-project --no-dev acquia/orca ../orca "$ORCA_VERSION" - ../orca/bin/travis/before_install.sh # Create the test fixture and place the SUT. diff --git a/example/README.md b/example/README.md index 63dd91fb0..eb951ca7d 100644 --- a/example/README.md +++ b/example/README.md @@ -1,3 +1,4 @@ # Example Module -The Example module illustrates how to use ORCA. +The Example module illustrates how to use ORCA to test a Drupal module. See also [Configuring Travis CI +](../docs/getting-started.md#configuring-travis-ci). diff --git a/src/Command/Fixture/FixtureEnableExtensionsCommand.php b/src/Command/Fixture/FixtureEnableExtensionsCommand.php index fa486d0bd..9f2dcfe70 100644 --- a/src/Command/Fixture/FixtureEnableExtensionsCommand.php +++ b/src/Command/Fixture/FixtureEnableExtensionsCommand.php @@ -3,7 +3,7 @@ namespace Acquia\Orca\Command\Fixture; use Acquia\Orca\Enum\StatusCode; -use Acquia\Orca\Fixture\AcquiaExtensionEnabler; +use Acquia\Orca\Fixture\CompanyExtensionEnabler; use Acquia\Orca\Fixture\Fixture; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; @@ -23,11 +23,11 @@ class FixtureEnableExtensionsCommand extends Command { protected static $defaultName = 'fixture:enable-extensions'; /** - * The Acquia extension enabler. + * The company extension enabler. * - * @var \Acquia\Orca\Fixture\AcquiaExtensionEnabler + * @var \Acquia\Orca\Fixture\CompanyExtensionEnabler */ - private $acquiaExtensionEnabler; + private $companyExtensionEnabler; /** * The fixture. @@ -39,13 +39,13 @@ class FixtureEnableExtensionsCommand extends Command { /** * Constructs an instance. * - * @param \Acquia\Orca\Fixture\AcquiaExtensionEnabler $acquia_extension_enabler - * The Acquia extension enabler. + * @param \Acquia\Orca\Fixture\CompanyExtensionEnabler $company_extension_enabler + * The company extension enabler. * @param \Acquia\Orca\Fixture\Fixture $fixture * The fixture. */ - public function __construct(AcquiaExtensionEnabler $acquia_extension_enabler, Fixture $fixture) { - $this->acquiaExtensionEnabler = $acquia_extension_enabler; + public function __construct(CompanyExtensionEnabler $company_extension_enabler, Fixture $fixture) { + $this->companyExtensionEnabler = $company_extension_enabler; $this->fixture = $fixture; parent::__construct(self::$defaultName); } @@ -56,7 +56,7 @@ public function __construct(AcquiaExtensionEnabler $acquia_extension_enabler, Fi protected function configure() { $this ->setAliases(['enexts']) - ->setDescription('Enables all Acquia Drupal extensions'); + ->setDescription('Enables all company Drupal extensions'); } /** @@ -69,7 +69,7 @@ public function execute(InputInterface $input, OutputInterface $output): int { } try { - $this->acquiaExtensionEnabler->enable(); + $this->companyExtensionEnabler->enable(); } catch (\Exception $e) { $io = new SymfonyStyle($input, $output); diff --git a/src/Command/Fixture/FixtureInitCommand.php b/src/Command/Fixture/FixtureInitCommand.php index 6dbceb28a..a94b3845a 100644 --- a/src/Command/Fixture/FixtureInitCommand.php +++ b/src/Command/Fixture/FixtureInitCommand.php @@ -117,29 +117,29 @@ protected function configure() { $this ->setAliases(['init']) ->setDescription('Creates the test fixture') - ->setHelp('Creates a BLT-based Drupal site build, includes the system under test using Composer, optionally includes all other Acquia packages, and installs Drupal.') + ->setHelp('Creates a BLT-based Drupal site build, includes the system under test using Composer, optionally includes all other company packages, and installs Drupal.') // Fundamental options. ->addOption('force', 'f', InputOption::VALUE_NONE, 'If the fixture already exists, remove it first without confirmation') ->addOption('sut', NULL, InputOption::VALUE_REQUIRED, 'The system under test (SUT) in the form of its package name, e.g., "drupal/example"') - ->addOption('sut-only', NULL, InputOption::VALUE_NONE, 'Add only the system under test (SUT). Omit all other non-required Acquia packages') + ->addOption('sut-only', NULL, InputOption::VALUE_NONE, 'Add only the system under test (SUT). Omit all other non-required company packages') // Common options. - ->addOption('bare', NULL, InputOption::VALUE_NONE, 'Omit all non-required Acquia packages') + ->addOption('bare', NULL, InputOption::VALUE_NONE, 'Omit all non-required company packages') ->addOption('core', NULL, InputOption::VALUE_REQUIRED, implode(PHP_EOL, array_merge( ['Change the version of Drupal core installed:'], DrupalCoreVersion::commandHelp(), ['- Any version string Composer understands, see https://getcomposer.org/doc/articles/versions.md'] )), DrupalCoreVersion::CURRENT_RECOMMENDED) - ->addOption('dev', NULL, InputOption::VALUE_NONE, 'Use dev versions of Acquia packages') + ->addOption('dev', NULL, InputOption::VALUE_NONE, 'Use dev versions of company packages') ->addOption('profile', NULL, InputOption::VALUE_REQUIRED, 'The Drupal installation profile to use, e.g., "minimal". ("orca" is a pseudo-profile based on "minimal", with the Toolbar module enabled and Seven as the admin theme)', FixtureCreator::DEFAULT_PROFILE) // Uncommon options. ->addOption('ignore-patch-failure', NULL, InputOption::VALUE_NONE, 'Do not exit on failure to apply Composer patches. (Useful for debugging failures)') ->addOption('no-sqlite', NULL, InputOption::VALUE_NONE, 'Use the default BLT database includes instead of SQLite') ->addOption('no-site-install', NULL, InputOption::VALUE_NONE, 'Do not install Drupal. Supersedes the "--profile" option') - ->addOption('prefer-source', NULL, InputOption::VALUE_NONE, 'Force installation of non-Acquia packages from sources when possible, including VCS information. (Acquia packages are always installed from source.) Useful for core and contrib work') - ->addOption('symlink-all', NULL, InputOption::VALUE_NONE, 'Symlink all possible Acquia packages via local path repository. Packages absent from the expected location will be installed normally'); + ->addOption('prefer-source', NULL, InputOption::VALUE_NONE, 'Force installation of non-company packages from sources when possible, including VCS information. (Company packages are always installed from source.) Useful for core and contrib work') + ->addOption('symlink-all', NULL, InputOption::VALUE_NONE, 'Symlink all possible company packages via local path repository. Packages absent from the expected location will be installed normally'); } /** diff --git a/src/Command/Fixture/FixtureInstallSiteCommand.php b/src/Command/Fixture/FixtureInstallSiteCommand.php index a97dfe107..f4cc4d88d 100644 --- a/src/Command/Fixture/FixtureInstallSiteCommand.php +++ b/src/Command/Fixture/FixtureInstallSiteCommand.php @@ -61,7 +61,7 @@ protected function configure() { $this ->setAliases(['si']) ->setDescription('Installs the site') - ->setHelp('Installs Drupal and enables Acquia extensions.') + ->setHelp('Installs Drupal and enables company extensions.') ->addOption('force', 'f', InputOption::VALUE_NONE, 'Install without confirmation') ->addOption('profile', NULL, InputOption::VALUE_REQUIRED, 'The Drupal installation profile to use, e.g., "minimal". ("orca" is a pseudo-profile based on "testing", with the Toolbar module enabled and Seven as the admin theme)', FixtureCreator::DEFAULT_PROFILE); } diff --git a/src/Command/Qa/QaAutomatedTestsCommand.php b/src/Command/Qa/QaAutomatedTestsCommand.php index 37239bbc8..0b2e45201 100644 --- a/src/Command/Qa/QaAutomatedTestsCommand.php +++ b/src/Command/Qa/QaAutomatedTestsCommand.php @@ -105,7 +105,7 @@ protected function configure() { ->setAliases(['test']) ->setDescription('Runs automated tests') ->addOption('sut', NULL, InputOption::VALUE_REQUIRED, 'The system under test (SUT) in the form of its package name, e.g., "drupal/example"') - ->addOption('sut-only', NULL, InputOption::VALUE_NONE, 'Run tests from only the system under test (SUT). Omit tests from all other Acquia packages') + ->addOption('sut-only', NULL, InputOption::VALUE_NONE, 'Run tests from only the system under test (SUT). Omit tests from all other company packages') ->addOption('behat', NULL, InputOption::VALUE_NONE, 'Run only PHPUnit tests') ->addOption('phpunit', NULL, InputOption::VALUE_NONE, 'Run only Behat tests') ->addOption('no-servers', NULL, InputOption::VALUE_NONE, "Don't run the ChromeDriver and web servers"); diff --git a/src/Fixture/AcquiaExtensionEnabler.php b/src/Fixture/CompanyExtensionEnabler.php similarity index 90% rename from src/Fixture/AcquiaExtensionEnabler.php rename to src/Fixture/CompanyExtensionEnabler.php index 55ef70d37..7fb961259 100644 --- a/src/Fixture/AcquiaExtensionEnabler.php +++ b/src/Fixture/CompanyExtensionEnabler.php @@ -9,9 +9,9 @@ use Symfony\Component\Filesystem\Filesystem; /** - * Installs Acquia Drupal extensions. + * Installs company Drupal extensions. */ -class AcquiaExtensionEnabler { +class CompanyExtensionEnabler { use SutSettingsTrait; @@ -126,7 +126,7 @@ private function getFixtureSettings(): void { } /** - * Enables the Acquia extensions. + * Enables the company extensions. */ private function enableAcquiaExtensions(): void { if ($this->isBare) { @@ -139,16 +139,16 @@ private function enableAcquiaExtensions(): void { return; } - $this->output->section('Enabling Acquia modules & themes'); + $this->output->section('Enabling company modules & themes'); $this->enableModules(); $this->enableThemes(); } /** - * Enables the Acquia modules. + * Enables the company modules. */ private function enableModules(): void { - $module_list = $this->getAcquiaExtensionList(self::TYPE_MODULE); + $module_list = $this->getCompanyExtensionList(self::TYPE_MODULE); if (!$module_list) { return; } @@ -160,10 +160,10 @@ private function enableModules(): void { } /** - * Enables the Acquia themes. + * Enables the company themes. */ private function enableThemes(): void { - $theme_list = $this->getAcquiaExtensionList(self::TYPE_THEME); + $theme_list = $this->getCompanyExtensionList(self::TYPE_THEME); if (!$theme_list) { return; } @@ -175,15 +175,15 @@ private function enableThemes(): void { } /** - * Gets the list of Acquia extensions to enable. + * Gets the list of company extensions to enable. * * @param string $extension_type * The extension type: ::TYPE_MODULE or ::TYPE_THEME. * * @return string[] - * An indexed array of Acquia extension machine names. + * An indexed array of company extension machine names. */ - private function getAcquiaExtensionList(string $extension_type): array { + private function getCompanyExtensionList(string $extension_type): array { $extension_list = []; $top_level_packages = $this->packageManager->getAll(); diff --git a/src/Fixture/FixtureCreator.php b/src/Fixture/FixtureCreator.php index 457da3aaa..f878e4c8a 100644 --- a/src/Fixture/FixtureCreator.php +++ b/src/Fixture/FixtureCreator.php @@ -320,7 +320,7 @@ public function setSqlite(bool $use_sqlite): void { * Sets the symlink all flag. * * @param bool $symlink_all - * TRUE to symlink all Acquia packages or FALSE not to. + * TRUE to symlink all company packages or FALSE not to. */ public function setSymlinkAll(bool $symlink_all): void { $this->symlinkAll = $symlink_all; @@ -389,7 +389,7 @@ private function fixDefaultDependencies(): void { // via a local "path" repository. 'acquia/lightning', ], - // Other Acquia packages are only conditionally required later and should + // Other company packages are only conditionally required later and should // in no case be included up-front. $this->getUnwantedPackageList() ), $fixture_path); @@ -449,7 +449,7 @@ private function getUnwantedPackageList(): array { } /** - * Adds Acquia packages to the codebase. + * Adds company packages to the codebase. * * @throws \Acquia\Orca\Exception\OrcaException * If the SUT isn't properly installed. @@ -459,27 +459,27 @@ private function addAcquiaPackages(): void { return; } - $this->output->section('Adding Acquia packages'); + $this->output->section('Adding company packages'); $this->addTopLevelAcquiaPackages(); - $this->addAcquiaSubextensions(); - $this->commitCodeChanges('Added Acquia packages.'); + $this->addCompanySubextensions(); + $this->commitCodeChanges('Added company packages.'); } /** - * Adds the top-level Acquia packages to composer.json. + * Adds the top-level company packages to composer.json. * * @throws \Acquia\Orca\Exception\OrcaException * If the SUT isn't properly installed. */ private function addTopLevelAcquiaPackages(): void { $this->addPathRepositories(); - $this->configureComposerForTopLevelAcquiaPackages(); - $this->composerRequireTopLevelAcquiaPackages(); + $this->configureComposerForTopLevelCompanyPackages(); + $this->composerRequireTopLevelCompanyPackages(); $this->verifySut(); } /** - * Adds Composer path repositories for Acquia packages. + * Adds Composer path repositories for company packages. * * Repositories take precedence in the order specified (i.e., first match * found wins), so our overrides need to be added to the beginning in order @@ -540,9 +540,9 @@ private function addComposerExtraData(): void { } /** - * Configures Composer to install Acquia packages from source. + * Configures Composer to install company packages from source. */ - private function configureComposerForTopLevelAcquiaPackages(): void { + private function configureComposerForTopLevelCompanyPackages(): void { $packages = $this->packageManager->getAll(); if (!$packages) { @@ -572,11 +572,11 @@ private function configureComposerForTopLevelAcquiaPackages(): void { } /** - * Requires the top-level Acquia packages via Composer. + * Requires the top-level company packages via Composer. * * @throws \Acquia\Orca\Exception\OrcaException */ - private function composerRequireTopLevelAcquiaPackages(): void { + private function composerRequireTopLevelCompanyPackages(): void { $command = [ 'composer', 'require', @@ -585,7 +585,7 @@ private function composerRequireTopLevelAcquiaPackages(): void { if ($this->preferSource) { $command[] = '--prefer-source'; } - $command = array_merge($command, $this->getAcquiaPackageDependencies()); + $command = array_merge($command, $this->getCompanyPackageDependencies()); $this->processRunner->runOrcaVendorBin($command, $this->fixture->getPath()); } @@ -653,14 +653,14 @@ private function displayFailedSymlinkDebuggingInfo() { } /** - * Gets the list of Composer dependency strings for Acquia packages. + * Gets the list of Composer dependency strings for company packages. * * @return string[] - * The list of Composer dependency strings for Acquia packages. + * The list of Composer dependency strings for company packages. * * @throws \Acquia\Orca\Exception\OrcaException */ - private function getAcquiaPackageDependencies(): array { + private function getCompanyPackageDependencies(): array { $dependencies = ($this->symlinkAll) ? $this->getLocalPackages() : $this->packageManager->getAll(); if ($this->isSutOnly) { $dependencies = [$this->sut]; @@ -796,9 +796,9 @@ private function getLocalPackageVersion(Package $package): string { } /** - * Adds Acquia subextensions to the fixture. + * Adds company subextensions to the fixture. */ - private function addAcquiaSubextensions(): void { + private function addCompanySubextensions(): void { $this->configureComposerForLocalSubextensions(); $this->composerRequireSubextensions(); } @@ -886,7 +886,7 @@ private function getLocalSubextensionPackageNames(): array { } /** - * Requires the Acquia subextensions via Composer. + * Requires the company subextensions via Composer. */ private function composerRequireSubextensions(): void { $subextensions = []; @@ -1016,7 +1016,7 @@ protected function ensureDrupalSettings(): void { /** * Installs the site. * - * Installs Drupal and enables Acquia extensions. + * Installs Drupal and enables company extensions. * * @throws \Exception */ diff --git a/src/Fixture/SiteInstaller.php b/src/Fixture/SiteInstaller.php index aafe236a1..c67b891f6 100644 --- a/src/Fixture/SiteInstaller.php +++ b/src/Fixture/SiteInstaller.php @@ -11,7 +11,7 @@ use Symfony\Component\Process\Exception\ProcessFailedException; /** - * Installs a site and enables Acquia extensions. + * Installs a site and enables company extensions. */ class SiteInstaller { @@ -37,11 +37,11 @@ class SiteInstaller { private $baseProfilePath; /** - * The Acquia extension enabler. + * The company extension enabler. * - * @var \Acquia\Orca\Fixture\AcquiaExtensionEnabler + * @var \Acquia\Orca\Fixture\CompanyExtensionEnabler */ - private $acquiaExtensionEnabler; + private $companyExtensionEnabler; /** * The filesystem. @@ -95,8 +95,8 @@ class SiteInstaller { /** * Constructs an instance. * - * @param \Acquia\Orca\Fixture\AcquiaExtensionEnabler $acquia_extension_enabler - * The Acquia extension enabler. + * @param \Acquia\Orca\Fixture\CompanyExtensionEnabler $company_extension_enabler + * The company extension enabler. * @param \Symfony\Component\Filesystem\Filesystem $filesystem * The filesystem. * @param \Acquia\Orca\Fixture\Fixture $fixture @@ -108,8 +108,8 @@ class SiteInstaller { * @param \Symfony\Component\Console\Style\SymfonyStyle $output * The output decorator. */ - public function __construct(AcquiaExtensionEnabler $acquia_extension_enabler, Filesystem $filesystem, Fixture $fixture, ProcessRunner $process_runner, string $project_dir, SymfonyStyle $output) { - $this->acquiaExtensionEnabler = $acquia_extension_enabler; + public function __construct(CompanyExtensionEnabler $company_extension_enabler, Filesystem $filesystem, Fixture $fixture, ProcessRunner $process_runner, string $project_dir, SymfonyStyle $output) { + $this->companyExtensionEnabler = $company_extension_enabler; $this->filesystem = $filesystem; $this->fixture = $fixture; $this->output = $output; @@ -277,12 +277,12 @@ private function restoreBaseProfile(): void { } /** - * Enables Acquia Drupal extensions. + * Enables company Drupal extensions. * * @throws \Exception */ private function enableExtensions(): void { - $this->acquiaExtensionEnabler->enable(); + $this->companyExtensionEnabler->enable(); if (!$this->isOrcaProfile) { return; diff --git a/src/Fixture/SubextensionManager.php b/src/Fixture/SubextensionManager.php index 55e9a8661..fb61910f0 100644 --- a/src/Fixture/SubextensionManager.php +++ b/src/Fixture/SubextensionManager.php @@ -7,7 +7,7 @@ use Symfony\Component\Finder\Finder; /** - * Provide access to Acquia Drupal subextensions physically in the fixture. + * Provide access to company Drupal subextensions physically in the fixture. */ class SubextensionManager { @@ -89,7 +89,7 @@ public function initializeTopLevelExtensions(PackageManager $package_manager): v } /** - * Gets an array of all Acquia subextensions. + * Gets an array of all company subextensions. * * @return \Acquia\Orca\Fixture\Package[] * An indexed array of package objects. @@ -155,13 +155,13 @@ public function getByParent(Package $package): array { } /** - * Finds all Acquia Drupal subextension composer.json files. + * Finds all company Drupal subextension composer.json files. * * @param string $path * A path to recursively search for subextensions. * * @return \Symfony\Component\Finder\Finder|array - * A Finder query for all Acquia Drupal subextension composer.json files + * A Finder query for all company Drupal subextension composer.json files * within the given paths or an empty array if no paths are given. */ private function findSubextensionComposerJsonFiles(string $path) { diff --git a/tests/Command/Fixture/FixtureEnableExtensionsCommandTest.php b/tests/Command/Fixture/FixtureEnableExtensionsCommandTest.php index 65f8522c0..d12b790c5 100644 --- a/tests/Command/Fixture/FixtureEnableExtensionsCommandTest.php +++ b/tests/Command/Fixture/FixtureEnableExtensionsCommandTest.php @@ -5,19 +5,19 @@ use Acquia\Orca\Command\Fixture\FixtureEnableExtensionsCommand; use Acquia\Orca\Enum\StatusCode; use Acquia\Orca\Exception\OrcaException; -use Acquia\Orca\Fixture\AcquiaExtensionEnabler; +use Acquia\Orca\Fixture\CompanyExtensionEnabler; use Acquia\Orca\Fixture\Fixture; use Acquia\Orca\Tests\Command\CommandTestBase; use Symfony\Component\Console\Command\Command; /** - * @property \Prophecy\Prophecy\ObjectProphecy|AcquiaExtensionEnabler $acquiaModuleEnabler + * @property \Prophecy\Prophecy\ObjectProphecy|CompanyExtensionEnabler $companyExtensionEnabler * @property \Prophecy\Prophecy\ObjectProphecy|\Acquia\Orca\Fixture\Fixture $fixture */ class FixtureEnableExtensionsCommandTest extends CommandTestBase { protected function setUp() { - $this->acquiaModuleEnabler = $this->prophesize(AcquiaExtensionEnabler::class); + $this->companyExtensionEnabler = $this->prophesize(CompanyExtensionEnabler::class); $this->fixture = $this->prophesize(Fixture::class); $this->fixture->exists() ->willReturn(TRUE); @@ -26,11 +26,11 @@ protected function setUp() { } protected function createCommand(): Command { - /** @var \Acquia\Orca\Fixture\AcquiaExtensionEnabler $acquia_extension_enabler */ - $acquia_extension_enabler = $this->acquiaModuleEnabler->reveal(); + /** @var \Acquia\Orca\Fixture\CompanyExtensionEnabler $company_extension_enabler */ + $company_extension_enabler = $this->companyExtensionEnabler->reveal(); /** @var \Acquia\Orca\Fixture\Fixture $fixture */ $fixture = $this->fixture->reveal(); - return new FixtureEnableExtensionsCommand($acquia_extension_enabler, $fixture); + return new FixtureEnableExtensionsCommand($company_extension_enabler, $fixture); } /** @@ -41,11 +41,11 @@ public function testCommand($fixture_exists, $install_called, $exception, $statu ->exists() ->shouldBeCalled() ->willReturn($fixture_exists); - $this->acquiaModuleEnabler + $this->companyExtensionEnabler ->enable() ->shouldBeCalledTimes($install_called); if ($exception) { - $this->acquiaModuleEnabler + $this->companyExtensionEnabler ->enable() ->willThrow($exception); } From 7ef01ab274ca8cb5e1904ecf79d986f8c2abfbc0 Mon Sep 17 00:00:00 2001 From: TravisCarden Date: Thu, 7 Nov 2019 14:37:45 -0500 Subject: [PATCH 08/18] Niggle: Removed unnecessary line. --- bin/pipelines/packages_alter.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/bin/pipelines/packages_alter.yml b/bin/pipelines/packages_alter.yml index 34ee6fa23..dc820bfce 100644 --- a/bin/pipelines/packages_alter.yml +++ b/bin/pipelines/packages_alter.yml @@ -1,4 +1,3 @@ --- acquia/lightning: type: drupal-profile - version_dev: "*" From c38b668295f7ddaf883d957c9b20f9472174022e Mon Sep 17 00:00:00 2001 From: Travis Carden Date: Mon, 11 Nov 2019 11:32:18 -0500 Subject: [PATCH 09/18] Added Travis CI build config validation (#50) --- .travis.yml | 6 +++++- example/.travis.yml | 11 ++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index e48eacb0d..98456efc6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,10 @@ --- language: php +os: [ linux ] + +version: ~> 1.0 + php: "7.2" addons: @@ -27,7 +31,7 @@ env: - ORCA_PACKAGES_CONFIG_ALTER=example/tests/packages_alter.yml - ORCA_SUT_DIR=${TRAVIS_BUILD_DIR}/../example -matrix: +jobs: fast_finish: true include: - { name: "Static code analysis", env: ORCA_JOB=STATIC_CODE_ANALYSIS } diff --git a/example/.travis.yml b/example/.travis.yml index a0a5a98ca..7a994b7b6 100644 --- a/example/.travis.yml +++ b/example/.travis.yml @@ -16,9 +16,18 @@ # # For advanced needs, # @see https://github.com/acquia/orca/blob/develop/docs/advanced-usage.md +# +# For all Travis CI build config options, +# @see https://config.travis-ci.com/ --- language: php +os: linux + +# Activate build config validation. +# @see https://docs.travis-ci.com/user/build-config-validation +version: ~> 1.0 + # The lowest version of PHP supported by all of Drupal, Acquia, and ORCA itself. # @see https://www.drupal.org/docs/8/system-requirements/php-requirements # @see https://docs.acquia.com/acquia-cloud/arch/tech-platform/ @@ -74,7 +83,7 @@ env: # Execution time is drastically reduced by splitting the build into multiple # concurrent jobs. -matrix: +jobs: # Mark the build as finished once the only remaining jobs are allowed to fail. fast_finish: true include: From 94b1c3c1c2494d08374d5e6a8b580fcee7b66f8a Mon Sep 17 00:00:00 2001 From: TravisCarden Date: Mon, 11 Nov 2019 12:24:53 -0500 Subject: [PATCH 10/18] Output telemetry data that gets sent after script. --- bin/travis/after_script.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/travis/after_script.sh b/bin/travis/after_script.sh index 53a17d79b..058c44a9c 100755 --- a/bin/travis/after_script.sh +++ b/bin/travis/after_script.sh @@ -14,6 +14,7 @@ cd "$(dirname "$0")" || exit; source _includes.sh # Log the job on cron if telemetry is enabled. if [[ "$TRAVIS_EVENT_TYPE" = "cron" && "$ORCA_TELEMETRY_ENABLE" && "$ORCA_AMPLITUDE_API_KEY" && "$ORCA_AMPLITUDE_USER_ID" ]]; then orca internal:log-job + orca internal:log-job --simulate fi # Show ORCA's own current build status. A failure may signify an upstream issue From 36e5908dc89a002d8501bd94d5f8b9559d5ec8ff Mon Sep 17 00:00:00 2001 From: TravisCarden Date: Mon, 11 Nov 2019 12:26:08 -0500 Subject: [PATCH 11/18] Added a little whitespace to make ORCA build status more readable. --- bin/travis/after_script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/travis/after_script.sh b/bin/travis/after_script.sh index 058c44a9c..3af29e531 100755 --- a/bin/travis/after_script.sh +++ b/bin/travis/after_script.sh @@ -20,4 +20,4 @@ fi # Show ORCA's own current build status. A failure may signify an upstream issue # or service level outage that could have affected this build. # @see https://travis-ci.org/acquia/orca/branches -travis history --no-interactive --repo=acquia/orca --branch=master --limit=2 --date +echo && travis history --no-interactive --repo=acquia/orca --branch=master --limit=2 --date From 9b5facd56e51214ab604ced7f8486acd37e37db3 Mon Sep 17 00:00:00 2001 From: TravisCarden Date: Wed, 13 Nov 2019 14:34:56 -0500 Subject: [PATCH 12/18] Documented CLI commands. [skip ci] --- docs/CONTRIBUTING.md | 1 + docs/README.md | 1 + docs/advanced-usage.md | 1 + docs/commands.md | 1657 ++++++++++++++++++++++++++++++++++++ docs/faq.md | 1 + docs/getting-started.md | 1 + docs/glossary.md | 1 + docs/understanding-orca.md | 1 + 8 files changed, 1664 insertions(+) create mode 100644 docs/commands.md diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index 5e3648bbb..b940e0a7d 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -30,6 +30,7 @@ [README](README.md) | [Understanding ORCA](understanding-orca.md) | [Getting Started](getting-started.md) +| [CLI Commands](commands.md) | [Advanced Usage](advanced-usage.md) | [Project Glossary](glossary.md) | [FAQ](faq.md) diff --git a/docs/README.md b/docs/README.md index bf5da6304..9ae2e7cb2 100644 --- a/docs/README.md +++ b/docs/README.md @@ -23,6 +23,7 @@ See [Continuous integration](understanding-orca.md#Continuous-integration) for e * [Understanding ORCA](understanding-orca.md) * [Getting Started](getting-started.md) +* [CLI Commands](commands.md) * [Advanced Usage](advanced-usage.md) * [Project Glossary](glossary.md) * [FAQ](faq.md) diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md index 955a80de3..9f68f234d 100644 --- a/docs/advanced-usage.md +++ b/docs/advanced-usage.md @@ -49,6 +49,7 @@ These affect ORCA only as invoked via the Travis CI scripts. [README](README.md) | [Understanding ORCA](understanding-orca.md) | [Getting Started](getting-started.md) +| [CLI Commands](commands.md) | **Advanced Usage** | [Project Glossary](glossary.md) | [FAQ](faq.md) diff --git a/docs/commands.md b/docs/commands.md new file mode 100644 index 000000000..3f17ff5ec --- /dev/null +++ b/docs/commands.md @@ -0,0 +1,1657 @@ +# CLI Commands + +* [`analyze`](#qastatic-analysis) +* [`backup`](#fixturebackup) +* [`core`](#debugcore-versions) +* [`deprecations`](#qadeprecated-code-scan) +* [`enexts`](#fixtureenable-extensions) +* [`fix`](#qafixer) +* [`help`](#help) +* [`init`](#fixtureinit) +* [`list`](#list) +* [`packages`](#debugpackages) +* [`phpstan`](#qadeprecated-code-scan) +* [`reset`](#fixturereset) +* [`rm`](#fixturerm) +* [`serve`](#fixturerun-server) +* [`si`](#fixtureinstall-site) +* [`st`](#fixturestatus) +* [`status`](#fixturestatus) +* [`test`](#qaautomated-tests) + +**debug:** + +* [`debug:core-versions`](#debugcore-versions) +* [`debug:packages`](#debugpackages) + +**fixture:** + +* [`fixture:backup`](#fixturebackup) +* [`fixture:enable-extensions`](#fixtureenable-extensions) +* [`fixture:init`](#fixtureinit) +* [`fixture:install-site`](#fixtureinstall-site) +* [`fixture:reset`](#fixturereset) +* [`fixture:rm`](#fixturerm) +* [`fixture:run-server`](#fixturerun-server) +* [`fixture:status`](#fixturestatus) + +**qa:** + +* [`qa:automated-tests`](#qaautomated-tests) +* [`qa:deprecated-code-scan`](#qadeprecated-code-scan) +* [`qa:fixer`](#qafixer) +* [`qa:static-analysis`](#qastatic-analysis) + +`help` +------ + +Displays help for a command + +### Usage + +* `help [--format FORMAT] [--raw] [--] []` + +The help command displays help for a given command: + + php ./bin/orca help list + +You can also output the help in other formats by using the --format option: + + php ./bin/orca help --format=xml list + +To display the list of available commands, please use the list command. + +### Arguments + +#### `command_name` + +The command name + +* Is required: no +* Is array: no +* Default: `'help'` + +### Options + +#### `--format` + +The output format (txt, xml, json, or md) + +* Accept value: yes +* Is value required: yes +* Is multiple: no +* Default: `'txt'` + +#### `--raw` + +To output raw command help + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--help|-h` + +Display this help message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--quiet|-q` + +Do not output any message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--verbose|-v|-vv|-vvv` + +Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--version|-V` + +Display this application version + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--ansi` + +Force ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-ansi` + +Disable ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-interaction|-n` + +Do not ask any interactive question + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +`list` +------ + +Lists commands + +### Usage + +* `list [--raw] [--format FORMAT] [--] []` + +The list command lists all commands: + + php ./bin/orca list + +You can also display the commands for a specific namespace: + + php ./bin/orca list test + +You can also output the information in other formats by using the --format option: + + php ./bin/orca list --format=xml + +It's also possible to get raw list of commands (useful for embedding command runner): + + php ./bin/orca list --raw + +### Arguments + +#### `namespace` + +The namespace name + +* Is required: no +* Is array: no +* Default: `NULL` + +### Options + +#### `--raw` + +To output raw command list + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--format` + +The output format (txt, xml, json, or md) + +* Accept value: yes +* Is value required: yes +* Is multiple: no +* Default: `'txt'` + +`debug:core-versions` +--------------------- + +Provides an overview of Drupal Core versions + +### Usage + +* `debug:core-versions` +* `core` + +Provides an overview of Drupal Core versions + +### Options + +#### `--help|-h` + +Display this help message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--quiet|-q` + +Do not output any message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--verbose|-v|-vv|-vvv` + +Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--version|-V` + +Display this application version + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--ansi` + +Force ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-ansi` + +Disable ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-interaction|-n` + +Do not ask any interactive question + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +`debug:packages` +---------------- + +Displays the active packages configuration + +### Usage + +* `debug:packages []` +* `packages` + +Displays the active packages configuration + +### Arguments + +#### `core` + +A Drupal core version to target: +- PREVIOUS_RELEASE: The latest release of the previous minor version, e.g., "8.5.14" if the current minor version is 8.6 +- PREVIOUS_DEV: The development version of the previous minor version, e.g., "8.5.x-dev" +- CURRENT_RECOMMENDED: The current recommended release, e.g., "8.6.14" +- CURRENT_DEV: The current development version, e.g., "8.6.x-dev" +- NEXT_RELEASE: The next release version if available, e.g., "8.7.0-beta2" +- NEXT_DEV: The next development version, e.g., "8.7.x-dev" +- Any version string Composer understands, see https://getcomposer.org/doc/articles/versions.md + +* Is required: no +* Is array: no +* Default: `NULL` + +### Options + +#### `--help|-h` + +Display this help message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--quiet|-q` + +Do not output any message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--verbose|-v|-vv|-vvv` + +Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--version|-V` + +Display this application version + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--ansi` + +Force ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-ansi` + +Disable ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-interaction|-n` + +Do not ask any interactive question + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +`fixture:backup` +---------------- + +Backs up the test fixture + +### Usage + +* `fixture:backup [-f|--force]` +* `backup` + +Backs up the current state of the fixture, including codebase and Drupal database. + +### Options + +#### `--force|-f` + +Backup without confirmation + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--help|-h` + +Display this help message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--quiet|-q` + +Do not output any message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--verbose|-v|-vv|-vvv` + +Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--version|-V` + +Display this application version + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--ansi` + +Force ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-ansi` + +Disable ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-interaction|-n` + +Do not ask any interactive question + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +`fixture:enable-extensions` +--------------------------- + +Enables all company Drupal extensions + +### Usage + +* `fixture:enable-extensions` +* `enexts` + +Enables all company Drupal extensions + +### Options + +#### `--help|-h` + +Display this help message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--quiet|-q` + +Do not output any message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--verbose|-v|-vv|-vvv` + +Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--version|-V` + +Display this application version + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--ansi` + +Force ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-ansi` + +Disable ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-interaction|-n` + +Do not ask any interactive question + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +`fixture:init` +-------------- + +Creates the test fixture + +### Usage + +* `fixture:init [-f|--force] [--sut SUT] [--sut-only] [--bare] [--core CORE] [--dev] [--profile PROFILE] [--ignore-patch-failure] [--no-sqlite] [--no-site-install] [--prefer-source] [--symlink-all]` +* `init` + +Creates a BLT-based Drupal site build, includes the system under test using Composer, optionally includes all other company packages, and installs Drupal. + +### Options + +#### `--force|-f` + +If the fixture already exists, remove it first without confirmation + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--sut` + +The system under test (SUT) in the form of its package name, e.g., "drupal/example" + +* Accept value: yes +* Is value required: yes +* Is multiple: no +* Default: `NULL` + +#### `--sut-only` + +Add only the system under test (SUT). Omit all other non-required company packages + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--bare` + +Omit all non-required company packages + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--core` + +Change the version of Drupal core installed: +- PREVIOUS_RELEASE: The latest release of the previous minor version, e.g., "8.5.14" if the current minor version is 8.6 +- PREVIOUS_DEV: The development version of the previous minor version, e.g., "8.5.x-dev" +- CURRENT_RECOMMENDED: The current recommended release, e.g., "8.6.14" +- CURRENT_DEV: The current development version, e.g., "8.6.x-dev" +- NEXT_RELEASE: The next release version if available, e.g., "8.7.0-beta2" +- NEXT_DEV: The next development version, e.g., "8.7.x-dev" +- Any version string Composer understands, see https://getcomposer.org/doc/articles/versions.md + +* Accept value: yes +* Is value required: yes +* Is multiple: no +* Default: `'CURRENT_RECOMMENDED'` + +#### `--dev` + +Use dev versions of company packages + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--profile` + +The Drupal installation profile to use, e.g., "minimal". ("orca" is a pseudo-profile based on "minimal", with the Toolbar module enabled and Seven as the admin theme) + +* Accept value: yes +* Is value required: yes +* Is multiple: no +* Default: `'orca'` + +#### `--ignore-patch-failure` + +Do not exit on failure to apply Composer patches. (Useful for debugging failures) + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-sqlite` + +Use the default BLT database includes instead of SQLite + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-site-install` + +Do not install Drupal. Supersedes the "--profile" option + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--prefer-source` + +Force installation of non-company packages from sources when possible, including VCS information. (Company packages are always installed from source.) Useful for core and contrib work + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--symlink-all` + +Symlink all possible company packages via local path repository. Packages absent from the expected location will be installed normally + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--help|-h` + +Display this help message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--quiet|-q` + +Do not output any message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--verbose|-v|-vv|-vvv` + +Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--version|-V` + +Display this application version + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--ansi` + +Force ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-ansi` + +Disable ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-interaction|-n` + +Do not ask any interactive question + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +`fixture:install-site` +---------------------- + +Installs the site + +### Usage + +* `fixture:install-site [-f|--force] [--profile PROFILE]` +* `si` + +Installs Drupal and enables company extensions. + +### Options + +#### `--force|-f` + +Install without confirmation + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--profile` + +The Drupal installation profile to use, e.g., "minimal". ("orca" is a pseudo-profile based on "testing", with the Toolbar module enabled and Seven as the admin theme) + +* Accept value: yes +* Is value required: yes +* Is multiple: no +* Default: `'orca'` + +#### `--help|-h` + +Display this help message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--quiet|-q` + +Do not output any message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--verbose|-v|-vv|-vvv` + +Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--version|-V` + +Display this application version + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--ansi` + +Force ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-ansi` + +Disable ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-interaction|-n` + +Do not ask any interactive question + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +`fixture:reset` +--------------- + +Resets the test fixture + +### Usage + +* `fixture:reset [-f|--force]` +* `reset` + +Restores the original state of the fixture, including codebase and Drupal database. + +### Options + +#### `--force|-f` + +Remove without confirmation + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--help|-h` + +Display this help message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--quiet|-q` + +Do not output any message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--verbose|-v|-vv|-vvv` + +Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--version|-V` + +Display this application version + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--ansi` + +Force ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-ansi` + +Disable ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-interaction|-n` + +Do not ask any interactive question + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +`fixture:rm` +------------ + +Removes the test fixture + +### Usage + +* `fixture:rm [-f|--force]` +* `rm` + +Removes the entire site build directory and Drupal database. + +### Options + +#### `--force|-f` + +Remove without confirmation + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--help|-h` + +Display this help message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--quiet|-q` + +Do not output any message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--verbose|-v|-vv|-vvv` + +Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--version|-V` + +Display this application version + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--ansi` + +Force ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-ansi` + +Disable ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-interaction|-n` + +Do not ask any interactive question + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +`fixture:run-server` +-------------------- + +Runs the web server for development + +### Usage + +* `fixture:run-server` +* `serve` + +Runs the web server for development + +### Options + +#### `--help|-h` + +Display this help message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--quiet|-q` + +Do not output any message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--verbose|-v|-vv|-vvv` + +Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--version|-V` + +Display this application version + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--ansi` + +Force ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-ansi` + +Disable ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-interaction|-n` + +Do not ask any interactive question + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +`fixture:status` +---------------- + +Provides an overview of the fixture + +### Usage + +* `fixture:status` +* `status` +* `st` + +Provides an overview of the fixture + +### Options + +#### `--help|-h` + +Display this help message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--quiet|-q` + +Do not output any message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--verbose|-v|-vv|-vvv` + +Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--version|-V` + +Display this application version + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--ansi` + +Force ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-ansi` + +Disable ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-interaction|-n` + +Do not ask any interactive question + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +`qa:automated-tests` +-------------------- + +Runs automated tests + +### Usage + +* `qa:automated-tests [--sut SUT] [--sut-only] [--behat] [--phpunit] [--no-servers]` +* `test` + +Runs automated tests + +### Options + +#### `--sut` + +The system under test (SUT) in the form of its package name, e.g., "drupal/example" + +* Accept value: yes +* Is value required: yes +* Is multiple: no +* Default: `NULL` + +#### `--sut-only` + +Run tests from only the system under test (SUT). Omit tests from all other company packages + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--behat` + +Run only PHPUnit tests + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--phpunit` + +Run only Behat tests + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-servers` + +Don't run the ChromeDriver and web servers + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--help|-h` + +Display this help message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--quiet|-q` + +Do not output any message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--verbose|-v|-vv|-vvv` + +Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--version|-V` + +Display this application version + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--ansi` + +Force ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-ansi` + +Disable ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-interaction|-n` + +Do not ask any interactive question + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +`qa:deprecated-code-scan` +------------------------- + +Scans for deprecated code + +### Usage + +* `qa:deprecated-code-scan [--sut SUT] [--contrib]` +* `deprecations` +* `phpstan` + +Scans for deprecated code + +### Options + +#### `--sut` + +Scan the system under test (SUT). Provide its package name, e.g., "drupal/example" + +* Accept value: yes +* Is value required: yes +* Is multiple: no +* Default: `NULL` + +#### `--contrib` + +Scan contributed projects + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--help|-h` + +Display this help message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--quiet|-q` + +Do not output any message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--verbose|-v|-vv|-vvv` + +Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--version|-V` + +Display this application version + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--ansi` + +Force ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-ansi` + +Disable ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-interaction|-n` + +Do not ask any interactive question + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +`qa:fixer` +---------- + +Fixes issues found by static analysis tools + +### Usage + +* `qa:fixer [--composer] [--phpcbf] [--phpcs-standard PHPCS-STANDARD] [--] ` +* `fix` + +Tools can be specified individually or in combination. If none are specified, all will be run. + +### Arguments + +#### `path` + +The path to fix issues in + +* Is required: yes +* Is array: no +* Default: `NULL` + +### Options + +#### `--composer` + +Run the Composer Normalizer tool + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--phpcbf` + +Run the PHP Code Beautifier and Fixer tool + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--phpcs-standard` + +Change the PHPCS standard used: +- AcquiaPHP: Contains sniffs applicable to all PHP projects +- AcquiaDrupalStrict: Recommended for new Drupal projects and teams familiar with Drupal coding standards +- AcquiaDrupalTransitional: A relaxed standard for legacy Drupal codebases or teams new to Drupal coding standards + +* Accept value: yes +* Is value required: yes +* Is multiple: no +* Default: `'AcquiaDrupalTransitional'` + +#### `--help|-h` + +Display this help message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--quiet|-q` + +Do not output any message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--verbose|-v|-vv|-vvv` + +Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--version|-V` + +Display this application version + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--ansi` + +Force ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-ansi` + +Disable ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-interaction|-n` + +Do not ask any interactive question + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +`qa:static-analysis` +-------------------- + +Runs static analysis tools + +### Usage + +* `qa:static-analysis [--composer] [--phpcs] [--phpcs-standard PHPCS-STANDARD] [--phplint] [--phploc] [--phpmd] [--yamllint] [--] ` +* `analyze` + +Tools can be specified individually or in combination. If none are specified, all will be run. + +### Arguments + +#### `path` + +The path to analyze + +* Is required: yes +* Is array: no +* Default: `NULL` + +### Options + +#### `--composer` + +Run the Composer validation tool + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--phpcs` + +Run the PHP Code Sniffer tool + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--phpcs-standard` + +Change the PHPCS standard used: +- AcquiaPHP: Contains sniffs applicable to all PHP projects +- AcquiaDrupalStrict: Recommended for new Drupal projects and teams familiar with Drupal coding standards +- AcquiaDrupalTransitional: A relaxed standard for legacy Drupal codebases or teams new to Drupal coding standards + +* Accept value: yes +* Is value required: yes +* Is multiple: no +* Default: `'AcquiaDrupalTransitional'` + +#### `--phplint` + +Run the PHP Lint tool + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--phploc` + +Run the PHP LOC tool + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--phpmd` + +Run the PHP Mess Detector tool + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--yamllint` + +Run the YAML Lint tool + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--help|-h` + +Display this help message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--quiet|-q` + +Do not output any message + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--verbose|-v|-vv|-vvv` + +Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--version|-V` + +Display this application version + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--ansi` + +Force ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-ansi` + +Disable ANSI output + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +#### `--no-interaction|-n` + +Do not ask any interactive question + +* Accept value: no +* Is value required: no +* Is multiple: no +* Default: `false` + +--- + +[README](README.md) +| [Understanding ORCA](understanding-orca.md) +| [Getting Started](getting-started.md) +| **CLI Commands** +| [Advanced Usage](advanced-usage.md) +| [Project Glossary](glossary.md) +| [FAQ](faq.md) +| [Contribution Guide](CONTRIBUTING.md) diff --git a/docs/faq.md b/docs/faq.md index e22d633cb..b6766c959 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -52,6 +52,7 @@ Cf. [Why doesn't ORCA enable my submodule/subtheme?](#why-doesnt-orca-enable-my- [README](README.md) | [Understanding ORCA](understanding-orca.md) | [Getting Started](getting-started.md) +| [CLI Commands](commands.md) | [Advanced Usage](advanced-usage.md) | [Project Glossary](glossary.md) | **FAQ** diff --git a/docs/getting-started.md b/docs/getting-started.md index 97ff0aac6..238512b13 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -113,6 +113,7 @@ Ignored tests (`orca_ignore`) are "ignored" and _never_ run by ORCA. Tests shoul [README](README.md) | [Understanding ORCA](understanding-orca.md) | **Getting Started** +| [CLI Commands](commands.md) | [Advanced Usage](advanced-usage.md) | [Project Glossary](glossary.md) | [FAQ](faq.md) diff --git a/docs/glossary.md b/docs/glossary.md index 115f40032..e699b6cd7 100644 --- a/docs/glossary.md +++ b/docs/glossary.md @@ -100,6 +100,7 @@ In automated testing, a test fixture is all the things we need to have in place [README](README.md) | [Understanding ORCA](understanding-orca.md) | [Getting Started](getting-started.md) +| [CLI Commands](commands.md) | [Advanced Usage](advanced-usage.md) | **Project Glossary** | [FAQ](faq.md) diff --git a/docs/understanding-orca.md b/docs/understanding-orca.md index 3b5907763..a76e3724f 100644 --- a/docs/understanding-orca.md +++ b/docs/understanding-orca.md @@ -78,6 +78,7 @@ See [Configuring Travis CI](getting-started.md#configuring-travis-ci). [README](README.md) | **Understanding ORCA** | [Getting Started](getting-started.md) +| [CLI Commands](commands.md) | [Advanced Usage](advanced-usage.md) | [Project Glossary](glossary.md) | [FAQ](faq.md) From 660219b891476f1e2f365e04c0b62121238568b0 Mon Sep 17 00:00:00 2001 From: TravisCarden Date: Wed, 13 Nov 2019 15:11:27 -0500 Subject: [PATCH 13/18] Added PHPLOC to documented static analysis tools. [skip ci] --- docs/understanding-orca.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/understanding-orca.md b/docs/understanding-orca.md index a76e3724f..98cb7248a 100644 --- a/docs/understanding-orca.md +++ b/docs/understanding-orca.md @@ -42,6 +42,7 @@ ORCA checks the SUT for low level construction defects using the following stati * [Composer normalize](https://github.com/localheinz/composer-normalize) checks `composer.json` files for consistent ordering and formatting. * [PHP Parallel Lint](https://github.com/JakubOnderka/PHP-Parallel-Lint) checks PHP files for syntax errors. * [Acquia Coding Standards for PHP](https://github.com/acquia/coding-standards-php) checks for coding standards and best practices compliance, checks for PHP cross-version compatibility with all supported language versions, and finds vulnerabilities and weaknesses related to security in PHP code. +* [PHPLOC](https://github.com/sebastianbergmann/phploc) measures the size and analyzes the structure of a PHP project, including such low level metrics as cyclomatic complexity and dependencies. ([Example.](https://github.com/sebastianbergmann/phploc#usage-examples)) * [PHP Mess Detector](https://phpmd.org/) looks for potential problems in PHP source code, such as possible bugs, suboptimal code, overcomplicated expressions, and unused parameters, methods, and properties. * The [Symfony YAML Linter](https://symfony.com/doc/current/components/yaml.html) checks YAML files for syntax errors. From 8b61b664871dff21eb61da175fb0793e0bfdbfad Mon Sep 17 00:00:00 2001 From: TravisCarden Date: Thu, 14 Nov 2019 08:30:16 -0500 Subject: [PATCH 14/18] Updated Composer libraries for security vulnerabilities. --- composer.lock | 658 +++++++++++++++++++++++++++----------------------- 1 file changed, 355 insertions(+), 303 deletions(-) diff --git a/composer.lock b/composer.lock index 8215789df..c023ec945 100644 --- a/composer.lock +++ b/composer.lock @@ -200,30 +200,31 @@ }, { "name": "behat/mink", - "version": "v1.7.1", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/minkphp/Mink.git", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9" + "reference": "a534fe7dac9525e8e10ca68e737c3d7e5058ec83" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9", - "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9", + "url": "https://api.github.com/repos/minkphp/Mink/zipball/a534fe7dac9525e8e10ca68e737c3d7e5058ec83", + "reference": "a534fe7dac9525e8e10ca68e737c3d7e5058ec83", "shasum": "" }, "require": { "php": ">=5.3.1", - "symfony/css-selector": "~2.1|~3.0" + "symfony/css-selector": "^2.7|^3.0|^4.0" }, "require-dev": { - "symfony/phpunit-bridge": "~2.7|~3.0" + "symfony/phpunit-bridge": "^4.2" }, "suggest": { "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)", "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation", "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)", - "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)" + "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)", + "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)" }, "type": "library", "extra": { @@ -254,7 +255,7 @@ "testing", "web" ], - "time": "2016-03-05T08:26:18+00:00" + "time": "2019-07-15T12:45:29+00:00" }, { "name": "behat/mink-browserkit-driver", @@ -413,16 +414,16 @@ }, { "name": "composer/ca-bundle", - "version": "1.2.3", + "version": "1.2.4", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "f26a67e397be0e5c00d7c52ec7b5010098e15ce5" + "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/f26a67e397be0e5c00d7c52ec7b5010098e15ce5", - "reference": "f26a67e397be0e5c00d7c52ec7b5010098e15ce5", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/10bb96592168a0f8e8f6dcde3532d9fa50b0b527", + "reference": "10bb96592168a0f8e8f6dcde3532d9fa50b0b527", "shasum": "" }, "require": { @@ -465,20 +466,20 @@ "ssl", "tls" ], - "time": "2019-08-02T09:05:43+00:00" + "time": "2019-08-30T08:44:50+00:00" }, { "name": "composer/composer", - "version": "1.9.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "314aa57fdcfc942065996f59fb73a8b3f74f3fa5" + "reference": "bb01f2180df87ce7992b8331a68904f80439dd2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/314aa57fdcfc942065996f59fb73a8b3f74f3fa5", - "reference": "314aa57fdcfc942065996f59fb73a8b3f74f3fa5", + "url": "https://api.github.com/repos/composer/composer/zipball/bb01f2180df87ce7992b8331a68904f80439dd2f", + "reference": "bb01f2180df87ce7992b8331a68904f80439dd2f", "shasum": "" }, "require": { @@ -545,7 +546,7 @@ "dependency", "package" ], - "time": "2019-08-02T18:55:33+00:00" + "time": "2019-11-01T16:20:17+00:00" }, { "name": "composer/semver", @@ -671,24 +672,24 @@ }, { "name": "composer/xdebug-handler", - "version": "1.3.3", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f" + "reference": "cbe23383749496fe0f373345208b79568e4bc248" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/46867cbf8ca9fb8d60c506895449eb799db1184f", - "reference": "46867cbf8ca9fb8d60c506895449eb799db1184f", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/cbe23383749496fe0f373345208b79568e4bc248", + "reference": "cbe23383749496fe0f373345208b79568e4bc248", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0", + "php": "^5.3.2 || ^7.0 || ^8.0", "psr/log": "^1.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" }, "type": "library", "autoload": { @@ -706,12 +707,12 @@ "email": "john-stevenson@blueyonder.co.uk" } ], - "description": "Restarts a process without xdebug.", + "description": "Restarts a process without Xdebug.", "keywords": [ "Xdebug", "performance" ], - "time": "2019-05-27T17:52:04+00:00" + "time": "2019-11-06T16:40:04+00:00" }, { "name": "container-interop/container-interop", @@ -812,16 +813,16 @@ }, { "name": "doctrine/instantiator", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "a2c590166b2133a4633738648b6b064edae0814a" + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a", - "reference": "a2c590166b2133a4633738648b6b064edae0814a", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1", + "reference": "ae466f726242e637cebdd526a7d991b9433bacf1", "shasum": "" }, "require": { @@ -864,7 +865,7 @@ "constructor", "instantiate" ], - "time": "2019-03-17T17:37:11+00:00" + "time": "2019-10-21T16:45:58+00:00" }, { "name": "drupal/coder", @@ -960,27 +961,28 @@ }, { "name": "guzzlehttp/guzzle", - "version": "6.3.3", + "version": "6.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" + "reference": "0895c932405407fd3a7368b6910c09a24d26db11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", - "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0895c932405407fd3a7368b6910c09a24d26db11", + "reference": "0895c932405407fd3a7368b6910c09a24d26db11", "shasum": "" }, "require": { + "ext-json": "*", "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.4", + "guzzlehttp/psr7": "^1.6.1", "php": ">=5.5" }, "require-dev": { "ext-curl": "*", "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.0" + "psr/log": "^1.1" }, "suggest": { "psr/log": "Required for using the Log middleware" @@ -992,12 +994,12 @@ } }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { "GuzzleHttp\\": "src/" - } + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1021,7 +1023,7 @@ "rest", "web service" ], - "time": "2018-04-22T15:46:56+00:00" + "time": "2019-10-23T15:58:00+00:00" }, { "name": "guzzlehttp/promises", @@ -1389,23 +1391,23 @@ }, { "name": "justinrainbow/json-schema", - "version": "5.2.8", + "version": "5.2.9", "source": { "type": "git", "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4" + "reference": "44c6787311242a979fa15c704327c20e7221a0e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/dcb6e1006bb5fd1e392b4daa68932880f37550d4", - "reference": "dcb6e1006bb5fd1e392b4daa68932880f37550d4", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/44c6787311242a979fa15c704327c20e7221a0e4", + "reference": "44c6787311242a979fa15c704327c20e7221a0e4", "shasum": "" }, "require": { "php": ">=5.3.3" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20", + "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", "json-schema/json-schema-test-suite": "1.2.0", "phpunit/phpunit": "^4.8.35" }, @@ -1451,7 +1453,7 @@ "json", "schema" ], - "time": "2019-01-14T23:55:14+00:00" + "time": "2019-09-25T14:49:45+00:00" }, { "name": "localheinz/composer-json-normalizer", @@ -1508,36 +1510,36 @@ }, { "name": "localheinz/composer-normalize", - "version": "1.2.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/localheinz/composer-normalize.git", - "reference": "68c0d86519d60b2c9c606d1e3304b7a00dce45ed" + "reference": "22e20fd5456efe3c5e9a40c1e653fd3c3ff2ec7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/localheinz/composer-normalize/zipball/68c0d86519d60b2c9c606d1e3304b7a00dce45ed", - "reference": "68c0d86519d60b2c9c606d1e3304b7a00dce45ed", + "url": "https://api.github.com/repos/localheinz/composer-normalize/zipball/22e20fd5456efe3c5e9a40c1e653fd3c3ff2ec7d", + "reference": "22e20fd5456efe3c5e9a40c1e653fd3c3ff2ec7d", "shasum": "" }, "require": { "composer-plugin-api": "^1.1.0", "localheinz/composer-json-normalizer": "^1.0.2", + "localheinz/diff": "^1.0.0", "localheinz/json-normalizer": "~0.9.0", - "php": "^7.1", - "sebastian/diff": "^2.0.1 || ^3.0.0" + "php": "^7.1" }, "require-dev": { "composer/composer": "^1.7.0", - "jangregor/phpstan-prophecy": "~0.3.0", - "localheinz/php-cs-fixer-config": "~1.22.1", - "localheinz/phpstan-rules": "~0.7.1", + "jangregor/phpstan-prophecy": "~0.4.2", + "localheinz/php-cs-fixer-config": "~1.23.0", + "localheinz/phpstan-rules": "~0.10.0", "localheinz/test-util": "~0.7.0", - "phpstan/phpstan": "~0.11.0", - "phpstan/phpstan-deprecation-rules": "~0.11.0", - "phpstan/phpstan-strict-rules": "~0.11.0", - "phpunit/phpunit": "^6.5.13 || ^7.5.2", - "symfony/filesystem": "^4.2.1" + "phpstan/phpstan": "~0.11.15", + "phpstan/phpstan-deprecation-rules": "~0.11.2", + "phpstan/phpstan-strict-rules": "~0.11.1", + "phpunit/phpunit": "^7.5.15", + "symfony/filesystem": "^4.3.4" }, "type": "composer-plugin", "extra": { @@ -1569,7 +1571,58 @@ "normalizer", "plugin" ], - "time": "2019-06-01T17:47:26+00:00" + "time": "2019-09-07T10:12:23+00:00" + }, + { + "name": "localheinz/diff", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/localheinz/diff.git", + "reference": "1feef0a8116cd596e0cd3f97bb672dc9b14e9450" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/localheinz/diff/zipball/1feef0a8116cd596e0cd3f97bb672dc9b14e9450", + "reference": "1feef0a8116cd596e0cd3f97bb672dc9b14e9450", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Fork of sebastian/diff for use with localheinz/composer-normalize", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "time": "2019-09-07T09:48:40+00:00" }, { "name": "localheinz/json-normalizer", @@ -1674,16 +1727,16 @@ }, { "name": "mockery/mockery", - "version": "1.2.3", + "version": "1.2.4", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "4eff936d83eb809bde2c57a3cea0ee9643769031" + "reference": "b3453f75fd23d9fd41685f2148f4abeacabc6405" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/4eff936d83eb809bde2c57a3cea0ee9643769031", - "reference": "4eff936d83eb809bde2c57a3cea0ee9643769031", + "url": "https://api.github.com/repos/mockery/mockery/zipball/b3453f75fd23d9fd41685f2148f4abeacabc6405", + "reference": "b3453f75fd23d9fd41685f2148f4abeacabc6405", "shasum": "" }, "require": { @@ -1697,7 +1750,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -1735,20 +1788,20 @@ "test double", "testing" ], - "time": "2019-08-07T15:01:07+00:00" + "time": "2019-09-30T08:30:27+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.9.1", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72" + "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", - "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea", + "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea", "shasum": "" }, "require": { @@ -1783,20 +1836,20 @@ "object", "object graph" ], - "time": "2019-04-07T13:18:21+00:00" + "time": "2019-08-09T12:45:53+00:00" }, { "name": "myclabs/php-enum", - "version": "1.7.1", + "version": "1.7.2", "source": { "type": "git", "url": "https://github.com/myclabs/php-enum.git", - "reference": "f46847626b8739de22e4ebc6b56010f317d4448d" + "reference": "45f01adf6922df6082bcda36619deb466e826acf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/php-enum/zipball/f46847626b8739de22e4ebc6b56010f317d4448d", - "reference": "f46847626b8739de22e4ebc6b56010f317d4448d", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/45f01adf6922df6082bcda36619deb466e826acf", + "reference": "45f01adf6922df6082bcda36619deb466e826acf", "shasum": "" }, "require": { @@ -1828,7 +1881,7 @@ "keywords": [ "enum" ], - "time": "2019-05-05T10:12:03+00:00" + "time": "2019-08-19T13:53:00+00:00" }, { "name": "oscarotero/env", @@ -2054,16 +2107,16 @@ }, { "name": "phpcompatibility/php-compatibility", - "version": "9.3.1", + "version": "9.3.3", "source": { "type": "git", "url": "https://github.com/PHPCompatibility/PHPCompatibility.git", - "reference": "9999344e47e7af6b00e1a898eacc4e4368fb7196" + "reference": "1af08ca3861048a8bfb39d0405d0ac3e50ba2696" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9999344e47e7af6b00e1a898eacc4e4368fb7196", - "reference": "9999344e47e7af6b00e1a898eacc4e4368fb7196", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/1af08ca3861048a8bfb39d0405d0ac3e50ba2696", + "reference": "1af08ca3861048a8bfb39d0405d0ac3e50ba2696", "shasum": "" }, "require": { @@ -2108,39 +2161,37 @@ "phpcs", "standards" ], - "time": "2019-09-05T18:36:49+00:00" + "time": "2019-11-11T03:25:23+00:00" }, { "name": "phpdocumentor/reflection-common", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a", + "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a", "shasum": "" }, "require": { - "php": ">=5.5" + "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "^4.6" + "phpunit/phpunit": "~6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2162,30 +2213,30 @@ "reflection", "static analysis" ], - "time": "2017-09-11T18:02:19+00:00" + "time": "2018-08-07T13:53:10+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.1", + "version": "4.3.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c" + "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", - "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/b83ff7cfcfee7827e1e78b637a5904fe6a96698e", + "reference": "b83ff7cfcfee7827e1e78b637a5904fe6a96698e", "shasum": "" }, "require": { "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", + "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", + "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", "webmozart/assert": "^1.0" }, "require-dev": { - "doctrine/instantiator": "~1.0.5", + "doctrine/instantiator": "^1.0.5", "mockery/mockery": "^1.0", "phpunit/phpunit": "^6.4" }, @@ -2213,41 +2264,40 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2019-04-30T17:48:53+00:00" + "time": "2019-09-12T14:27:41+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.4.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", + "reference": "2e32a6d48972b2c1976ed5d8967145b6cec4a4a9", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" + "php": "^7.1", + "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "ext-tokenizer": "^7.1", + "mockery/mockery": "~1", + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2260,7 +2310,8 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-07-14T14:27:02+00:00" + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "time": "2019-08-22T18:11:29+00:00" }, { "name": "phploc/phploc", @@ -2381,22 +2432,22 @@ }, { "name": "phpspec/prophecy", - "version": "1.8.1", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76" + "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76", - "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/f6811d96d97bdf400077a0cc100ae56aa32b9203", + "reference": "f6811d96d97bdf400077a0cc100ae56aa32b9203", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", "sebastian/comparator": "^1.1|^2.0|^3.0", "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, @@ -2440,7 +2491,7 @@ "spy", "stub" ], - "time": "2019-06-13T12:50:23+00:00" + "time": "2019-10-03T11:07:50+00:00" }, { "name": "phpstan/phpdoc-parser", @@ -2983,16 +3034,16 @@ }, { "name": "psr/log", - "version": "1.1.0", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", "shasum": "" }, "require": { @@ -3001,7 +3052,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -3026,7 +3077,7 @@ "psr", "psr-3" ], - "time": "2018-11-20T15:27:04+00:00" + "time": "2019-11-01T11:05:21+00:00" }, { "name": "ralouphie/getallheaders", @@ -3281,16 +3332,16 @@ }, { "name": "sebastian/exporter", - "version": "3.1.0", + "version": "3.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", - "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", "shasum": "" }, "require": { @@ -3317,6 +3368,10 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -3325,17 +3380,13 @@ "name": "Volker Dusch", "email": "github@wallbash.com" }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Adam Harvey", "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], "description": "Provides the functionality to export PHP variables for visualization", @@ -3344,7 +3395,7 @@ "export", "exporter" ], - "time": "2017-04-03T13:19:02+00:00" + "time": "2019-09-14T09:02:43+00:00" }, { "name": "sebastian/finder-facade", @@ -3668,16 +3719,16 @@ }, { "name": "seld/jsonlint", - "version": "1.7.1", + "version": "1.7.2", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38" + "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/d15f59a67ff805a44c50ea0516d2341740f81a38", - "reference": "d15f59a67ff805a44c50ea0516d2341740f81a38", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/e2e5d290e4d2a4f0eb449f510071392e00e10d19", + "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19", "shasum": "" }, "require": { @@ -3713,7 +3764,7 @@ "parser", "validator" ], - "time": "2018-01-24T12:46:19+00:00" + "time": "2019-10-24T14:27:39+00:00" }, { "name": "seld/phar-utils", @@ -3801,16 +3852,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.4.2", + "version": "3.5.2", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8" + "reference": "65b12cdeaaa6cd276d4c3033a95b9b88b12701e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", - "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/65b12cdeaaa6cd276d4c3033a95b9b88b12701e7", + "reference": "65b12cdeaaa6cd276d4c3033a95b9b88b12701e7", "shasum": "" }, "require": { @@ -3848,7 +3899,7 @@ "phpcs", "standards" ], - "time": "2019-04-10T23:49:02+00:00" + "time": "2019-10-28T04:36:32+00:00" }, { "name": "stecman/symfony-console-completion", @@ -3897,16 +3948,16 @@ }, { "name": "symfony/browser-kit", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "a29dd02a1f3f81b9a15c7730cc3226718ddb55ca" + "reference": "b14fa08508afd152257d5dcc7adb5f278654d972" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/a29dd02a1f3f81b9a15c7730cc3226718ddb55ca", - "reference": "a29dd02a1f3f81b9a15c7730cc3226718ddb55ca", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/b14fa08508afd152257d5dcc7adb5f278654d972", + "reference": "b14fa08508afd152257d5dcc7adb5f278654d972", "shasum": "" }, "require": { @@ -3952,20 +4003,20 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2019-06-11T15:41:59+00:00" + "time": "2019-10-28T17:07:32+00:00" }, { "name": "symfony/class-loader", - "version": "v3.4.30", + "version": "v3.4.35", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", - "reference": "4459eef5298dedfb69f771186a580062b8516497" + "reference": "e212b06996819a2bce026a63da03b7182d05a690" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/class-loader/zipball/4459eef5298dedfb69f771186a580062b8516497", - "reference": "4459eef5298dedfb69f771186a580062b8516497", + "url": "https://api.github.com/repos/symfony/class-loader/zipball/e212b06996819a2bce026a63da03b7182d05a690", + "reference": "e212b06996819a2bce026a63da03b7182d05a690", "shasum": "" }, "require": { @@ -4008,20 +4059,20 @@ ], "description": "Symfony ClassLoader Component", "homepage": "https://symfony.com", - "time": "2019-01-16T09:39:14+00:00" + "time": "2019-08-20T13:31:17+00:00" }, { "name": "symfony/config", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "a17a2aea43950ce83a0603ed301bac362eb86870" + "reference": "8267214841c44d315a55242ea867684eb43c42ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/a17a2aea43950ce83a0603ed301bac362eb86870", - "reference": "a17a2aea43950ce83a0603ed301bac362eb86870", + "url": "https://api.github.com/repos/symfony/config/zipball/8267214841c44d315a55242ea867684eb43c42ce", + "reference": "8267214841c44d315a55242ea867684eb43c42ce", "shasum": "" }, "require": { @@ -4072,20 +4123,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2019-07-18T10:34:59+00:00" + "time": "2019-11-08T08:31:27+00:00" }, { "name": "symfony/console", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8b0ae5742ce9aaa8b0075665862c1ca397d1c1d9" + "reference": "831424efae0a1fe6642784bd52aae14ece6538e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8b0ae5742ce9aaa8b0075665862c1ca397d1c1d9", - "reference": "8b0ae5742ce9aaa8b0075665862c1ca397d1c1d9", + "url": "https://api.github.com/repos/symfony/console/zipball/831424efae0a1fe6642784bd52aae14ece6538e6", + "reference": "831424efae0a1fe6642784bd52aae14ece6538e6", "shasum": "" }, "require": { @@ -4147,29 +4198,29 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2019-07-24T17:13:59+00:00" + "time": "2019-11-13T07:29:07+00:00" }, { "name": "symfony/css-selector", - "version": "v3.4.30", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf" + "reference": "f4b3ff6a549d9ed28b2b0ecd1781bf67cf220ee9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", - "reference": "8ca29297c29b64fb3a1a135e71cb25f67f9fdccf", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/f4b3ff6a549d9ed28b2b0ecd1781bf67cf220ee9", + "reference": "f4b3ff6a549d9ed28b2b0ecd1781bf67cf220ee9", "shasum": "" }, "require": { - "php": "^5.5.9|>=7.0.8" + "php": "^7.1.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.4-dev" + "dev-master": "4.3-dev" } }, "autoload": { @@ -4200,20 +4251,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2019-01-16T09:39:14+00:00" + "time": "2019-10-02T08:36:26+00:00" }, { "name": "symfony/debug", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "527887c3858a2462b0137662c74837288b998ee3" + "reference": "5ea9c3e01989a86ceaa0283f21234b12deadf5e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/527887c3858a2462b0137662c74837288b998ee3", - "reference": "527887c3858a2462b0137662c74837288b998ee3", + "url": "https://api.github.com/repos/symfony/debug/zipball/5ea9c3e01989a86ceaa0283f21234b12deadf5e2", + "reference": "5ea9c3e01989a86ceaa0283f21234b12deadf5e2", "shasum": "" }, "require": { @@ -4256,26 +4307,26 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2019-07-23T11:21:36+00:00" + "time": "2019-10-28T17:07:32+00:00" }, { "name": "symfony/dependency-injection", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "9ad1b83d474ae17156f6914cb81ffe77aeac3a9b" + "reference": "80c6d9e19467dfbba14f830ed478eb592ce51b64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/9ad1b83d474ae17156f6914cb81ffe77aeac3a9b", - "reference": "9ad1b83d474ae17156f6914cb81ffe77aeac3a9b", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/80c6d9e19467dfbba14f830ed478eb592ce51b64", + "reference": "80c6d9e19467dfbba14f830ed478eb592ce51b64", "shasum": "" }, "require": { "php": "^7.1.3", "psr/container": "^1.0", - "symfony/service-contracts": "^1.1.2" + "symfony/service-contracts": "^1.1.6" }, "conflict": { "symfony/config": "<4.3", @@ -4329,20 +4380,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2019-07-26T07:03:43+00:00" + "time": "2019-11-08T16:22:27+00:00" }, { "name": "symfony/dom-crawler", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "291397232a2eefb3347eaab9170409981eaad0e2" + "reference": "4b9efd5708c3a38593e19b6a33e40867f4f89d72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/291397232a2eefb3347eaab9170409981eaad0e2", - "reference": "291397232a2eefb3347eaab9170409981eaad0e2", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/4b9efd5708c3a38593e19b6a33e40867f4f89d72", + "reference": "4b9efd5708c3a38593e19b6a33e40867f4f89d72", "shasum": "" }, "require": { @@ -4390,20 +4441,20 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2019-06-13T11:03:18+00:00" + "time": "2019-10-28T17:07:32+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "212b020949331b6531250584531363844b34a94e" + "reference": "0df002fd4f500392eabd243c2947061a50937287" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/212b020949331b6531250584531363844b34a94e", - "reference": "212b020949331b6531250584531363844b34a94e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0df002fd4f500392eabd243c2947061a50937287", + "reference": "0df002fd4f500392eabd243c2947061a50937287", "shasum": "" }, "require": { @@ -4460,20 +4511,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2019-06-27T06:42:14+00:00" + "time": "2019-11-03T09:04:05+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v1.1.5", + "version": "v1.1.7", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "c61766f4440ca687de1084a5c00b08e167a2575c" + "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c61766f4440ca687de1084a5c00b08e167a2575c", - "reference": "c61766f4440ca687de1084a5c00b08e167a2575c", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c43ab685673fb6c8d84220c77897b1d6cdbe1d18", + "reference": "c43ab685673fb6c8d84220c77897b1d6cdbe1d18", "shasum": "" }, "require": { @@ -4518,20 +4569,20 @@ "interoperability", "standards" ], - "time": "2019-06-20T06:46:26+00:00" + "time": "2019-09-17T09:54:03+00:00" }, { "name": "symfony/filesystem", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d" + "reference": "9abbb7ef96a51f4d7e69627bc6f63307994e4263" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b9896d034463ad6fd2bf17e2bf9418caecd6313d", - "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/9abbb7ef96a51f4d7e69627bc6f63307994e4263", + "reference": "9abbb7ef96a51f4d7e69627bc6f63307994e4263", "shasum": "" }, "require": { @@ -4568,20 +4619,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2019-06-23T08:51:25+00:00" + "time": "2019-08-20T14:07:54+00:00" }, { "name": "symfony/finder", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "9638d41e3729459860bb96f6247ccb61faaa45f2" + "reference": "72a068f77e317ae77c0a0495236ad292cfb5ce6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/9638d41e3729459860bb96f6247ccb61faaa45f2", - "reference": "9638d41e3729459860bb96f6247ccb61faaa45f2", + "url": "https://api.github.com/repos/symfony/finder/zipball/72a068f77e317ae77c0a0495236ad292cfb5ce6f", + "reference": "72a068f77e317ae77c0a0495236ad292cfb5ce6f", "shasum": "" }, "require": { @@ -4617,20 +4668,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2019-06-28T13:16:30+00:00" + "time": "2019-10-30T12:53:54+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "8b778ee0c27731105fbf1535f51793ad1ae0ba2b" + "reference": "cabe67275034e173350e158f3b1803d023880227" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8b778ee0c27731105fbf1535f51793ad1ae0ba2b", - "reference": "8b778ee0c27731105fbf1535f51793ad1ae0ba2b", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cabe67275034e173350e158f3b1803d023880227", + "reference": "cabe67275034e173350e158f3b1803d023880227", "shasum": "" }, "require": { @@ -4672,20 +4723,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2019-07-23T11:21:36+00:00" + "time": "2019-11-12T13:07:20+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "a414548d236ddd8fa3df52367d583e82339c5e95" + "reference": "5fdf186f26f9080de531d3f1d024348b2f0ab12f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/a414548d236ddd8fa3df52367d583e82339c5e95", - "reference": "a414548d236ddd8fa3df52367d583e82339c5e95", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/5fdf186f26f9080de531d3f1d024348b2f0ab12f", + "reference": "5fdf186f26f9080de531d3f1d024348b2f0ab12f", "shasum": "" }, "require": { @@ -4764,20 +4815,20 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2019-07-28T07:10:23+00:00" + "time": "2019-11-13T09:07:28+00:00" }, { "name": "symfony/mime", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "6b7148029b1dd5eda1502064f06d01357b7b2d8b" + "reference": "22aecf6b11638ef378fab25d6c5a2da8a31a1448" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/6b7148029b1dd5eda1502064f06d01357b7b2d8b", - "reference": "6b7148029b1dd5eda1502064f06d01357b7b2d8b", + "url": "https://api.github.com/repos/symfony/mime/zipball/22aecf6b11638ef378fab25d6c5a2da8a31a1448", + "reference": "22aecf6b11638ef378fab25d6c5a2da8a31a1448", "shasum": "" }, "require": { @@ -4786,7 +4837,7 @@ "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { - "egulias/email-validator": "^2.0", + "egulias/email-validator": "^2.1.10", "symfony/dependency-injection": "~3.4|^4.1" }, "type": "library", @@ -4823,20 +4874,20 @@ "mime", "mime-type" ], - "time": "2019-07-19T16:21:19+00:00" + "time": "2019-11-12T13:10:02+00:00" }, { "name": "symfony/options-resolver", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "40762ead607c8f792ee4516881369ffa553fee6f" + "reference": "f46c7fc8e207bd8a2188f54f8738f232533765a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/40762ead607c8f792ee4516881369ffa553fee6f", - "reference": "40762ead607c8f792ee4516881369ffa553fee6f", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/f46c7fc8e207bd8a2188f54f8738f232533765a4", + "reference": "f46c7fc8e207bd8a2188f54f8738f232533765a4", "shasum": "" }, "require": { @@ -4877,20 +4928,20 @@ "configuration", "options" ], - "time": "2019-06-13T11:01:17+00:00" + "time": "2019-10-28T20:59:01+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "5a7b67f3c407ad8199cedb10f71a36ab5ccd44ac" + "reference": "c216b32261358a820bb4217eb3a20e3f437a484e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/5a7b67f3c407ad8199cedb10f71a36ab5ccd44ac", - "reference": "5a7b67f3c407ad8199cedb10f71a36ab5ccd44ac", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/c216b32261358a820bb4217eb3a20e3f437a484e", + "reference": "c216b32261358a820bb4217eb3a20e3f437a484e", "shasum": "" }, "require": { @@ -4942,7 +4993,7 @@ ], "description": "Symfony PHPUnit Bridge", "homepage": "https://symfony.com", - "time": "2019-07-18T13:23:37+00:00" + "time": "2019-10-30T12:58:49+00:00" }, { "name": "symfony/polyfill-ctype", @@ -5238,16 +5289,16 @@ }, { "name": "symfony/process", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c" + "reference": "3b2e0cb029afbb0395034509291f21191d1a4db0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/856d35814cf287480465bb7a6c413bb7f5f5e69c", - "reference": "856d35814cf287480465bb7a6c413bb7f5f5e69c", + "url": "https://api.github.com/repos/symfony/process/zipball/3b2e0cb029afbb0395034509291f21191d1a4db0", + "reference": "3b2e0cb029afbb0395034509291f21191d1a4db0", "shasum": "" }, "require": { @@ -5283,20 +5334,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2019-05-30T16:10:05+00:00" + "time": "2019-10-28T17:07:32+00:00" }, { "name": "symfony/service-contracts", - "version": "v1.1.5", + "version": "v1.1.8", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d" + "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", - "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/ffc7f5692092df31515df2a5ecf3b7302b3ddacf", + "reference": "ffc7f5692092df31515df2a5ecf3b7302b3ddacf", "shasum": "" }, "require": { @@ -5341,26 +5392,26 @@ "interoperability", "standards" ], - "time": "2019-06-13T11:15:36+00:00" + "time": "2019-10-14T12:27:06+00:00" }, { "name": "symfony/translation", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "4e3e39cc485304f807622bdc64938e4633396406" + "reference": "bbce239b35b0cd47bd75848b23e969f17dd970e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/4e3e39cc485304f807622bdc64938e4633396406", - "reference": "4e3e39cc485304f807622bdc64938e4633396406", + "url": "https://api.github.com/repos/symfony/translation/zipball/bbce239b35b0cd47bd75848b23e969f17dd970e7", + "reference": "bbce239b35b0cd47bd75848b23e969f17dd970e7", "shasum": "" }, "require": { "php": "^7.1.3", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^1.1.2" + "symfony/translation-contracts": "^1.1.6" }, "conflict": { "symfony/config": "<3.4", @@ -5417,20 +5468,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2019-07-18T10:34:59+00:00" + "time": "2019-11-06T23:21:49+00:00" }, { "name": "symfony/translation-contracts", - "version": "v1.1.5", + "version": "v1.1.7", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c" + "reference": "364518c132c95642e530d9b2d217acbc2ccac3e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/cb4b18ad7b92a26e83b65dde940fab78339e6f3c", - "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/364518c132c95642e530d9b2d217acbc2ccac3e6", + "reference": "364518c132c95642e530d9b2d217acbc2ccac3e6", "shasum": "" }, "require": { @@ -5474,20 +5525,20 @@ "interoperability", "standards" ], - "time": "2019-06-13T11:15:36+00:00" + "time": "2019-09-17T11:12:18+00:00" }, { "name": "symfony/yaml", - "version": "v4.3.3", + "version": "v4.3.8", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "34d29c2acd1ad65688f58452fd48a46bd996d5a6" + "reference": "324cf4b19c345465fad14f3602050519e09e361d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/34d29c2acd1ad65688f58452fd48a46bd996d5a6", - "reference": "34d29c2acd1ad65688f58452fd48a46bd996d5a6", + "url": "https://api.github.com/repos/symfony/yaml/zipball/324cf4b19c345465fad14f3602050519e09e361d", + "reference": "324cf4b19c345465fad14f3602050519e09e361d", "shasum": "" }, "require": { @@ -5533,7 +5584,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2019-07-24T14:47:54+00:00" + "time": "2019-10-30T12:58:49+00:00" }, { "name": "theseer/fdomdocument", @@ -5617,16 +5668,16 @@ }, { "name": "vaimo/binary-chromedriver", - "version": "5.0.2", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/vaimo/binary-chromedriver.git", - "reference": "e4bfef0b7df19f634fceef6189bc054ccebd7a05" + "reference": "c881945217502163d0f8c561eb7489b86c727137" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vaimo/binary-chromedriver/zipball/e4bfef0b7df19f634fceef6189bc054ccebd7a05", - "reference": "e4bfef0b7df19f634fceef6189bc054ccebd7a05", + "url": "https://api.github.com/repos/vaimo/binary-chromedriver/zipball/c881945217502163d0f8c561eb7489b86c727137", + "reference": "c881945217502163d0f8c561eb7489b86c727137", "shasum": "" }, "require": { @@ -5687,20 +5738,20 @@ "testing", "webdriver" ], - "time": "2019-05-02T20:10:57+00:00" + "time": "2019-08-27T07:25:37+00:00" }, { "name": "vaimo/webdriver-binary-downloader", - "version": "2.2.3", + "version": "2.2.4", "source": { "type": "git", "url": "https://github.com/vaimo/webdriver-binary-downloader.git", - "reference": "30c611c88daa292b6baf4b0054f9560ed5341edb" + "reference": "dd4b64c005264b6154ff08c1197757d6d45e65b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vaimo/webdriver-binary-downloader/zipball/30c611c88daa292b6baf4b0054f9560ed5341edb", - "reference": "30c611c88daa292b6baf4b0054f9560ed5341edb", + "url": "https://api.github.com/repos/vaimo/webdriver-binary-downloader/zipball/dd4b64c005264b6154ff08c1197757d6d45e65b1", + "reference": "dd4b64c005264b6154ff08c1197757d6d45e65b1", "shasum": "" }, "require": { @@ -5749,7 +5800,7 @@ "downloader", "webdriver" ], - "time": "2019-07-25T20:58:28+00:00" + "time": "2019-09-24T18:18:29+00:00" }, { "name": "webflo/drupal-finder", @@ -5793,16 +5844,16 @@ }, { "name": "webmozart/assert", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" + "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", + "url": "https://api.github.com/repos/webmozart/assert/zipball/88e6d84706d09a236046d686bbea96f07b3a34f4", + "reference": "88e6d84706d09a236046d686bbea96f07b3a34f4", "shasum": "" }, "require": { @@ -5810,8 +5861,7 @@ "symfony/polyfill-ctype": "^1.8" }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "phpunit/phpunit": "^4.8.36 || ^7.5.13" }, "type": "library", "extra": { @@ -5840,35 +5890,35 @@ "check", "validate" ], - "time": "2018-12-25T11:19:39+00:00" + "time": "2019-08-24T08:43:50+00:00" }, { "name": "weitzman/drupal-test-traits", - "version": "1.2.1", + "version": "1.3.0", "source": { "type": "git", "url": "https://gitlab.com/weitzman/drupal-test-traits.git", - "reference": "6687d17233707e0fca5c95e171701b9bf82bf1ff" + "reference": "f234f4a4863c21ddeb202f70771f427d03c8805f" }, "dist": { "type": "zip", - "url": "https://gitlab.com/api/v4/projects/weitzman%2Fdrupal-test-traits/repository/archive.zip?sha=6687d17233707e0fca5c95e171701b9bf82bf1ff", - "reference": "6687d17233707e0fca5c95e171701b9bf82bf1ff", + "url": "https://gitlab.com/api/v4/projects/weitzman%2Fdrupal-test-traits/repository/archive.zip?sha=f234f4a4863c21ddeb202f70771f427d03c8805f", + "reference": "f234f4a4863c21ddeb202f70771f427d03c8805f", "shasum": "" }, "require": { - "behat/mink": "^1.7", + "behat/mink": "1.8.0 | 1.7.1.1 | 1.7.x-dev", "behat/mink-goutte-driver": "^1.2", - "php": ">=7.0.0", - "phpunit/phpunit": "^5.7|^6.5", + "php": ">=7.0.8", + "phpunit/phpunit": "^6.5 || ^7", "webflo/drupal-finder": "^1.1" }, "require-dev": { - "behat/mink-selenium2-driver": "1.3.x-dev", + "behat/mink-selenium2-driver": "1.4.0 | 1.3.1.1 | 1.3.x-dev", "composer/installers": "^1.2", "dmore/chrome-mink-driver": "^2.6", "drupal-composer/drupal-scaffold": "2.3.0", - "drupal/core": "^8.7@alpha", + "drupal/core": "^8.8@alpha", "drush/drush": "^9", "jakub-onderka/php-parallel-lint": "^1.0", "squizlabs/php_codesniffer": "^3.2", @@ -5898,7 +5948,7 @@ } ], "description": "Traits for testing Drupal sites that have user content (versus unpopulated sites).", - "time": "2019-04-22T08:56:51+00:00" + "time": "2019-10-18T00:25:49+00:00" }, { "name": "zumba/amplitude-php", @@ -5958,16 +6008,16 @@ "packages-dev": [ { "name": "brainmaestro/composer-git-hooks", - "version": "v2.7.1", + "version": "v2.8.2", "source": { "type": "git", "url": "https://github.com/BrainMaestro/composer-git-hooks.git", - "reference": "daf8ab1ad2d80255a8bd77dc266b481f0ac24334" + "reference": "c4a39fcbd73b8a5da8c02b8e0923b0836cc4fae0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/BrainMaestro/composer-git-hooks/zipball/daf8ab1ad2d80255a8bd77dc266b481f0ac24334", - "reference": "daf8ab1ad2d80255a8bd77dc266b481f0ac24334", + "url": "https://api.github.com/repos/BrainMaestro/composer-git-hooks/zipball/c4a39fcbd73b8a5da8c02b8e0923b0836cc4fae0", + "reference": "c4a39fcbd73b8a5da8c02b8e0923b0836cc4fae0", "shasum": "" }, "require": { @@ -5975,8 +6025,9 @@ "symfony/console": "^3.2 || ^4.0" }, "require-dev": { + "ext-json": "*", "friendsofphp/php-cs-fixer": "^2.9", - "phpunit/phpunit": "^5.7|^7.0" + "phpunit/phpunit": "^5.7 || ^7.0" }, "bin": [ "cghooks" @@ -5987,10 +6038,11 @@ "pre-commit": "composer check-style", "pre-push": [ "composer test", - "appver=$(grep -o -P '\\d.\\d.\\d' cghooks)", - "tag=$(git tag --sort=-v:refname | head -n 1 | tr -d v)", - "if [ \"$tag\" != \"$appver\" ]; then", - "echo \"The most recent tag v$tag does not match the application version $appver\n\"", + "appver=$(grep -o -E '\\d.\\d.\\d' cghooks)", + "tag=$(git describe --tags --abbrev=0)", + "if [ \"$tag\" != \"v$appver\" ]; then", + "echo \"The most recent tag $tag does not match the application version $appver\\n\"", + "tag=${tag#v}", "sed -i -E \"s/$appver/$tag/\" cghooks", "exit 1", "fi" @@ -6021,7 +6073,7 @@ "composer", "git" ], - "time": "2019-07-01T07:40:44+00:00" + "time": "2019-10-16T14:14:51+00:00" }, { "name": "sensiolabs/security-checker", From b762ab3f68a2e082b6a8d1261e4a5ed41f7624a1 Mon Sep 17 00:00:00 2001 From: TravisCarden Date: Tue, 19 Nov 2019 10:21:18 -0500 Subject: [PATCH 15/18] Fixed Acquia Cloud Pipelines deployment. --- bin/pipelines/packages_alter.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/bin/pipelines/packages_alter.yml b/bin/pipelines/packages_alter.yml index dc820bfce..d568733b4 100644 --- a/bin/pipelines/packages_alter.yml +++ b/bin/pipelines/packages_alter.yml @@ -1,3 +1,11 @@ --- acquia/lightning: type: drupal-profile + version: ~3.0 + +# Let Lightning manage its own components. +drupal/lightning_api: ~ +drupal/lightning_core: ~ +drupal/lightning_layout: ~ +drupal/lightning_media: ~ +drupal/lightning_workflow: ~ From 7380056c0a53b1aaff67d08bb847fbee4605bdc2 Mon Sep 17 00:00:00 2001 From: TravisCarden Date: Thu, 5 Dec 2019 08:34:44 -0500 Subject: [PATCH 16/18] Added drupal/mautic to packages. --- config/packages.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/packages.yml b/config/packages.yml index 4322ce3c3..7aff4dd4c 100644 --- a/config/packages.yml +++ b/config/packages.yml @@ -146,4 +146,6 @@ drupal/lightning_workflow: version: ~ version_dev: ~ +drupal/mautic: [] + drupal/media_acquiadam: [] From ff5f804c59f0039b49cfcdd2236e7047e5a6c82f Mon Sep 17 00:00:00 2001 From: TravisCarden Date: Thu, 5 Dec 2019 09:12:36 -0500 Subject: [PATCH 17/18] Bumped version number. --- config/VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/VERSION b/config/VERSION index f34a37b2c..6c67523f8 100644 --- a/config/VERSION +++ b/config/VERSION @@ -1 +1 @@ -v1.1.1-dev +v1.2.0-dev From 735f2594e8c6c035385ce4d24a343cbf9456b3a7 Mon Sep 17 00:00:00 2001 From: TravisCarden Date: Mon, 9 Dec 2019 14:10:42 -0500 Subject: [PATCH 18/18] Bumped version number. --- config/VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/VERSION b/config/VERSION index 6c67523f8..79127d85a 100644 --- a/config/VERSION +++ b/config/VERSION @@ -1 +1 @@ -v1.2.0-dev +v1.2.0