All Projects → ryanwinchester → subsplit-service

ryanwinchester / subsplit-service

Licence: other
automate subtree splits with webhooks and scheduled commands

Programming Languages

PHP
23972 projects - #3 most used programming language
shell
77523 projects
ApacheConf
554 projects

Flashtag Subsplit Service

version license

Webhook and Scheduler

Have you ever wanted to split some of your code from your project into components... maybe read-only github repositories like Symfony and Laravel?

Well, I certainly did. It took me a while to find a good way to do it and now I'm going to help you do the same. This subsplit project will help you to automate the process with webhooks and/or scheduled commands.

Webhooks

git push webhook that runs the subtree split command from a github, bitbucket, or gitlab webhook

Scheduled commands

A flashtag:subsplit command will run the subtree split command and publish to the subtree repositories.

Install

Install with composer:

composer create-project flashtag/subsplit-service --prefer-dist

From the project directory:

cd .git-subsplit; ./install.sh

Setup

Edit the build/flashtag-subsplit.sh file to match your repo, and this package should actually just work almost out-of-the-box for your own repos as well.

git subsplit init [email protected]:flashtag/flashtag.git
git subsplit publish --heads="master" app/Admin:[email protected]:flashtag/admin.git
git subsplit publish --heads="master" app/Api:[email protected]:flashtag/api.git
git subsplit publish --heads="master" app/Client:[email protected]:flashtag/client.git
git subsplit publish --heads="master" app/Cms:[email protected]:flashtag/cms.git
git subsplit publish --heads="master" app/Data:[email protected]:flashtag/data.git
rm -rf .subsplit/

Would change to look like:

git subsplit init [email protected]:Foobar/Parent.git
git subsplit publish --heads="master" src/One:[email protected]:Foobar/one.git
git subsplit publish --heads="master" src/Two:[email protected]:Foobar/two.git
git subsplit publish --heads="master" src/Three:[email protected]:Foobar/three.git
# . . .
# etc.
# . . .
rm -rf .subsplit/

For webhooks:

Copy the example environment file cp .env.example .env and change the appropriate properties.

Uncomment the line corresponding to the service you are using to send the webhook in app/Http/routes/php and comment out any you aren't using.

Currently, the gitlab route is commented out by default because I don't know of any way to validate the request.

// Github
$app->post('github', [
    'middleware' => 'github',
    'uses' => 'App\Http\Controllers\WebhooksController@push',
]);

// Bitbucket
$app->post('bitbucket', [
    'middleware' => 'bitbucket',
    'uses' => 'App\Http\Controllers\WebhooksController@push',
]);

// // Gitlab
// $app->post('gitlab', [
//     'middleware' => 'gitlab',
//     'uses' => 'App\Http\Controllers\WebhooksController@push',
// ]);
GITHUB

The WEBHOOK_SECRET is what you will also set the secret property to in the github webhook setup:

Github add webhook

Your github push webhook payload url path is /webhooks/github so an example webhook url would look something like https://subsplit.whateveryourdomain.com/webhooks/github

BITBUCKET

Your bitbucket push webhook url path is /webhooks/bitbucket so an example webhook url would look something like https://subsplit.whateveryourdomain.com/webhooks/bitbucket

GITLAB

Your gitlab push webhook url path is /webhooks/gitlab so an example webhook url would look something like https://subsplit.whateveryourdomain.com/webhooks/gitlab

For the scheduled command:

You can either use the scheduler as lumen intended in the app/Console/Kernel, by setting up this cron job:

* * * * * php /path/to/project/artisan schedule:run

or schedule the command yourself. For my own project, I've set up this cron job to just execute this every night:

0 0 * * * php /path/to/project/artisan flashtag:subsplit

Powered by

Sometimes re-inventing the wheel is a good idea and sometimes you have great packages like:

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].