Updating PHPCI to use YAML-based config files.

This commit is contained in:
Dan Cryer 2013-05-23 12:10:01 +01:00
parent 6e3df00f62
commit ce6943de86
3 changed files with 49 additions and 36 deletions

1
.gitignore vendored
View file

@ -8,3 +8,4 @@ config.php
.project
.buildpath
.htaccess
PHPCI/config.yml

View file

@ -38,13 +38,20 @@ class InstallCommand extends Command
protected function execute(InputInterface $input, OutputInterface $output)
{
// Gather initial data from the user:
$dbHost = $this->ask('Enter your MySQL host: ');
$dbName = $this->ask('Enter the database name PHPCI should use: ');
$dbUser = $this->ask('Enter your MySQL username: ');
$dbPass = $this->ask('Enter your MySQL password: ', true);
$ciUrl = $this->ask('Your PHPCI URL (without trailing slash): ');
$ghId = $this->ask('(Optional) Github Application ID: ', true);
$ghSecret = $this->ask('(Optional) Github Application Secret: ', true);
$conf = array();
$conf['b8']['database']['servers']['read'] = $this->ask('Enter your MySQL host: ');
$conf['b8']['database']['servers']['write'] = $conf['b8']['database']['servers']['read'];
$conf['b8']['database']['name'] = $this->ask('Enter the database name PHPCI should use: ');
$conf['b8']['database']['username'] = $this->ask('Enter your MySQL username: ');
$conf['b8']['database']['password'] = $this->ask('Enter your MySQL password: ', true);
$conf['phpci']['url'] = $this->ask('Your PHPCI URL (without trailing slash): ');
$conf['phpci']['github']['id'] = $this->ask('(Optional) Github Application ID: ', true);
$conf['phpci']['github']['secret'] = $this->ask('(Optional) Github Application Secret: ', true);
$dbUser = $conf['b8']['database']['username'];
$dbPass = $conf['b8']['database']['password'];
$dbHost = $conf['b8']['database']['servers']['write'];
$dbName = $conf['b8']['database']['name'];
// Create the database if it doesn't exist:
$cmd = 'mysql -u' . $dbUser . (!empty($dbPass) ? ' -p' . $dbPass : '') . ' -h' . $dbHost .
@ -52,29 +59,11 @@ class InstallCommand extends Command
shell_exec($cmd);
$str = "<?php
$dumper = new \Symfony\Component\Yaml\Dumper();
$yaml = $dumper->dump($conf);
if(!defined('PHPCI_DB_HOST')) {
define('PHPCI_DB_HOST', '{$dbHost}');
}
file_put_contents(PHPCI_DIR . 'PHPCI/config.yml', $yaml);
b8\Database::setDetails('{$dbName}', '{$dbUser}', '{$dbPass}');
b8\Database::setWriteServers(array('{$dbHost}'));
b8\Database::setReadServers(array('{$dbHost}'));
\$config = b8\Config::getInstance();
\$config->set('install_url', '{$ciUrl}');
";
// Has the user entered Github app details? If so add those to config:
if (!empty($ghId) && !empty($ghSecret)) {
$str .= PHP_EOL .
"\$registry->set('github_app', array('id' => '{$ghId}', 'secret' => '{$ghSecret}'));" .
PHP_EOL;
}
// Write the config file and then re-bootstrap:
file_put_contents(PHPCI_DIR . 'config.php', $str);
require(PHPCI_DIR . 'bootstrap.php');
// Update the database:

View file

@ -36,20 +36,43 @@ if (!defined('APPLICATION_PATH')) {
require_once(APPLICATION_PATH . 'vendor/autoload.php');
// Load configuration if present:
$config = new b8\Config();
$conf = array();
$conf['b8']['app']['namespace'] = 'PHPCI';
$conf['b8']['app']['default_controller'] = 'Index';
$conf['b8']['view']['path'] = dirname(__FILE__) . '/PHPCI/View/';
$config = new b8\Config($conf);
$request = new b8\Http\Request();
$registry = new b8\Registry($config, $request);
if (file_exists(APPLICATION_PATH . 'config.php')) {
require(APPLICATION_PATH . 'config.php');
// Define our PHPCI_URL, if not already defined:
if (!defined('PHPCI_URL')) {
define('PHPCI_URL', $config->get('install_url', '') . '/');
$conf = $config->get(null);
unset($conf['b8']['app']);
unset($conf['b8']['view']);
$conf['phpci']['url'] = $conf['install_url'];
if (isset($conf['github_app'])) {
$conf['phpci']['github'] = $conf['github_app'];
}
unset($conf['install_url']);
unset($conf['github_app']);
$dumper = new Symfony\Component\Yaml\Dumper();
$yaml = $dumper->dump($conf);
file_put_contents(APPLICATION_PATH . 'PHPCI/config.yml', $yaml);
unlink(APPLICATION_PATH . 'config.php');
}
// Set up the registry:
$config->set('app_namespace', 'PHPCI');
$config->set('default_controller', 'Index');
$config->set('view_path', dirname(__FILE__) . '/PHPCI/View/');
if (file_exists(APPLICATION_PATH . 'PHPCI/config.yml')) {
$config->loadYaml(APPLICATION_PATH . 'PHPCI/config.yml');
// Define our PHPCI_URL, if not already defined:
if (!defined('PHPCI_URL')) {
define('PHPCI_URL', $config->get('phpci.url', '') . '/');
}
}