Skip to content
master
Switch branches/tags
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
app
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

readme.md

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 git@github.com:flashtag/flashtag.git
git subsplit publish --heads="master" app/Admin:git@github.com:flashtag/admin.git
git subsplit publish --heads="master" app/Api:git@github.com:flashtag/api.git
git subsplit publish --heads="master" app/Client:git@github.com:flashtag/client.git
git subsplit publish --heads="master" app/Cms:git@github.com:flashtag/cms.git
git subsplit publish --heads="master" app/Data:git@github.com:flashtag/data.git
rm -rf .subsplit/

Would change to look like:

git subsplit init git@github.com:Foobar/Parent.git
git subsplit publish --heads="master" src/One:git@github.com:Foobar/one.git
git subsplit publish --heads="master" src/Two:git@github.com:Foobar/two.git
git subsplit publish --heads="master" src/Three:git@github.com: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:

About

automate subtree splits with webhooks and scheduled commands

Resources

Packages

No packages published