updated plugin `Gitium` version 1.0.5

This commit is contained in:
KawaiiPunk 2023-06-28 12:45:49 +00:00 committed by Gitium
parent f710fa7de2
commit 7d5eef77cf
5 changed files with 367 additions and 340 deletions

View File

@ -215,7 +215,7 @@ function gitium_commit_and_push_gitignore_file( $path = '' ) {
if ( ! function_exists( 'gitium_acquire_merge_lock' ) ) : if ( ! function_exists( 'gitium_acquire_merge_lock' ) ) :
function gitium_acquire_merge_lock() { function gitium_acquire_merge_lock() {
$gitium_lock_path = apply_filters( 'gitium_lock_path', '/tmp/.gitium-lock' ); $gitium_lock_path = apply_filters( 'gitium_lock_path', sys_get_temp_dir().'/.gitium-lock' );
$gitium_lock_handle = fopen( $gitium_lock_path, 'w+' ); $gitium_lock_handle = fopen( $gitium_lock_path, 'w+' );
$lock_timeout = intval( ini_get( 'max_execution_time' ) ) > 10 ? intval( ini_get( 'max_execution_time' ) ) - 5 : 10; $lock_timeout = intval( ini_get( 'max_execution_time' ) ) > 10 ? intval( ini_get( 'max_execution_time' ) ) - 5 : 10;

View File

@ -1,7 +1,7 @@
<?php <?php
/** /**
* Plugin Name: Gitium * Plugin Name: Gitium
* Version: 1.0.3 * Version: 1.0.5
* Author: Presslabs * Author: Presslabs
* Author URI: https://www.presslabs.com * Author URI: https://www.presslabs.com
* License: GPL2 * License: GPL2

View File

@ -155,11 +155,13 @@ class Git_Wrapper {
protected function _call(...$args) { protected function _call(...$args) {
$args = join( ' ', array_map( 'escapeshellarg', $args ) ); $args = join( ' ', array_map( 'escapeshellarg', $args ) );
$cmd = "git $args 2>&1";
$return = -1; $return = -1;
$response = array(); $response = array();
$env = $this->get_env(); $env = $this->get_env();
$git_bin_path = apply_filters( 'gitium_git_bin_path', '' );
$cmd = "${git_bin_path}git $args 2>&1";
$proc = proc_open( $proc = proc_open(
$cmd, $cmd,
array( array(
@ -430,7 +432,7 @@ class Git_Wrapper {
function get_remote_branches() { function get_remote_branches() {
list( , $response ) = $this->_call( 'branch', '-r' ); list( , $response ) = $this->_call( 'branch', '-r' );
$response = array_map( 'trim', $response ); $response = array_map( 'trim', $response );
$response = array_map( create_function( '$b', 'return str_replace("origin/","",$b);' ), $response ); $response = array_map( function( $b ) { return str_replace( "origin/", "", $b ); }, $response );
return $response; return $response;
} }

View File

@ -1,97 +1,97 @@
<?php <?php
/* Copyright 2014-2016 Presslabs SRL <ping@presslabs.com> /* Copyright 2014-2016 Presslabs SRL <ping@presslabs.com>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 2, as it under the terms of the GNU General Public License, version 2, as
published by the Free Software Foundation. published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/ */
class Gitium_Menu { class Gitium_Menu {
public $gitium_menu_slug = 'gitium/gitium.php'; public $gitium_menu_slug = 'gitium/gitium.php';
public $commits_menu_slug = 'gitium/gitium-commits.php'; public $commits_menu_slug = 'gitium/gitium-commits.php';
public $settings_menu_slug = 'gitium/gitium-settings.php'; public $settings_menu_slug = 'gitium/gitium-settings.php';
public $git = null; public $git = null;
public $menu_slug; public $menu_slug;
public $submenu_slug; public $submenu_slug;
public function __construct( $menu_slug, $submenu_slug ) { public function __construct( $menu_slug, $submenu_slug ) {
global $git; global $git;
$this->git = $git; $this->git = $git;
$this->menu_slug = $menu_slug; $this->menu_slug = $menu_slug;
$this->submenu_slug = $submenu_slug; $this->submenu_slug = $submenu_slug;
} }
public function redirect( $message = '', $success = false, $menu_slug = '' ) { public function redirect( $message = '', $success = false, $menu_slug = '' ) {
$message_id = substr( $message_id = substr(
md5( str_shuffle( 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' ) . time() ), 0, 8 md5( str_shuffle( 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' ) . time() ), 0, 8
); );
if ( $message ) { if ( $message ) {
set_transient( 'message_' . $message_id, $message, 900 ); set_transient( 'message_' . $message_id, $message, 900 );
} }
if ( '' === $menu_slug ) { $menu_slug = $this->menu_slug; } if ( '' === $menu_slug ) { $menu_slug = $this->menu_slug; }
$url = network_admin_url( 'admin.php?page=' . $menu_slug ); $url = network_admin_url( 'admin.php?page=' . $menu_slug );
$url = esc_url_raw( add_query_arg( $url = esc_url_raw( add_query_arg(
array( array(
'message' => $message_id, 'message' => $message_id,
'success' => $success, 'success' => $success,
), ),
$url $url
) ); ) );
wp_safe_redirect( $url ); wp_safe_redirect( $url );
exit; exit;
} }
public function success_redirect( $message = '', $menu_slug = '' ) { public function success_redirect( $message = '', $menu_slug = '' ) {
$this->redirect( $message, true, $menu_slug ); $this->redirect( $message, true, $menu_slug );
} }
public function disconnect_repository() { public function disconnect_repository() {
$gitium_disconnect_repo = filter_input(INPUT_POST, 'GitiumSubmitDisconnectRepository', FILTER_SANITIZE_STRING); $gitium_disconnect_repo = filter_input(INPUT_POST, 'GitiumSubmitDisconnectRepository', FILTER_SANITIZE_STRING);
if ( ! isset( $gitium_disconnect_repo ) ) { if ( ! isset( $gitium_disconnect_repo ) ) {
return; return;
} }
check_admin_referer( 'gitium-admin' ); check_admin_referer( 'gitium-admin' );
gitium_uninstall_hook(); gitium_uninstall_hook();
if ( ! $this->git->remove_remote() ) { if ( ! $this->git->remove_remote() ) {
$this->redirect( __('Could not remove remote.', 'gitium') ); $this->redirect( __('Could not remove remote.', 'gitium') );
} }
$this->success_redirect( __('You are now disconnected from the repository. New key pair generated.', 'gitium') ); $this->success_redirect( __('You are now disconnected from the repository. New key pair generated.', 'gitium') );
} }
public function show_message() { public function show_message() {
$get_message = filter_input(INPUT_GET, 'message', FILTER_SANITIZE_STRING); $get_message = filter_input(INPUT_GET, 'message', FILTER_SANITIZE_STRING);
$get_success = filter_input(INPUT_GET, 'success', FILTER_SANITIZE_STRING); $get_success = filter_input(INPUT_GET, 'success', FILTER_SANITIZE_STRING);
if ( isset( $get_message ) && $get_message ) { if ( isset( $get_message ) && $get_message ) {
$type = ( isset( $get_success ) && $get_success == 1 ) ? 'updated' : 'error'; $type = ( isset( $get_success ) && $get_success == 1 ) ? 'updated' : 'error';
$message = get_transient( 'message_'. $get_message ); $message = get_transient( 'message_'. $get_message );
if ( $message ) : ?> if ( $message ) : ?>
<div class="<?php echo esc_attr( $type ); ?>"><p><?php echo esc_html( $message ); ?></p></div> <div class="<?php echo esc_attr( $type ); ?>"><p><?php echo esc_html( $message ); ?></p></div>
<?php endif; <?php endif;
} }
} }
protected function show_disconnect_repository_button() { protected function show_disconnect_repository_button() {
?> ?>
<form name="gitium_form_disconnect" id="gitium_form_disconnect" action="" method="POST"> <form name="gitium_form_disconnect" id="gitium_form_disconnect" action="" method="POST">
<?php <?php
wp_nonce_field( 'gitium-admin' ); wp_nonce_field( 'gitium-admin' );
?> ?>
<input type="submit" name="GitiumSubmitDisconnectRepository" value='<?php _e( 'Disconnect from repo', 'gitium' ); ?>' class="button secondary" onclick="return confirm('<?php _e( 'Are you sure you want to disconnect from the remote repository?', 'gitium' ); ?>')"/>&nbsp; <input type="submit" name="GitiumSubmitDisconnectRepository" value='<?php _e( 'Disconnect from repo', 'gitium' ); ?>' class="button secondary" onclick="return confirm('<?php _e( 'Are you sure you want to disconnect from the remote repository?', 'gitium' ); ?>')"/>&nbsp;
</form> </form>
<?php <?php
} }
} }

View File

@ -1,239 +1,264 @@
=== Gitium === === Gitium ===
Contributors: PressLabs Contributors: PressLabs
Donate link: https://www.presslabs.com/gitium/ Donate link: https://www.presslabs.com/gitium/
Tags: git, version, versioning, deployment, version-control, github, bitbucket, travis, code, revision, testing, development, branch, production, staging, debug, plugin, gitium, presslabs, simple Tags: git, version, versioning, deployment, version-control, github, bitbucket, travis, code, revision, testing, development, branch, production, staging, debug, plugin, gitium, presslabs, simple
Requires at least: 3.9 Requires at least: 4.7
Tested up to: 5.2.2 Tested up to: 6.2.2
Requires PHP: 5.6 Requires PHP: 5.6
License: GPLv2 License: GPLv2
Stable tag: 1.0.3 Stable tag: 1.0.5
License URI: http://www.gnu.org/licenses/gpl-2.0.html License URI: http://www.gnu.org/licenses/gpl-2.0.html
Automatic git version control and deployment for your plugins and themes integrated into wp-admin. Automatic git version control and deployment for your plugins and themes integrated into wp-admin.
== About the makers ==
== Description == This plugin was developed by the crafty people at Presslabs—the Smart Managed WordPress Hosting Platform. Here we bring high-performance hosting and business intelligence for WordPress sites. In our spare time, we contribute to the global open-source community with our code.
Gitium enables continuous deployment for WordPress, integrating with tools such as Github, Bitbucket or Travis-CI. Theme or plugin updates, installs and removals are all automatically versioned. Ninja code edits from the WordPress editor are also tracked by the version control system. Weve built Gitium back in 2013 to provide our clients a more simple and error-free method to integrate a new git version control into their code management flow.
Gitium is designed with sane development environments in mind, allowing staging and production to follow different branches of the same repository. You can also deploy code by simply using `git push`. == What is Gitium? ==
Gitium requires `git` command line tool with a minimum version of 1.7 installed on the server and the `proc_open` PHP function enabled. This plugin enables continuous deployment for WordPress, integrating with tools such as Github, Bitbucket or Travis-CI. Theme or plugin updates, installs and removals are all automatically versioned. Ninja code edits from the WordPress editor are also tracked by the version control system.
You can find more documentation on [Presslabs](https://www.presslabs.com/help/gitium/general). == Why is Gitium? ==
Gitium is designed with responsible development environments in mind, allowing staging and production to follow different branches of the same repository. You can also deploy code by simply using git push.
== Screenshots ==
Gitium requires git command line tool with a minimum version of 1.7 installed on the server and the proc_open PHP function enabled.
1. Setup step 1: Get SSH Key
2. Setup step 2: Set SSH Key (Github) == Gitium features: ==
3. Setup step 3: Add remote repository -preserves the WordPress behavior
4. Setup step 4: Choose following branch -accountability for code changes
5. Commit local changes -safe code storage—gets all code edits in Git
== Development ==
== Installation == For more details about Gitium, head here: http://docs.presslabs.com/gitium/usage/
= Manual Installation = == Receiving is nicer when giving ==
1. Upload `gitium.zip` to the `/wp-content/plugins/` directory; Weve built this to make our lives easier and were happy to do that for other developers, too. Wed really appreciate it if you could contribute with code, tests, documentation or just share your experience with Gitium.
2. Extract the `gitium.zip` archive into the `/wp-content/plugins/` directory;
3. Activate the plugin through the 'Plugins' menu in WordPress. Development of Gitium happens at http://github.com/PressLabs/gitium
Issues are tracked at http://github.com/PressLabs/gitium/issues
Alternatively, go into your WordPress dashboard and click on Plugins -> Add Plugin and search for `Gitium`. Then, click on Install and, after that, on Activate Now. This WordPress plugin can be found at https://wordpress.org/plugins/gitium/
== Screenshots ==
= Usage =
1. Setup step 1: Get SSH Key
Activate the plugin and follow the on-screen instructions under the `Gitium` menu. 2. Setup step 2: Set SSH Key (Github)
3. Setup step 3: Add remote repository
_IMPORTANT_: Gitium does its best not to version your WordPress core, neither your `/wp-content/uploads` folder. 4. Setup step 4: Choose following branch
5. Commit local changes
== Frequently Asked Questions ==
= Could not connect to remote repository? = == Installation ==
If you encounter this kind of error you can try to fix it by setting the proper username of the .git directory. = Manual Installation =
1. Upload `gitium.zip` to the `/wp-content/plugins/` directory;
Example: chown -R www-data:www-data .git 2. Extract the `gitium.zip` archive into the `/wp-content/plugins/` directory;
3. Activate the plugin through the 'Plugins' menu in WordPress.
= Is this plugin considered stable? =
Alternatively, go into your WordPress dashboard and click on Plugins -> Add Plugin and search for `Gitium`. Then, click on Install and, after that, on Activate Now.
Yes, we consider the plugin stable after extensive usage in production environments at Presslabs, with hundreds of users and powering sites with hundreds of millions of pageviews per month.
= What will happen in case of conflicts? = = Usage =
The behavior in case of conflicts is to overwrite the changes on the `origin` repository with the local changes (ie. local modifications take precedence over remote ones). Activate the plugin and follow the on-screen instructions under the `Gitium` menu.
= How to deploy automatically after a push? = _IMPORTANT_: Gitium does its best not to version your WordPress core, neither your `/wp-content/uploads` folder.
You can ping the webhook url after a push to automatically deploy the new code. The webhook url can be found under `Gitium` menu, `Settings` section. This url also plays well with Github or Bitbucket webhooks. == Frequently Asked Questions ==
= Does it works on multi site setups? = = Could not connect to remote repository? =
Gitium does not support multisite setups at the moment. If you encounter this kind of error you can try to fix it by setting the proper username of the .git directory.
= How does gitium handle submodules? = Example: chown -R www-data:www-data .git
Submodules are currently not supported. = Is this plugin considered stable? =
== Upgrade Notice == Yes, we consider the plugin stable after extensive usage in production environments at Presslabs, with hundreds of users and powering sites with hundreds of millions of pageviews per month.
= 1.0.3 =
Fixed wrong redirection for multisite installations during initial setup = What will happen in case of conflicts? =
== Changelog == The behavior in case of conflicts is to overwrite the changes on the `origin` repository with the local changes (ie. local modifications take precedence over remote ones).
= 1.0.3 =
* Fixed wrong redirection for multisite installations during initial setup = How to deploy automatically after a push? =
= 1.0.2 = You can ping the webhook url after a push to automatically deploy the new code. The webhook url can be found under `Gitium` menu, `Settings` section. This url also plays well with Github or Bitbucket webhooks.
* Full PHP 7+ compatibility
* Hotfix - Fixed the blank pages being displayed instead of success of failure messages; = Does it works on multi site setups? =
* Hotfix - Fixed the push process when other remote branches had changes;
* Hotfix - Fixed the missing ssh / key handling with fatal errors during activation; Gitium does not support multisite setups at the moment.
* Added - More success messages in certain cases.
= How does gitium handle submodules? =
= 1.0.1 =
* Hotfix - Fix race condition on Code Editor Save Submodules are currently not supported.
= 1.0 = == Upgrade Notice ==
* Fixed WP 4.9 Compatibility = 1.0.5 =
Fixed wrong redirection for multisite installations during initial setup
= 1.0-rc12 =
* Bumped plugin version == Changelog ==
= 1.0-rc11 = = 1.0.5 =
* Hotfixed an error that prevented gitium to error_log properly. * Various bug fixes
= 1.0-rc10 = = 1.0.4 =
* Bumped wordpress tested version * PHP 8 compat. fixes
= 1.0-rc9 = = 1.0.3 =
* PHP7 compat and wp-cli * Fixed wrong redirection for multisite installations during initial setup
= 1.0-rc8 = = 1.0.2 =
* Fix some indents * Full PHP 7+ compatibility
* Add some more tests * Hotfix - Fixed the blank pages being displayed instead of success of failure messages;
* Fix the submenu configure logic * Hotfix - Fixed the push process when other remote branches had changes;
* Hotfix - Fixed the missing ssh / key handling with fatal errors during activation;
= 1.0-rc7 = * Added - More success messages in certain cases.
* Test remote url from git wrapper
* Remove the phpmd package from test environment = 1.0.1 =
* Set WP_DEBUG to false on tests * Hotfix - Fix race condition on Code Editor Save
* Refactoring
* Abort the cherry-pick - changes are already there = 1.0 =
* Fix the race condition * Fixed WP 4.9 Compatibility
* Add acquire and release logs for gitium lock
* Add explanations to merge with accept mine logic = 1.0-rc12 =
* Bumped plugin version
= 1.0-rc6 =
* Delete all transients and options on uninstall hook = 1.0-rc11 =
* Add transients to is_versions and get_remote_tracking_branch functions * Hotfixed an error that prevented gitium to error_log properly.
* Update the composer
* Check requirements before show the admin menu = 1.0-rc10 =
* Put the logs off by default(on test env) * Bumped wordpress tested version
* Fix redirect issue and display errors
* Create wordpress docker env command = 1.0-rc9 =
* PHP Warning: unlink #114 * PHP7 compat and wp-cli
= 1.0-rc5 = = 1.0-rc8 =
* Fix delete plugin/theme bug on 4.6 * Fix some indents
* Update the readme file * Add some more tests
* Fix the submenu configure logic
= 1.0-rc4 =
* Fix merge with accept mine behind commits bug = 1.0-rc7 =
* Test remote url from git wrapper
= 1.0-rc3 = * Remove the phpmd package from test environment
* Add support for multisite * Set WP_DEBUG to false on tests
* Fix PHP error on merge & push * Refactoring
* Abort the cherry-pick - changes are already there
= 1.0-rc2 = * Fix the race condition
* Change the default lockfile location * Add acquire and release logs for gitium lock
* Fix a PHP Warning * Add explanations to merge with accept mine logic
= 1.0-rc1 = = 1.0-rc6 =
* Update the logic of merge and push * Delete all transients and options on uninstall hook
* Add lock mechanism for fetch and merge * Add transients to is_versions and get_remote_tracking_branch functions
* Fix repo stuck on merge_local branch * Update the composer
* Tested up to 4.5.3 * Check requirements before show the admin menu
* Put the logs off by default(on test env)
= 0.5.8-beta = * Fix redirect issue and display errors
* Add documentation for 'Could not connect to remote repository?' * Create wordpress docker env command
* Fix the update theme from Dashboard commit message & the install plugin commit message * PHP Warning: unlink #114
* Fix install/delete plugin/theme commit message
* Add a test and rewrite the tests = 1.0-rc5 =
* Tested up to 4.5.2 * Fix delete plugin/theme bug on 4.6
* Update the readme file
= 0.5.7-beta =
* Fix bug deleting plugins/themes causes wrong commit message = 1.0-rc4 =
* Fix bug wrong commit message * Fix merge with accept mine behind commits bug
* Fix bug updated function to stop maintenance mode hang
* Fix bug undefined variable 'new_versions' = 1.0-rc3 =
* Add 'Merge changes' button for gitium webhook * Add support for multisite
* Add gitium documentation for docker * Fix PHP error on merge & push
* Add more tests
= 1.0-rc2 =
= 0.5.6-beta = * Change the default lockfile location
* Fix compatibility issues with wp-cli * Fix a PHP Warning
= 0.5.5-beta = = 1.0-rc1 =
* Fix bug plugin deletion from plugins page did not trigger commit * Update the logic of merge and push
* Add lock mechanism for fetch and merge
= 0.5.4-beta = * Fix repo stuck on merge_local branch
* Fix bug missing changes on similarly named plugins * Tested up to 4.5.3
* Add requirements notices
* Add requirements help section = 0.5.8-beta =
* Add documentation for 'Could not connect to remote repository?'
= 0.5.3-beta = * Fix the update theme from Dashboard commit message & the install plugin commit message
* Fix paths with spaces bug * Fix install/delete plugin/theme commit message
* Add a Disconnect from repo button * Add a test and rewrite the tests
* Fix POST var `path` conflicts * Tested up to 4.5.2
* Fix travis tests
= 0.5.7-beta =
= 0.5.2-beta = * Fix bug deleting plugins/themes causes wrong commit message
* Add Contextual Help to Configuration page * Fix bug wrong commit message
* Make the icon path relative * Fix bug updated function to stop maintenance mode hang
* The key file is deleted properly * Fix bug undefined variable 'new_versions'
* Update serbian translation * Add 'Merge changes' button for gitium webhook
* Make the resource type more specific * Add gitium documentation for docker
* Fix Menu Bubble * Add more tests
* Remove useless param for get_transient
* Add Spanish Translation = 0.5.6-beta =
* Rename `gitium_version` transient * Fix compatibility issues with wp-cli
* Fix git version notice
* Delete .vimrc = 0.5.5-beta =
* Update .gitignore * Fix bug plugin deletion from plugins page did not trigger commit
* Fix syntax error
* Add better git version check = 0.5.4-beta =
* Fix add_query_arg vulnerability * Fix bug missing changes on similarly named plugins
* Add requirements notices
= 0.5.1-beta = * Add requirements help section
* Update Serbian Translation (by [Ogi Djuraskovic](http://firstsiteguide.com/))
* Fix Menu Bubble = 0.5.3-beta =
* Fix paths with spaces bug
= 0.5-beta = * Add a Disconnect from repo button
* Add `Last 20 Commits` menu page * Fix POST var `path` conflicts
* Add WordPress Contextual Help menu * Fix travis tests
* Add `Settings` menu page
* Move `Webhook URL` and `Public Key` fields to `Settings` page = 0.5.2-beta =
* Add menu icon * Add Contextual Help to Configuration page
* The `.gitignore` file can be edited * Make the icon path relative
* Fix commit message on theme/plugin update event * The key file is deleted properly
* Refactoring * Update serbian translation
* Make the resource type more specific
= 0.4-beta = * Fix Menu Bubble
* Add `Bitbucket` documentation link * Remove useless param for get_transient
* Add the action `gitium_before_merge_with_accept_mine` * Add Spanish Translation
* Moved to `travis-ci.org` * Rename `gitium_version` transient
* Add new tests * Fix git version notice
* Added code climate coverage reporting * Delete .vimrc
* Refactoring * Update .gitignore
* Fix syntax error
= 0.3.2-alpha = * Add better git version check
* Fix plugin activation issues * Fix add_query_arg vulnerability
= 0.3.1-alpha = = 0.5.1-beta =
* Fix issues with ssh repositories * Update Serbian Translation (by [Ogi Djuraskovic](http://firstsiteguide.com/))
* Fix maintemance mode when webhook fails * Fix Menu Bubble
= 0.3-alpha = = 0.5-beta =
* First alpha release * Add `Last 20 Commits` menu page
* Add WordPress Contextual Help menu
* Add `Settings` menu page
* Move `Webhook URL` and `Public Key` fields to `Settings` page
* Add menu icon
* The `.gitignore` file can be edited
* Fix commit message on theme/plugin update event
* Refactoring
= 0.4-beta =
* Add `Bitbucket` documentation link
* Add the action `gitium_before_merge_with_accept_mine`
* Moved to `travis-ci.org`
* Add new tests
* Added code climate coverage reporting
* Refactoring
= 0.3.2-alpha =
* Fix plugin activation issues
= 0.3.1-alpha =
* Fix issues with ssh repositories
* Fix maintemance mode when webhook fails
= 0.3-alpha =
* First alpha release