Skip to content
Snippets Groups Projects
builds 3.67 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/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;
    }