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:
- I create a git repo called: test-project, then I clone it locally.
- I have another git repo, called fb-bootstrap, which is a skeleton for the facebook apps.
- I also have another bootstrap skeleton git repo, which I also want to include: this will be an api/ folder for example. Let's call it: api-bootstrap
- So I want to clone them as well, but of course I can't do that, because I already have a git repo in the same directory.
- A possible solution: I use the following code, so I only get the files: 'git archive --format=tar --remote=git@myserver:the-bootstrap-repos HEAD | tar xf -'
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:
- git init a project repo,
- git clone the project repo locally,
- fetch a couple of bootstrap repos's content I need,
- install the dependencies I declare for the project, and all the bootstrap repos's dependencies.
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.
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. )
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. :)