Gush 1.8.8 is out: Command Line Tool For Project maintainance/contributing

Gush release 1.8.8 is out!

In case you are new to Gush, Gush is a command line tool that helps you save time and improves your speed dramatically contributing to projects whether at work or Open Source and keeps you healthy.

Gush is a tool that you can install with composer or just download it as a phar. I recommend the phar and the phar is just a single streamlined file that contains all sources and that works just like the regular cloned folder. My recommendation for developers is to clone the project and symlink the bin/gush into their path. For everybody else I just recommend the phar. I do not recommend anymore the global installation because it may have dependencies that would conflict with other packages you have installed into your global composer directories.

Gush was created with a top goal in mind. To be able to rapidly contribute and maintain a package. From the standpoint of a contributor or developer at a company you want to get things streamlined as much as possible. Gush has a built-in flow and it really draws into many developer’s experience with how things work and should work in a collaborative or solo rapid environment dealing with versioned projects/packages.

Gush’s flow starts with configuration. You may configure adapters and issue trackers. Adapters are mechanisms by which you will send your contributions in terms of code changesets. Issue trackers are mechanisms by which you will be handling the book-keeping of your tickets in your project/package. You may decide to open, close, take, assign, or label tickets for instance.

Gush is well abstracted to support various hubs, that is various third party services such as Github, Github Enterprise, Jira, Bitbucket, and Gitlab for example. The abstraction is defined in an interface class so at any time anyone can come and write an adapter implementing that interface and Gush will support that new service. Gush is abstracted in both, at the adapter level and at the issue tracker level, and is well separated so you can track your issues on jira while working your pull code changeset requests in github.
Gush’s configuration let’s you do exactly that.

Gush configuration is per project and global, you can configure several adapters and specify which one will your particular project at hand should use. This is specified into a local .gush.yml file whereas the global configuration uses a folder .gush inside your user home directory.

Once configured Gush has a series of commands, self explanatory and easy to use:

~ gush                                                                                    Luiss-MacBook-Pro-3 [4:17:47]
   _____ _    _  _____ _    _
  / ____| |  | |/ ____| |  | |
 | |  __| |  | | (___ | |__| |
 | | |_ | |  | |\___ \|  __  |
 | |__| | |__| |____) | |  | |
  \_____|\____/|_____/|_|  |_|
Gush version @package_version@
  [options] command [arguments]
  --help           -h Display this help message.
  --quiet          -q Do not output any message.
  --verbose        -v|vv|vvv Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
  --version        -V Display this application version.
  --ansi              Force ANSI output.
  --no-ansi           Disable ANSI output.
  --no-interaction -n Do not ask any interactive question.
Available commands:
  help                           Displays help for a command
  list                           Lists commands
  branch:changelog               Reports what got fixed or closed since last release on current branch
  branch:delete                  Deletes remote branch with the current or given name
  branch:fork                    Forks current upstream repository
  branch:push                    Pushes and tracks the current local branch into user own fork
  branch:sync                    Syncs local branch with its upstream version
  core:alias                     Outputs help and alias snippet for wrapping gush on git
  core:autocomplete              Create file for Bash autocomplete
  core:configure                 Configure adapter credentials and the cache folder
  core:init                      Configures a local .gush.yml config file
  core:update                    Updates the application.
  issue:assign                   Assigns an issue to a user
  issue:close                    Closes an issue
  issue:create                   Creates an issue
  issue:label:assign             Labels issues/pull requests
  issue:label:list               Lists the issue's labels
  issue:list                     List issues
  issue:list:milestones          Lists the issue's milestones
  issue:show                     Shows given issue
  issue:take                     Takes an issue
  pull-request:assign            Assigns a pull-request to a user
  pull-request:close             Closes a pull request
  pull-request:create            Launches a pull request
  pull-request:fabbot-io         Run fabbot-io patches on given PR
  pull-request:fixer             Run cs-fixer and commits fixes
  pull-request:label:list        Lists the pull-request's labels
  pull-request:list              Lists all available pull requests
  pull-request:list:milestones   Lists the pull-request's milestones
  pull-request:merge             Merges the pull request given
  pull-request:pat-on-the-back   Gives a pat on the back to a PR's author
  pull-request:semver            Provides information about the semver version of a pull request
  pull-request:squash            Squashes all commits of a PR
  pull-request:switch-base       Switch the base of the PR to another one
  release:create                 Create a new Release
  release:list                   Lists the releases
  release:remove                 Removes a release
  version-eye:check              Update composer.json dependency versions from versioneye service

Every command provides help description and information about how it is to be used.

Typical flows in gush involve commands for contributors like:

git clone or composer init or composer install project ...
gush core:configure
cd project
gush core:init
ls -la
gush b:f
gush i:create
gush i:take #
./; git add .; git commit -am "some changes"
gush b:p
gush p:create --issue=#

Maintainer commands could be something like:

gush p:merge #
gush b:d
git checkout master
gush b:s
git branch -d #-branch_name_here

And the cycle repeats. The commands run under best practices and good assumptions based on how composer typically create remotes, it has a fast setup and every contribution’s command gets repetitive meaning it will leave you with less error prone manipulations with git and avoid you to have to go to the web interface to click on the buttons thereby decreasing your speed with the keyboard flow you are carrying in code.

Gush commands are very powerful and complete. If you see a use case please feel free to suggest it opening a ticket on the repositories.
The advantages of Gush against its competitors like hub or others is that you use one command line tool for many hubs, Github Enterprise, Jira, Jira Enterprise, Gitlab, Bitbucket, etc. You do not have to switch setup from work and for FOSS, all is project specific so you just cd into your project folder. Gush is being used in production in companies within the USA and Europe and Latin America successfully. It is written in a language easy to refactor and implement and with a very low barrier for hacking as PHP. It bears a great OO architecture and is improving constantly.

Gush was born to send many PRs to open source projects in matter of seconds. It will not have anything hard to install, like php. It is mainly geared towards developers at work and Open Source, and has a high regard of code quality. Our github adapter has been downloaded more than 2.4k times, it has been featured by Github as starred by staff, and it has been qualified by some top experts as a package of high impact for the community.

Gush is all about flow and that is where its name is derived ‘gush out’. Encouragements!

Leave a Reply

Your email address will not be published. Required fields are marked *