You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
3.6 KiB
129 lines
3.6 KiB
<?php |
|
/** |
|
* @link http://www.yiiframework.com/ |
|
* @copyright Copyright (c) 2008 Yii Software LLC |
|
* @license http://www.yiiframework.com/license/ |
|
*/ |
|
|
|
namespace yii\build\controllers; |
|
|
|
use Yii; |
|
use yii\console\Controller; |
|
|
|
/** |
|
* ReleaseController is there to help preparing releases |
|
* |
|
* @author Carsten Brandt <mail@cebe.cc> |
|
* @since 2.0 |
|
*/ |
|
class ReleaseController extends Controller |
|
{ |
|
public $defaultAction = 'help'; |
|
|
|
/** |
|
* Usage: |
|
* |
|
* ``` |
|
* ./build/build release/prepare 2.0.0-beta |
|
* ``` |
|
* |
|
*/ |
|
public function actionPrepare($version) |
|
{ |
|
$this->closeChangelogs($version); |
|
$this->composerSetStability($version); |
|
$this->composerCreateLocks(); |
|
$this->updateYiiVersion($version); |
|
} |
|
|
|
/** |
|
* Usage: |
|
* |
|
* ``` |
|
* ./build/build release/done 2.0.0-dev 2.0.0-rc |
|
* ``` |
|
*/ |
|
public function actionDone($devVersion, $nextVersion) |
|
{ |
|
$this->openChangelogs($nextVersion); |
|
$this->composerSetStability('dev'); |
|
$this->updateYiiVersion($devVersion); |
|
} |
|
|
|
protected function closeChangelogs($version) |
|
{ |
|
$v = str_replace('\\-', '[\\- ]', preg_quote($version, '/')); |
|
$headline = $version . ' ' . date('F d, Y'); |
|
$this->sed( |
|
'/'.$v.' under development\n(-+?)\n/', |
|
$headline . "\n" . str_repeat('-', strlen($headline)) . "\n", |
|
$this->getChangelogs() |
|
); |
|
} |
|
|
|
protected function openChangelogs($version) |
|
{ |
|
$headline = "\n$version under development\n"; |
|
$headline .= str_repeat('-', strlen($headline) - 2) . "\n\n"; |
|
$headline .= "- no changes in this release.\n"; |
|
foreach($this->getChangelogs() as $file) { |
|
$lines = explode("\n", file_get_contents($file)); |
|
$hl = [ |
|
array_shift($lines), |
|
array_shift($lines), |
|
]; |
|
array_unshift($lines, $headline); |
|
|
|
file_put_contents($file, implode("\n", array_merge($hl, $lines))); |
|
} |
|
} |
|
|
|
protected function getChangelogs() |
|
{ |
|
return array_merge([YII_PATH . '/CHANGELOG.md'], glob(dirname(YII_PATH) . '/extensions/*/CHANGELOG.md')); |
|
} |
|
|
|
protected function composerSetStability($version) |
|
{ |
|
$stability = 'stable'; |
|
if (strpos($version, 'alpha') !== false) { |
|
$stability = 'alpha'; |
|
} elseif (strpos($version, 'beta') !== false) { |
|
$stability = 'beta'; |
|
} elseif (strpos($version, 'rc') !== false) { |
|
$stability = 'RC'; |
|
} elseif (strpos($version, 'dev') !== false) { |
|
$stability = 'dev'; |
|
} |
|
|
|
$this->sed( |
|
'/"minimum-stability": "(.+?)",/', |
|
'"minimum-stability": "' . $stability . '",', |
|
[ |
|
dirname(YII_PATH) . '/apps/advanced/composer.json', |
|
dirname(YII_PATH) . '/apps/basic/composer.json', |
|
dirname(YII_PATH) . '/apps/benchmark/composer.json', |
|
] |
|
); |
|
} |
|
|
|
protected function composerCreateLocks() |
|
{ |
|
$this->confirm('Run composer update for each app and commit the composer.lock file. Hit enter when done.'); |
|
} |
|
|
|
protected function updateYiiVersion($version) |
|
{ |
|
$this->sed( |
|
'/function getVersion\(\)\n \{\n return \'(.+?)\';/', |
|
"function getVersion()\n {\n return '$version';", |
|
YII_PATH . '/BaseYii.php'); |
|
} |
|
|
|
protected function sed($pattern, $replace, $files) |
|
{ |
|
foreach((array) $files as $file) { |
|
file_put_contents($file, preg_replace($pattern, $replace, file_get_contents($file))); |
|
} |
|
} |
|
}
|
|
|