castopod/builds

154 lines
4.7 KiB
PHP

#!/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;
}