digitalkaoz/github-contributions-bundle
Installation
composer require digitalkaoz/github-contributions-bundle
Enable the bundle in config/bundles.php:
return [
// ...
Digitalkaoz\GithubContributionsBundle\DigitalkaozGithubContributionsBundle::class => ['all' => true],
];
Configuration
Add GitHub credentials to config/packages/digitalkaoz_github_contributions.yaml:
digitalkaoz_github_contributions:
github_username: 'your_github_username'
github_token: '%env(GITHUB_TOKEN)%' # Store token in .env
First Use Case Render the contribution calendar in a Twig template:
{{ render(controller('DigitalkaozGithubContributionsBundle:Default:contributions')) }}
Or fetch data programmatically:
$contributions = $this->get('digitalkaoz_github_contributions.service')->getContributions();
Dynamic User Profiles
$service = $this->container->get('digitalkaoz_github_contributions.service');
$contributions = $service->getContributions('octocat'); // Dynamic username
Caching Contributions
# config/packages/digitalkaoz_github_contributions.yaml
digitalkaoz_github_contributions:
cache_enabled: true
cache_lifetime: 3600 # 1 hour
Twig Integration
return $this->render('profile/show.html.twig', [
'contributions' => $contributions,
'username' => 'your_github_username'
]);
{% if contribution.isActive() %}
<div class="active-day">...</div>
{% endif %}
API-Driven Apps
use Symfony\Component\HttpFoundation\JsonResponse;
public function getContributionsApi(Request $request)
{
$username = $request->query->get('username');
$data = $this->get('digitalkaoz_github_contributions.service')->getContributions($username);
return new JsonResponse($data);
}
Rate Limiting
Token Permissions
public_repo scope if fetching contributions for private repos (though contributions are public by default).Deprecated Methods
/users/:username/contributions). Migrate to the GraphQL API for future-proofing:
// Example GraphQL query (requires custom implementation)
$query = '
query {
user(login: "your_username") {
contributionsCollection {
contributionCalendar {
totalContributions
weeks {
contributionDays {
contributionCount
date
}
}
}
}
}
}
';
Twig Template Overrides
templates/Default/contributions.html.twig) by placing a custom version in templates/DigitalkaozGithubContributionsBundle/Default/contributions.html.twig.Enable Debug Mode
Set debug: true in the config to log API responses:
digitalkaoz_github_contributions:
debug: true
Validate Token Test your token at GitHub Token Testing to ensure it has the correct permissions.
Custom Data Transformers
Contribution class to add metadata (e.g., PR counts, issue comments):
namespace App\Entity;
use Digitalkaoz\GithubContributionsBundle\Entity\Contribution as BaseContribution;
class Contribution extends BaseContribution
{
public function getPrCount(): int
{
// Custom logic to fetch PR data
}
}
Event Listeners
contributions.fetch event to modify data before rendering:
// src/EventListener/ContributionListener.php
public function onContributionsFetch(GetContributionsEvent $event)
{
$contributions = $event->getContributions();
// Modify $contributions array
$event->setContributions($contributions);
}
Register the listener in services.yaml:
services:
App\EventListener\ContributionListener:
tags:
- { name: 'kernel.event_listener', event: 'contributions.fetch' }
Alternative Data Sources
Digitalkaoz\GithubContributionsBundle\Service\ContributionServiceInterface.How can I help you explore Laravel packages today?