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@ Usage: [options] command [arguments] Options: --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 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 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 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 meta meta:header pull-request 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 release:create Create a new Release release:list Lists the releases release:remove Removes a release version-eye 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 # ./do_changes_here.sh; 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!