From 8f3b14d78a5136f87f4cbec70f42bbcb8837690a Mon Sep 17 00:00:00 2001 From: sayan goswami Date: Tue, 20 Jun 2023 18:35:30 +0530 Subject: [PATCH] Initial commit --- bin/ci/_includes.sh | 1 + config/services.yml | 2 ++ src/Domain/Composer/ComposerFacade.php | 16 +++++++++ src/Domain/Fixture/FixtureCreator.php | 50 ++++++++++++++++++++++++-- 4 files changed, 66 insertions(+), 3 deletions(-) diff --git a/bin/ci/_includes.sh b/bin/ci/_includes.sh index 0f26db21b..693d3b407 100755 --- a/bin/ci/_includes.sh +++ b/bin/ci/_includes.sh @@ -123,6 +123,7 @@ allowed_failures=( ) if [[ " ${allowed_failures[*]} " =~ " ${ORCA_JOB} " ]]; then set +e + export ORCA_IS_ALLOWED_FAILURE="TRUE" notice "This job is allowed to fail and will report as passing regardless of outcome." fi diff --git a/config/services.yml b/config/services.yml index dd27cdf59..5dd440ca4 100644 --- a/config/services.yml +++ b/config/services.yml @@ -13,6 +13,7 @@ parameters: env(ORCA_PACKAGES_CONFIG_ALTER): ~ env(ORCA_PHPCS_STANDARD): "AcquiaDrupalTransitional" env(ORCA_TELEMETRY_ENABLE): "false" + env(ORCA_IS_ALLOWED_FAILURE): "%env(ORCA_IS_ALLOWED_FAILURE)%" services: @@ -30,6 +31,7 @@ services: $packages_config: "@=container.getParameter('ORCA_PACKAGES_CONFIG') === '' ? 'config/packages.yml' : parameter('ORCA_PACKAGES_CONFIG')" $packages_config_alter: "%env(ORCA_PACKAGES_CONFIG_ALTER)%" $telemetry_is_enabled: "%env(bool:ORCA_TELEMETRY_ENABLE)%" + $is_allowed_failure: "%env(ORCA_IS_ALLOWED_FAILURE)%" public: true Acquia\Orca\: diff --git a/src/Domain/Composer/ComposerFacade.php b/src/Domain/Composer/ComposerFacade.php index 1bc449c3c..1177a40d4 100644 --- a/src/Domain/Composer/ComposerFacade.php +++ b/src/Domain/Composer/ComposerFacade.php @@ -261,6 +261,22 @@ private function runComposer(array $command, array $args = [], string $cwd = NUL $this->processRunner->runExecutable('composer', $command, $cwd); } + /** + * Set config to root composer.json. + * + * @param array $config + * A list of config elements to be removed, e.g., "platform". + */ + public function setConfig(array $config): void { + if (empty($config)) { + throw new \InvalidArgumentException('No config provided to remove.'); + } + + $this->runComposer([ + 'config', + ], $config); + } + /** * Validates a composer.json. * diff --git a/src/Domain/Fixture/FixtureCreator.php b/src/Domain/Fixture/FixtureCreator.php index d2a6de515..abaae8e94 100644 --- a/src/Domain/Fixture/FixtureCreator.php +++ b/src/Domain/Fixture/FixtureCreator.php @@ -11,6 +11,7 @@ use Acquia\Orca\Domain\Package\Package; use Acquia\Orca\Domain\Package\PackageManager; use Acquia\Orca\Exception\OrcaException; +use Acquia\Orca\Helper\EnvFacade; use Acquia\Orca\Helper\Filesystem\FixturePathHandler; use Acquia\Orca\Helper\Process\ProcessRunner; use Acquia\Orca\Options\FixtureOptions; @@ -135,6 +136,11 @@ class FixtureCreator { */ private $fixtureCustomizer; + /** + * @var \Acquia\Orca\Helper\EnvFacade + */ + private EnvFacade $env; + /** * Constructs an instance. * @@ -169,7 +175,22 @@ class FixtureCreator { * @param \Acquia\Orca\Domain\Fixture\FixtureCustomizer $fixtureCustomizer * The fixture customizer. */ - public function __construct(CloudHooksInstaller $cloud_hooks_installer, CodebaseCreator $codebase_creator, ComposerFacade $composer, ComposerJsonHelper $composer_json_helper, DrupalSettingsHelper $drupal_settings_helper, FixturePathHandler $fixture_path_handler, FixtureInspector $fixture_inspector, GitFacade $git, SiteInstaller $site_installer, SymfonyStyle $output, ProcessRunner $process_runner, PackageManager $package_manager, SubextensionManager $subextension_manager, VersionFinder $version_finder, FixtureCustomizer $fixtureCustomizer) { + public function __construct(CloudHooksInstaller $cloud_hooks_installer, + CodebaseCreator $codebase_creator, + ComposerFacade $composer, + ComposerJsonHelper $composer_json_helper, + DrupalSettingsHelper $drupal_settings_helper, + FixturePathHandler $fixture_path_handler, + FixtureInspector $fixture_inspector, + GitFacade $git, + SiteInstaller $site_installer, + SymfonyStyle $output, + ProcessRunner $process_runner, + PackageManager $package_manager, + SubextensionManager $subextension_manager, + VersionFinder $version_finder, + FixtureCustomizer $fixtureCustomizer, + EnvFacade $env) { $this->cloudHooksInstaller = $cloud_hooks_installer; $this->codebaseCreator = $codebase_creator; $this->composer = $composer; @@ -185,6 +206,7 @@ public function __construct(CloudHooksInstaller $cloud_hooks_installer, Codebase $this->subextensionManager = $subextension_manager; $this->versionFinder = $version_finder; $this->fixtureCustomizer = $fixtureCustomizer; + $this->env = $env; } /** @@ -199,6 +221,7 @@ public function __construct(CloudHooksInstaller $cloud_hooks_installer, Codebase public function create(FixtureOptions $options): void { $this->options = $options; $this->createComposerProject(); + $this->configureComposerExitOnPatchFailure(); $this->removeComposerConfigPlatform(); $this->replaceCoreRecommendedWithCore(); $this->fixDefaultDependencies(); @@ -223,6 +246,28 @@ private function createComposerProject(): void { $this->codebaseCreator->create($this->options); } + /** + * Configures composer "composer-exit-on-patch-failure" parameter. + */ + private function configureComposerExitOnPatchFailure(): void { + + if ($this->env->get('ORCA_IS_ALLOWED_FAILURE')) { + return; + } + + $this->output->section("Setting composer-exit-on-patch-failure to false."); + try { + $this->composer->setConfig([ + 'extra.composer-exit-on-patch-failure', + 'false', + '--json', + ]); + } + catch (\Exception $e) { + $this->output->writeln("Failed to remove Composer platform requirements."); + } + } + /** * Remove "config.platform" parameter from fixture root composer.json. */ @@ -431,7 +476,7 @@ private function shouldSymlinkNonSut(Package $package): bool { */ private function addAssetPackagistPathRepositories(): void { $this->composerJsonHelper->addRepository( - 'asset-packagist', + 'asset-packagist', 'composer', 'https://asset-packagist.org' ); @@ -591,7 +636,6 @@ private function verifySut(): void { * Add packages defined in "allow-plugins" config of SUT to root composer. */ private function addSutAllowedPluginsToRootComposer(): void { - $this->output->section("Adding Allowed Plugins from SUT"); $package = $this->options->getSut();