Skip to content
Snippets Groups Projects
builds 4.68 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;