#!/usr/bin/env php <?php define('LATEST_RELEASE', '^4.0'); define('GITHUB_URL', 'https://github.com/codeigniter4/codeigniter4'); /* * -------------------------------------------------------------------- * Stability Toggle * -------------------------------------------------------------------- * Use this script to toggle the CodeIgniter dependency between the * latest stable release and the most recent development update. * * Usage: php builds [release|development] */ // Determine the requested stability if (empty($argv[1]) || !in_array($argv[1], ['release', 'development'])) { echo 'Usage: php builds [release|development]' . PHP_EOL; exit(); } $dev = $argv[1] == 'development'; $modified = []; /* Locate each file and update it for the requested stability */ // Composer.json $file = __DIR__ . DIRECTORY_SEPARATOR . 'composer.json'; if (is_file($file)) { // Make sure we can read it if ($contents = file_get_contents($file)) { if ($array = json_decode($contents, true)) { // Development if ($dev) { // Set 'minimum-stability' $array['minimum-stability'] = 'dev'; $array['prefer-stable'] = true; // Make sure the repo is configured if (!isset($array['repositories'])) { $array['repositories'] = []; } // Check for the CodeIgniter repo $found = false; foreach ($array['repositories'] as $repository) { if ($repository['url'] == GITHUB_URL) { $found = true; break; } } // Add the repo if it was not found if (!$found) { $array['repositories'][] = [ 'type' => 'vcs', 'url' => GITHUB_URL, ]; } // Define the "require" $array['require']['codeigniter4/codeigniter4'] = 'dev-develop'; unset($array['require']['codeigniter4/framework']); } // Release else { // Clear 'minimum-stability' unset($array['minimum-stability']); // If the repo is configured then clear it if (isset($array['repositories'])) { // Check for the CodeIgniter repo foreach ($array['repositories'] as $i => $repository) { if ($repository['url'] == GITHUB_URL) { unset($array['repositories'][$i]); break; } } if (empty($array['repositories'])) { unset($array['repositories']); } } // Define the "require" $array['require']['codeigniter4/framework'] = LATEST_RELEASE; unset($array['require']['codeigniter4/codeigniter4']); } // Write out a new composer.json file_put_contents( $file, json_encode( $array, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES ) . PHP_EOL ); $modified[] = $file; } else { echo 'Warning: Unable to decode composer.json! Skipping...' . PHP_EOL; } } else { echo 'Warning: Unable to read composer.json! Skipping...' . PHP_EOL; } } // Paths config and PHPUnit XMLs $files = [ __DIR__ . DIRECTORY_SEPARATOR . 'app/Config/Paths.php', __DIR__ . DIRECTORY_SEPARATOR . 'phpunit.xml.dist', __DIR__ . DIRECTORY_SEPARATOR . 'phpunit.xml', ]; foreach ($files as $file) { if (is_file($file)) { $contents = file_get_contents($file); // Development if ($dev) { $contents = str_replace( 'vendor/codeigniter4/framework', 'vendor/codeigniter4/codeigniter4', $contents ); } // Release else { $contents = str_replace( 'vendor/codeigniter4/codeigniter4', 'vendor/codeigniter4/framework', $contents ); } file_put_contents($file, $contents); $modified[] = $file; } } if (empty($modified)) { echo 'No files modified' . PHP_EOL; } else { echo 'The following files were modified:' . PHP_EOL; foreach ($modified as $file) { echo " * {$file}" . PHP_EOL; } echo 'Run `composer update` to sync changes with your vendor folder' . PHP_EOL; }