A lightweight PHP client providing a consistent access to hosted and self-hosted git repositories (github, gitlab, gogs and gitea).
Note that a small set of features is prefered here to a rich API integration to allow homogenous access to remote hosting services.
The original development has been realized in mborne/satis-gitlab repository to generate a config file referencing git repositories.
This module is also used by mborne/git-manager to backup and analyse git repositories (for example that following files are present : README.md, LICENSE,...)
- List repositories from multiple GIT hosting services filtering by
- usernames
- organizations/groups
- Get raw files from repositories
- Apply custom filter
- Project contains a given file (
RequiredFileFilter
) - Project is a composer project (
ComposerProjectFilter
) - Project name doesn't match a given regexp (
IgnoreRegexpFilter
)
- Project contains a given file (
Type | Description |
---|---|
gitlab-v4 | gitlab.com and self hosted gitlab instances |
github | github.com |
gogs-v1 | Gogs or Gitea |
// configure client
$clientOptions = new ClientOptions();
$clientOptions
->setUrl('https://github.com')
->setToken($token)
;
// create client
$client = ClientFactory::createClient(
$clientOptions,
new NullLogger()
);
$options = new FindOptions();
// Use '_me_' on github to include private repositories
$options->setUsers(array('mborne'));
$options->setOrganizations(array('symfony','FriendsOfSymfony'));
$projects = $client->find($options);
$options = new FindOptions();
$options->setUsers(array('mborne'));
$filter = new ComposerProjectFilter($client);
$filter->setType('library');
$options->setFilter($filter);
$projects = $client->find($options);
$options = new FindOptions();
$options->setUsers(array('mborne'));
$filterCollection = new FilterCollection();
// filter according to composer.json
$composerFilter = new ComposerProjectFilter($client);
$composerFilter->setType('library');
$filterCollection->addFilter($composerFilter);
// filter according to README.md
$filterCollection->addFilter(new RequiredFileFilter(
$client,
'README.md'
));
$options->setFilter($filterCollection);
$projects = $client->find($options);
- Configure access token for github.com and gitlab.com APIs (optional) :
# see https://github.com/settings/tokens
export GITHUB_TOKEN=AnyGithubToken
# see https://gitlab.com/-/profile/personal_access_tokens
export GITLAB_TOKEN=AnyGitlabToken
- Install dependencies and run tests :
make test
# Alternative :
# composer install
# vendor/bin/phpunit -c phpunit.xml.dist
Note that an HTML coverage report is generated to output/coverage/index.html