gitcomposer-phpyeomansatisskeleton-code

Bootstrapping projects with: private git repos, Composer and Satis


EDIT: What I tried to achieve here can be done by the Yeoman project.


So I set up git+composer+satis on a private server, everything works fine, I'm really enthusiastic about it. Got to love them all.

I use git for projects, and for private packages, so now a basic workflow looks like this:

git clone git@myserver:the-project-name
composer install

This will clone the project repo, and install the required dependencies. Fantastic.

But I also want to be able to use some 'skeleton-repos' and just copy the contents of them into my project keeping the dependency information.

Take this example:

This is fine, BUT it has a problem: I have different dependencies - Different composer.json files. - for the fb-bootstrap and the api-bootstrap repos, so I need to find a way to install all of them.

Note that I don't use composer for this, since I can't place anything in to the vendor/ folder other than autoloaded php classes, because the access is restricted to that folder.

Lifting that restriction won't solve the problem either, because if I add a dependency later, and I call composer update, I can lose the changes I made in the bootstrap folders.

Submodules and the only-copy-files hack above doesn't quite cut it because of the above mentioned reasons.

Summary:

I need a solution where I can include as many bootstrapping repos as I need to, and after I'm done with it, I must be able to install all the dependencies.

Like this:

Is there a way to do this?

Also: If you think I approach this problem in a totally wrong way, please feel free to tell me. I'm adapting to new techniques anyway, I'm not scared about changes. :)

Any comment is appreciated.


Solution

  • I solved the problem more or less in the meantime.

    First, I gave up on the idea of fully automatizing everything.

    There are simply too much problem with combining the different bootstrapping repos; anything could happen, really.

    One thing I wanted to still automate though, is merging the different dependencies of the bootstrap repos.

    So after theese changes, I came up with a really simple script, which usage looks like this: ( Note that gitcopy is a script I use on my linux environment, which copies only the content of a repository. )

    gitcopy git@server:bootstrap // Grabs the bootstrap.php file from a private repo.
    php bootstrap.php fb-bootstrap api-bootstrap
    

    The second command will create a new folder: 'bootstrap', and clones the repos into it. It then removes the .git folders, since I don't need version control there. It also bootstraps a base composer.json, and merges all the other composer.json files from the bootstaps in it. The bootstrap composer.json files are removed in the process, so I can just copy the bootstrap contents into my project's root folder, without prompts about overwriting other composer.json files.

    So basically, it's just a nice little tool to grab everything I need, and after that I can deal with possible problems myself.

    With this, I could use Yeoman generators, and still use my own bootstrap files, without worrying about conflicts.

    The only thing I couldn't look into, is how to make this script a phar executable, so it could work like composer. Instead grabbing the bootstrap repo for the bootstrap.php, I could just say: bootstrap api webapp etc.

    But that's for another day. :)