git-data-repo
PHP library to manage the storage of key-value pairs in a git repository., (*1)
Packagist:
, (*2)
Travis CI:
, (*3)
Code Climate:
, (*4)
DEPRECATED
I notice often that the chown in composer.json post-install is a problem when I use the code from web with www-data user or from shell in docker with root user. This brings up the need for a separate server that is running with its own "stable" filesystem and file permissions. These would at least be independent of developments in the git-data-repo library, as well as composer install or composer update or whatever., (*5)
This SO answer proposes Orion Git API, which unfortunately is not open-source. Another answer on the same SO question noted that korya/node-git-rest-api was incomplete, but it met all my requirements for the server-side:
* can clone private repositories by accepting credentials
* can fetch the contents of a particular file
* can stage a new file, commit it, and push the commit
* can stage modifications to an existing file, commit, and push
* should be dockerifiable (what isnt), (*6)
About the class TempFolder, I found that it is replaceable by https://github.com/php-cache/filesystem-adapter, (*7)
About the class GitDataRepo, it is replaced by the following server-client architecture
* server: https://github.com/shadiakiki1986/docker-node-git-rest-api
* client: https://github.com/shadiakiki1986/git-rest-api-client-php
* flysystem-git adapter: https://github.com/shadiakiki1986/flysystem-git, (*8)
Check the flysystem-git adapter repo for usage, (*9)
Installing
composer install, (*10)
Usage
Check tests/GitDataRepoTest.php, (*11)
Testing Using SSH keys
- Create a repository on github/bitbucket/etc.
- initialize it
mkdir /path/to/your/project
cd /path/to/your/project
git init
git remote add origin https://shadiakiki1986@bitbucket.org/shadiakiki1986/ffa-bdlreports-maps.git
- make first commit
echo "shadiakiki1986" >> contributors.txt
git add contributors.txt
git commit -m 'Initial commit with contributors'
git push -u origin master
2. Generate ssh keys: `ssh-keygen -t rsa -b 4096 -C "shadiakiki1986@gmail.com"`
6. Copy public key to deploy keys setting of repository on github
5. Configure ssh keys
```bash
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub
- Run tests
export GITDATAREPO_REMOTE=git@github.com:shadiakiki1986/git-data-repo-testDataRepo
composer run-script test
Testing Using github credentials
- Create a repository on github
- Run tests
export GITDATAREPO_REMOTE=https://shadiakiki1986:veggiepizza@github.com/shadiakiki1986/git-data-repo-testDataRepo
composer run-script test
Note on bitbucket
For bitbucket repos, one needs, (*12)
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
# Omit --global to set the identity only in this repository
Developer notes
travis with ssh keys
- Follow section above on
testing using ssh keys
- Encrypt
~/.ssh/id_rsa and ~/.ssh/id_rsa.pub using travis CLI
- Note the need to tar the public and private keys because
travis encrypt-file cannot encrypt more than one file
travis login # enter github credentials
tar cvf ssh_keys.tar -C ~/.ssh id_rsa id_rsa.pub
travis encrypt-file ssh_keys.tar --add
git add ssh_keys.tar.enc
References
* https://docs.travis-ci.com/user/encrypting-files/
* https://grosser.it/2014/03/01/allowing-travis-to-git-clone-by-adding-a-public-ssh-key/
* https://gist.github.com/lukewpatterson/4242707
* https://docs.travis-ci.com/user/private-dependencies/, (*13)
phpmd
phpmd issued warnings about static access to classes.
I disabled these warnings for the functions in subject.
To see them, check grep SuppressWarnings * -r --exclude-dir=vendor, (*14)
phpcs
If phpcs reports errors that can be fixed automatically, run vendor/bin/phpcbf src/ and then commit the changes, (*15)
badges
Badges from badge poser, (*16)