diff --git a/.gitignore b/.gitignore
index d8c5ef7b..fbfc1a28 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,4 +10,8 @@ config.php
PHPCI/config.yml
cache
/loggerconfig.php
-/pluginconfig.php
\ No newline at end of file
+/pluginconfig.php
+PHPCI/Model/Migration.php
+PHPCI/Model/Base/MigrationBase.php
+PHPCI/Store/MigrationStore.php
+PHPCI/Store/Base/MigrationStoreBase.php
diff --git a/PHPCI/Command/InstallCommand.php b/PHPCI/Command/InstallCommand.php
index 9921cb37..83c50437 100644
--- a/PHPCI/Command/InstallCommand.php
+++ b/PHPCI/Command/InstallCommand.php
@@ -204,19 +204,7 @@ class InstallCommand extends Command
{
$output->write('Setting up your database... ');
- // Load PHPCI's bootstrap file:
- require(PHPCI_DIR . 'bootstrap.php');
-
- try {
- // Set up the database, based on table data from the models:
- $gen = new Database\Generator(Database::getConnection(), 'PHPCI', './PHPCI/Model/Base/');
- $gen->generate();
- } catch (Exception $ex) {
- $output->writeln('');
- $output->writeln('PHPCI failed to set up the database.');
- $output->writeln('' . $ex->getMessage() . '');
- die;
- }
+ shell_exec(PHPCI_DIR . 'vendor/bin/phinx migrate -c "' . PHPCI_DIR . 'phinx.php"');
$output->writeln('OK');
}
diff --git a/PHPCI/Command/UpdateCommand.php b/PHPCI/Command/UpdateCommand.php
index 171408fa..1b8becb1 100644
--- a/PHPCI/Command/UpdateCommand.php
+++ b/PHPCI/Command/UpdateCommand.php
@@ -50,11 +50,9 @@ class UpdateCommand extends Command
{
$this->verifyInstalled($output);
- $output->writeln('Updating PHPCI database.');
+ $output->write('Updating PHPCI database: ');
- // Update the database:
- $gen = new \b8\Database\Generator(\b8\Database::getConnection(), 'PHPCI', './PHPCI/Model/Base/');
- $gen->generate();
+ shell_exec(PHPCI_DIR . 'vendor/bin/phinx migrate -c "' . PHPCI_DIR . 'phinx.php"');
$output->writeln('Done!');
}
diff --git a/PHPCI/Migrations/20140513143726_initial_migration.php b/PHPCI/Migrations/20140513143726_initial_migration.php
new file mode 100644
index 00000000..8aad60b6
--- /dev/null
+++ b/PHPCI/Migrations/20140513143726_initial_migration.php
@@ -0,0 +1,218 @@
+createBuildTable();
+ $this->createBuildMetaTable();
+ $this->createProjectTable();
+ $this->createUserTable();
+
+ // Set up foreign keys:
+ $build = $this->table('build');
+
+ if (!$build->hasForeignKey('project_id')) {
+ $build->addForeignKey('project_id', 'project', 'id', array('delete'=> 'CASCADE', 'update' => 'CASCADE'));
+ }
+
+ $build->save();
+
+ $buildMeta = $this->table('build_meta');
+
+ if (!$buildMeta->hasForeignKey('build_id')) {
+ $buildMeta->addForeignKey('build_id', 'build', 'id', array('delete'=> 'CASCADE', 'update' => 'CASCADE'));
+ }
+
+ if (!$buildMeta->hasForeignKey('project_id')) {
+ $buildMeta->addForeignKey('project_id', 'project', 'id', array('delete'=> 'CASCADE', 'update' => 'CASCADE'));
+ }
+
+ $buildMeta->save();
+ }
+
+ /**
+ * Migrate Down.
+ */
+ public function down()
+ {
+
+ }
+
+ protected function createBuildTable()
+ {
+ $table = $this->table('build');
+
+ if (!$table->hasColumn('project_id')) {
+ $table->addColumn('project_id', 'integer');
+ }
+
+ if (!$table->hasColumn('commit_id')) {
+ $table->addColumn('commit_id', 'string', array('limit' => 50));
+ }
+
+ if (!$table->hasColumn('status')) {
+ $table->addColumn('status', 'integer', array('limit' => 4));
+ }
+
+ if (!$table->hasColumn('log')) {
+ $table->addColumn('log', 'text');
+ }
+
+ if (!$table->hasColumn('branch')) {
+ $table->addColumn('branch', 'string', array('limit' => 50));
+ }
+
+ if (!$table->hasColumn('created')) {
+ $table->addColumn('created', 'datetime');
+ }
+
+ if (!$table->hasColumn('started')) {
+ $table->addColumn('started', 'datetime');
+ }
+
+ if (!$table->hasColumn('finished')) {
+ $table->addColumn('finished', 'datetime');
+ }
+
+ if (!$table->hasColumn('committer_email')) {
+ $table->addColumn('committer_email', 'string', array('limit' => 250));
+ }
+
+ if (!$table->hasColumn('commit_message')) {
+ $table->addColumn('commit_message', 'text');
+ }
+
+ if (!$table->hasColumn('extra')) {
+ $table->addColumn('extra', 'text');
+ }
+
+ if ($table->hasColumn('plugins')) {
+ $table->removeColumn('plugins');
+ }
+
+ if (!$table->hasIndex(array('project_id'))) {
+ $table->addIndex(array('project_id'));
+ }
+
+ if (!$table->hasIndex(array('status'))) {
+ $table->addIndex(array('status'));
+ }
+
+ $table->save();
+ }
+
+ protected function createBuildMetaTable()
+ {
+ $table = $this->table('build_meta');
+
+ if (!$table->hasColumn('project_id')) {
+ $table->addColumn('project_id', 'integer');
+ }
+
+ if (!$table->hasColumn('build_id')) {
+ $table->addColumn('build_id', 'integer');
+ }
+
+ if (!$table->hasColumn('meta_key')) {
+ $table->addColumn('meta_key', 'string', array('limit' => 250));
+ }
+
+ if (!$table->hasColumn('meta_value')) {
+ $table->addColumn('meta_value', 'text');
+ }
+
+ if (!$table->hasIndex(array('build_id', 'meta_key'))) {
+ $table->addIndex(array('build_id', 'meta_key'));
+ }
+
+ $table->save();
+ }
+
+ protected function createProjectTable()
+ {
+ $table = $this->table('project');
+
+ if (!$table->hasColumn('title')) {
+ $table->addColumn('title', 'string', array('limit' => 250));
+ }
+
+ if (!$table->hasColumn('reference')) {
+ $table->addColumn('reference', 'string', array('limit' => 250));
+ }
+
+ if (!$table->hasColumn('git_key')) {
+ $table->addColumn('git_key', 'text');
+ }
+
+ if (!$table->hasColumn('public_key')) {
+ $table->addColumn('public_key', 'text');
+ }
+
+ if (!$table->hasColumn('type')) {
+ $table->addColumn('type', 'string', array('limit' => 50));
+ }
+
+ if (!$table->hasColumn('access_information')) {
+ $table->addColumn('access_information', 'string', array('limit' => 250));
+ }
+
+ if (!$table->hasColumn('last_commit')) {
+ $table->addColumn('last_commit', 'string', array('limit' => 250));
+ }
+
+ if (!$table->hasColumn('build_config')) {
+ $table->addColumn('build_config', 'text');
+ }
+
+ if (!$table->hasColumn('allow_public_status')) {
+ $table->addColumn('allow_public_status', 'integer');
+ }
+
+ if ($table->hasColumn('token')) {
+ $table->removeColumn('token');
+ }
+
+ if (!$table->hasIndex(array('title'))) {
+ $table->addIndex(array('title'));
+ }
+
+ $table->save();
+ }
+
+ protected function createUserTable()
+ {
+ $table = $this->table('user');
+
+ if (!$table->hasColumn('email')) {
+ $table->addColumn('email', 'string', array('limit' => 250));
+ }
+
+ if (!$table->hasColumn('hash')) {
+ $table->addColumn('hash', 'string', array('limit' => 250));
+ }
+
+ if (!$table->hasColumn('name')) {
+ $table->addColumn('name', 'string', array('limit' => 250));
+ }
+
+ if (!$table->hasColumn('is_admin')) {
+ $table->addColumn('is_admin', 'integer');
+ }
+
+ if (!$table->hasIndex(array('email'))) {
+ $table->addIndex(array('email'));
+ }
+
+ $table->save();
+ }
+}
\ No newline at end of file
diff --git a/PHPCI/Model/Base/BuildMetaBase.php b/PHPCI/Model/Base/BuildMetaBase.php
index fc9183b2..a979e1d9 100644
--- a/PHPCI/Model/Base/BuildMetaBase.php
+++ b/PHPCI/Model/Base/BuildMetaBase.php
@@ -52,6 +52,7 @@ class BuildMetaBase extends Model
'meta_value' => 'getMetaValue',
// Foreign key getters:
+ 'Project' => 'getProject',
'Build' => 'getBuild',
);
@@ -67,6 +68,7 @@ class BuildMetaBase extends Model
'meta_value' => 'setMetaValue',
// Foreign key setters:
+ 'Project' => 'setProject',
'Build' => 'setBuild',
);
@@ -110,12 +112,20 @@ class BuildMetaBase extends Model
public $indexes = array(
'PRIMARY' => array('unique' => true, 'columns' => 'id'),
'idx_meta_id' => array('unique' => true, 'columns' => 'build_id, meta_key'),
+ 'project_id' => array('columns' => 'project_id'),
);
/**
* @var array
*/
public $foreignKeys = array(
+ 'build_meta_ibfk_1' => array(
+ 'local_col' => 'project_id',
+ 'update' => 'CASCADE',
+ 'delete' => 'CASCADE',
+ 'table' => 'project',
+ 'col' => 'id'
+ ),
'fk_meta_build_id' => array(
'local_col' => 'build_id',
'update' => 'CASCADE',
@@ -281,6 +291,63 @@ class BuildMetaBase extends Model
$this->_setModified('meta_value');
}
+ /**
+ * Get the Project model for this BuildMeta by Id.
+ *
+ * @uses \PHPCI\Store\ProjectStore::getById()
+ * @uses \PHPCI\Model\Project
+ * @return \PHPCI\Model\Project
+ */
+ public function getProject()
+ {
+ $key = $this->getProjectId();
+
+ if (empty($key)) {
+ return null;
+ }
+
+ $cacheKey = 'Cache.Project.' . $key;
+ $rtn = $this->cache->get($cacheKey, null);
+
+ if (empty($rtn)) {
+ $rtn = Factory::getStore('Project', 'PHPCI')->getById($key);
+ $this->cache->set($cacheKey, $rtn);
+ }
+
+ return $rtn;
+ }
+
+ /**
+ * Set Project - Accepts an ID, an array representing a Project or a Project model.
+ *
+ * @param $value mixed
+ */
+ public function setProject($value)
+ {
+ // Is this an instance of Project?
+ if ($value instanceof \PHPCI\Model\Project) {
+ return $this->setProjectObject($value);
+ }
+
+ // Is this an array representing a Project item?
+ if (is_array($value) && !empty($value['id'])) {
+ return $this->setProjectId($value['id']);
+ }
+
+ // Is this a scalar value representing the ID of this foreign key?
+ return $this->setProjectId($value);
+ }
+
+ /**
+ * Set Project - Accepts a Project model.
+ *
+ * @param $value \PHPCI\Model\Project
+ */
+ public function setProjectObject(\PHPCI\Model\Project $value)
+ {
+ return $this->setProjectId($value->getId());
+ }
+
/**
* Get the Build model for this BuildMeta by Id.
*
diff --git a/PHPCI/Model/Base/ProjectBase.php b/PHPCI/Model/Base/ProjectBase.php
index 9e2f5922..00bee23a 100644
--- a/PHPCI/Model/Base/ProjectBase.php
+++ b/PHPCI/Model/Base/ProjectBase.php
@@ -36,10 +36,9 @@ class ProjectBase extends Model
'id' => null,
'title' => null,
'reference' => null,
- 'git_key' => null,
- 'public_key' => null,
+ 'ssh_private_key' => null,
+ 'ssh_public_key' => null,
'type' => null,
- 'token' => null,
'access_information' => null,
'last_commit' => null,
'build_config' => null,
@@ -54,10 +53,9 @@ class ProjectBase extends Model
'id' => 'getId',
'title' => 'getTitle',
'reference' => 'getReference',
- 'git_key' => 'getGitKey',
- 'public_key' => 'getPublicKey',
+ 'ssh_private_key' => 'getSshPrivateKey',
+ 'ssh_public_key' => 'getSshPublicKey',
'type' => 'getType',
- 'token' => 'getToken',
'access_information' => 'getAccessInformation',
'last_commit' => 'getLastCommit',
'build_config' => 'getBuildConfig',
@@ -74,10 +72,9 @@ class ProjectBase extends Model
'id' => 'setId',
'title' => 'setTitle',
'reference' => 'setReference',
- 'git_key' => 'setGitKey',
- 'public_key' => 'setPublicKey',
+ 'ssh_private_key' => 'setSshPrivateKey',
+ 'ssh_public_key' => 'setSshPublicKey',
'type' => 'setType',
- 'token' => 'setToken',
'access_information' => 'setAccessInformation',
'last_commit' => 'setLastCommit',
'build_config' => 'setBuildConfig',
@@ -107,12 +104,12 @@ class ProjectBase extends Model
'length' => 250,
'default' => null,
),
- 'git_key' => array(
+ 'ssh_private_key' => array(
'type' => 'text',
'nullable' => true,
'default' => null,
),
- 'public_key' => array(
+ 'ssh_public_key' => array(
'type' => 'text',
'nullable' => true,
'default' => null,
@@ -122,12 +119,6 @@ class ProjectBase extends Model
'length' => 50,
'default' => 1,
),
- 'token' => array(
- 'type' => 'varchar',
- 'length' => 50,
- 'nullable' => true,
- 'default' => null,
- ),
'access_information' => array(
'type' => 'varchar',
'length' => 250,
@@ -202,25 +193,25 @@ class ProjectBase extends Model
}
/**
- * Get the value of GitKey / git_key.
+ * Get the value of SshPrivateKey / ssh_private_key.
*
* @return string
*/
- public function getGitKey()
+ public function getSshPrivateKey()
{
- $rtn = $this->data['git_key'];
+ $rtn = $this->data['ssh_private_key'];
return $rtn;
}
/**
- * Get the value of PublicKey / public_key.
+ * Get the value of SshPublicKey / ssh_public_key.
*
* @return string
*/
- public function getPublicKey()
+ public function getSshPublicKey()
{
- $rtn = $this->data['public_key'];
+ $rtn = $this->data['ssh_public_key'];
return $rtn;
}
@@ -237,18 +228,6 @@ class ProjectBase extends Model
return $rtn;
}
- /**
- * Get the value of Token / token.
- *
- * @return string
- */
- public function getToken()
- {
- $rtn = $this->data['token'];
-
- return $rtn;
- }
-
/**
* Get the value of AccessInformation / access_information.
*
@@ -358,39 +337,39 @@ class ProjectBase extends Model
}
/**
- * Set the value of GitKey / git_key.
+ * Set the value of SshPrivateKey / ssh_private_key.
*
* @param $value string
*/
- public function setGitKey($value)
+ public function setSshPrivateKey($value)
{
- $this->_validateString('GitKey', $value);
+ $this->_validateString('SshPrivateKey', $value);
- if ($this->data['git_key'] === $value) {
+ if ($this->data['ssh_private_key'] === $value) {
return;
}
- $this->data['git_key'] = $value;
+ $this->data['ssh_private_key'] = $value;
- $this->_setModified('git_key');
+ $this->_setModified('ssh_private_key');
}
/**
- * Set the value of PublicKey / public_key.
+ * Set the value of SshPublicKey / ssh_public_key.
*
* @param $value string
*/
- public function setPublicKey($value)
+ public function setSshPublicKey($value)
{
- $this->_validateString('PublicKey', $value);
+ $this->_validateString('SshPublicKey', $value);
- if ($this->data['public_key'] === $value) {
+ if ($this->data['ssh_public_key'] === $value) {
return;
}
- $this->data['public_key'] = $value;
+ $this->data['ssh_public_key'] = $value;
- $this->_setModified('public_key');
+ $this->_setModified('ssh_public_key');
}
/**
@@ -413,24 +392,6 @@ class ProjectBase extends Model
$this->_setModified('type');
}
- /**
- * Set the value of Token / token.
- *
- * @param $value string
- */
- public function setToken($value)
- {
- $this->_validateString('Token', $value);
-
- if ($this->data['token'] === $value) {
- return;
- }
-
- $this->data['token'] = $value;
-
- $this->_setModified('token');
- }
-
/**
* Set the value of AccessInformation / access_information.
*
@@ -516,4 +477,16 @@ class ProjectBase extends Model
{
return Factory::getStore('Build', 'PHPCI')->getByProjectId($this->getId());
}
+
+ /**
+ * Get BuildMeta models by ProjectId for this Project.
+ *
+ * @uses \PHPCI\Store\BuildMetaStore::getByProjectId()
+ * @uses \PHPCI\Model\BuildMeta
+ * @return \PHPCI\Model\BuildMeta[]
+ */
+ public function getProjectBuildMetas()
+ {
+ return Factory::getStore('BuildMeta', 'PHPCI')->getByProjectId($this->getId());
+ }
}
diff --git a/PHPCI/Store/Base/BuildMetaStoreBase.php b/PHPCI/Store/Base/BuildMetaStoreBase.php
index 4abd97a3..bc1589cc 100644
--- a/PHPCI/Store/Base/BuildMetaStoreBase.php
+++ b/PHPCI/Store/Base/BuildMetaStoreBase.php
@@ -44,6 +44,38 @@ class BuildMetaStoreBase extends Store
return null;
}
+ public function getByProjectId($value, $limit = null, $useConnection = 'read')
+ {
+ if (is_null($value)) {
+ throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.');
+ }
+
+ $add = '';
+
+ if ($limit) {
+ $add .= ' LIMIT ' . $limit;
+ }
+
+ $count = null;
+
+ $query = 'SELECT * FROM `build_meta` WHERE `project_id` = :project_id' . $add;
+ $stmt = Database::getConnection($useConnection)->prepare($query);
+ $stmt->bindValue(':project_id', $value);
+
+ if ($stmt->execute()) {
+ $res = $stmt->fetchAll(\PDO::FETCH_ASSOC);
+
+ $map = function ($item) {
+ return new BuildMeta($item);
+ };
+ $rtn = array_map($map, $res);
+
+ return array('items' => $rtn, 'count' => $count);
+ } else {
+ return array('items' => array(), 'count' => 0);
+ }
+ }
+
public function getByBuildId($value, $limit = null, $useConnection = 'read')
{
if (is_null($value)) {
diff --git a/composer.json b/composer.json
index fdb4bc28..9ccd326b 100644
--- a/composer.json
+++ b/composer.json
@@ -34,7 +34,8 @@
"symfony/console" : "~2.1",
"psr/log": "~1.0",
"monolog/monolog": "~1.6",
- "pimple/pimple": "~1.1"
+ "pimple/pimple": "~1.1",
+ "robmorgan/phinx": "*"
},
"require-dev": {
diff --git a/composer.lock b/composer.lock
index 1e6302c3..4a2b4e73 100644
--- a/composer.lock
+++ b/composer.lock
@@ -3,20 +3,20 @@
"This file locks the dependencies of your project to a known state",
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
],
- "hash": "07244b4e81274ba07fdb9f0166c73678",
+ "hash": "4fafee12f4bcc7e7dac5f997b511eabb",
"packages": [
{
"name": "block8/b8framework",
- "version": "1.1.2",
+ "version": "1.1.4",
"source": {
"type": "git",
"url": "https://github.com/Block8/b8framework.git",
- "reference": "63a18f2fdc1dc31b657ea39ef841339d89f24ce8"
+ "reference": "2ae699b8b6a28752e9eebbd43c518fdc80a9d322"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Block8/b8framework/zipball/63a18f2fdc1dc31b657ea39ef841339d89f24ce8",
- "reference": "63a18f2fdc1dc31b657ea39ef841339d89f24ce8",
+ "url": "https://api.github.com/repos/Block8/b8framework/zipball/2ae699b8b6a28752e9eebbd43c518fdc80a9d322",
+ "reference": "2ae699b8b6a28752e9eebbd43c518fdc80a9d322",
"shasum": ""
},
"require": {
@@ -50,7 +50,7 @@
"mvc",
"php"
],
- "time": "2014-04-01 15:30:13"
+ "time": "2014-05-13 09:41:11"
},
{
"name": "ircmaxell/password-compat",
@@ -245,6 +245,63 @@
],
"time": "2012-12-21 11:40:51"
},
+ {
+ "name": "robmorgan/phinx",
+ "version": "v0.3.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/robmorgan/phinx.git",
+ "reference": "5de112662b64d4d6ffa45d4dfc557c2a4c1620cd"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/robmorgan/phinx/zipball/5de112662b64d4d6ffa45d4dfc557c2a4c1620cd",
+ "reference": "5de112662b64d4d6ffa45d4dfc557c2a4c1620cd",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.2",
+ "symfony/class-loader": "2.*",
+ "symfony/config": "2.*",
+ "symfony/console": "2.*",
+ "symfony/yaml": "2.*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "3.7.*",
+ "squizlabs/php_codesniffer": "dev-phpcs-fixer"
+ },
+ "bin": [
+ "bin/phinx"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Phinx": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Rob Morgan",
+ "email": "robbym@gmail.com",
+ "homepage": "http://robmorgan.id.au",
+ "role": "Lead Developer"
+ }
+ ],
+ "description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.",
+ "homepage": "http://phinx.org",
+ "keywords": [
+ "database",
+ "database migrations",
+ "db",
+ "migrations",
+ "phinx"
+ ],
+ "time": "2014-04-27 15:25:07"
+ },
{
"name": "swiftmailer/swiftmailer",
"version": "v5.2.0",
@@ -299,6 +356,108 @@
],
"time": "2014-05-08 08:11:19"
},
+ {
+ "name": "symfony/class-loader",
+ "version": "v2.4.4",
+ "target-dir": "Symfony/Component/ClassLoader",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/ClassLoader.git",
+ "reference": "5101f3094903a95db3552a834a9c6585afc10d3b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/ClassLoader/zipball/5101f3094903a95db3552a834a9c6585afc10d3b",
+ "reference": "5101f3094903a95db3552a834a9c6585afc10d3b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "symfony/finder": "~2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Component\\ClassLoader\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com",
+ "homepage": "http://fabien.potencier.org",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony ClassLoader Component",
+ "homepage": "http://symfony.com",
+ "time": "2014-04-16 10:34:31"
+ },
+ {
+ "name": "symfony/config",
+ "version": "v2.4.4",
+ "target-dir": "Symfony/Component/Config",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/Config.git",
+ "reference": "2effc67af6f21a0d267210b72d0b0b691d113528"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/Config/zipball/2effc67af6f21a0d267210b72d0b0b691d113528",
+ "reference": "2effc67af6f21a0d267210b72d0b0b691d113528",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "symfony/filesystem": "~2.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Component\\Config\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com",
+ "homepage": "http://fabien.potencier.org",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Config Component",
+ "homepage": "http://symfony.com",
+ "time": "2014-04-22 08:11:06"
+ },
{
"name": "symfony/console",
"version": "v2.4.4",
@@ -354,6 +513,55 @@
"homepage": "http://symfony.com",
"time": "2014-04-27 13:34:57"
},
+ {
+ "name": "symfony/filesystem",
+ "version": "v2.4.4",
+ "target-dir": "Symfony/Component/Filesystem",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/Filesystem.git",
+ "reference": "a3af8294bcce4a7c1b2892363b0c9d8109affad4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/Filesystem/zipball/a3af8294bcce4a7c1b2892363b0c9d8109affad4",
+ "reference": "a3af8294bcce4a7c1b2892363b0c9d8109affad4",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.4-dev"
+ }
+ },
+ "autoload": {
+ "psr-0": {
+ "Symfony\\Component\\Filesystem\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com",
+ "homepage": "http://fabien.potencier.org",
+ "role": "Lead Developer"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "http://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony Filesystem Component",
+ "homepage": "http://symfony.com",
+ "time": "2014-04-16 10:34:31"
+ },
{
"name": "symfony/yaml",
"version": "v2.4.4",
diff --git a/phinx.php b/phinx.php
new file mode 100644
index 00000000..674dfed6
--- /dev/null
+++ b/phinx.php
@@ -0,0 +1,29 @@
+get('b8.database.servers.write');
+
+if (!is_array($writeServers)) {
+ $writeServers = array($writeServers);
+}
+
+$conf = array(
+ 'paths' => array(
+ 'migrations' => 'PHPCI/Migrations',
+ ),
+
+ 'environments' => array(
+ 'default_migration_table' => 'migration',
+ 'default_database' => 'phpci',
+ 'phpci' => array(
+ 'adapter' => 'mysql',
+ 'host' => end($writeServers),
+ 'name' => $config->get('b8.database.name'),
+ 'user' => $config->get('b8.database.username'),
+ 'pass' => $config->get('b8.database.password'),
+ ),
+ ),
+);
+
+return $conf;
\ No newline at end of file