function run($request) { increase_time_limit_to(3600); $modules = GitRepoFinder::get_all_repos(); $gitUser = Config::inst()->get('GitRepoFinder', "github_user_name"); $packagistUser = $this->Config()->get("packagist_user_name"); if ($gitUser && $packagistUser) { //all is good ... } else { user_error("make sure to set your git and packagist usernames via the standard config system"); } $count = 0; echo "<h1>Testing " . count($modules) . " modules (git user: {$gitUser} and packagist user: {$packagistUser}) ...</h1>"; $methodsToCheck = $this->Config()->get("methods_to_check"); foreach ($modules as $module) { $count++; $failures = 0; echo "<h3><a href=\"https://github.com/" . $gitUser . "/silverstripe-" . $module . "\"></a>{$count}. checking {$module}</h3>"; foreach ($methodsToCheck as $method) { if (!$this->{$method}($module)) { $failures++; DB::alteration_message("bad response for {$method}", "deleted"); } } if ($failures == 0) { DB::alteration_message("OK", "created"); } ob_flush(); flush(); } echo "----------------------------- THE END --------------------------"; }
public function run($request) { increase_time_limit_to(3600); //Check temp module folder is empty $tempFolder = GitHubModule::Config()->get('absolute_temp_folder'); $tempDirFiles = scandir($tempFolder); if (count($tempDirFiles) > 2) { die('<h2>' . $tempFolder . ' is not empty, please delete or move files </h2>'); } //Get list of all modules from GitHub $gitUserName = $this->Config()->get('git_user_name'); $modules = GitRepoFinder::get_all_repos(); /*$modules = array ( 'silverstripe-ecommerce_tax', "silverstripe-gift_voucher", "silverstripe-ecommerce_nutritional_products", "silverstripe-ecommerce_countries", "silverstripe-ecommerce_discount_coupon_countries", "silverstripe-templateoverview", "silverstripe-blog_shared_categorisation", "silverstripe-webpack_requirements_backend", "silverstripe-share_this_simple", "silverstripe-phone_field", "silverstripe-perfect_cms_images", "silverstripe-email_address_database_field", "silverstripe-ecommerce_stockists", "silverstripe-ecommerce_dashboard", "silverstripe-ecommerce_cloud_flare_geoip", "silverstripe-comments_add_recaptcha", "silverstripe-table_filter_sort", "silverstripe-email_reminder", "silverstripe-contact_list", "silverstripe-cms_tricks_for_apps", "silverstripe-cms_edit_link_field", "silverstripe-frontendeditor", "silverstripe-assets_sync_one_folder", "silverstripe-payment_omnipay", "silverstripe-sectionizer", "silverstripe-ecommerce_vote", "silverstripe-user_image_upload", "silverstripe-ecommerce_reports", "silverstripe-ecommerce_orderstep_feedback", "silverstripe-silverstripe-ecommerce_orderstep_feedback", "silverstripe-us_phone_number", "silverstripe-title_dataobject", "silverstripe-payment_stripe", "silverstripe-silverstripe-assets_sync_one_folder", );*/ $updateComposerJson = $this->Config()->get('update_composer_json'); $limitedModules = $this->Config()->get('modules_to_update'); if ($limitedModules && count($limitedModules)) { $modules = array_intersect($modules, $limitedModules); } /* * Get files to add to modules * */ $files = ClassInfo::subclassesFor('AddFileToModule'); array_shift($files); $limitedFileClasses = $this->Config()->get('files_to_update'); if ($limitedFileClasses && count($limitedFileClasses)) { $files = array_intersect($files, $limitedFileClasses); } /* * Get commands to run on modules * */ $commands = ClassInfo::subclassesFor('RunCommandLineMethodOnModule'); array_shift($commands); $limitedCommands = $this->Config()->get('commands_to_run'); if ($limitedCommands && count($limitedCommands)) { $commands = array_intersect($commands, $limitedCommands); } foreach ($modules as $count => $module) { if (stripos($module, 'silverstripe-') === false) { $module = "silverstripe-" . $module; } echo "<h2>" . ($count + 1) . ". " . $module . "</h2>"; $moduleObject = GitHubModule::get_or_create_github_module($module); $this->checkUpdateTag($moduleObject); // Check if all necessary files are perfect on GitHub repo already, // if so we can skip that module. But! ... if there are commands to run // over the files in the repo, then we need to clone the repo anyhow, // so skip the check if (count($commands) == 0 && !$updateComposerJson) { $moduleFilesOK = true; foreach ($files as $file) { $fileObj = $file::create($moduleObject); $checkFileName = $fileObj->getFileLocation(); $GitHubFileText = $moduleObject->getRawFileFromGithub($checkFileName); if ($GitHubFileText) { $fileCheck = $fileObj->compareWithText($GitHubFileText); if (!$fileCheck) { $moduleFilesOK = false; } } else { $moduleFilesOK = false; } } if ($moduleFilesOK) { GeneralMethods::outputToScreen("<li> All files in {$module} OK, skipping to next module ... </li>"); continue; } } $repository = $moduleObject->checkOrSetGitCommsWrapper($forceNew = true); //$this->checkConfigYML($moduleObject); if ($updateComposerJson) { $composerJsonObj = new ComposerJson($moduleObject); $composerJsonObj->updateJsonData(); $moduleObject->setDescription($composerJsonObj->getDescription()); } foreach ($files as $file) { //run file update $obj = $file::create($moduleObject); $obj->run(); } foreach ($commands as $command) { //run file update $obj = $command::create($moduleObject->Directory()); $obj->run(); //run command } //Update Repository description //$moduleObject->updateGitHubInfo(array()); if (!$moduleObject->add()) { die("ERROR in add"); } if (!$moduleObject->commit()) { die("ERROR in commit"); } if (!$moduleObject->push()) { die("ERROR in push"); } if (!$moduleObject->removeClone()) { die("ERROR in removeClone"); } $moduleObject->addRepoToScrutinzer(); } //to do .. }