Skip to main content

Black Friday 2025! Only until December 1st: coupon FRIDAY25 for 40% off Yearly/Lifetime membership!

Read more here

Astrotomic/opendor.me

79 stars
1 code files
View Astrotomic/opendor.me on GitHub

app/Console/Commands/GithubRepositoryContributors.php

Open in GitHub
use App\Jobs\LoadRepositoryContributors;
use App\Models\Organization;
use App\Models\Repository;
use App\Models\User;
use Carbon\CarbonInterval;
use Illuminate\Console\Command;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Bus;
 
class GithubRepositoryContributors extends Command
{
protected $signature = 'github:repository:contributors {name?}';
protected $description = 'Load all contributors for repositories.';
 
public function handle(): void
{
Repository::query()
->when(
$this->argument('name'),
fn (Builder $query, string $name) => $query->where('name', $name)
)
->with('owner')
->get()
->reject(function (Repository $repository): bool {
return $repository->owner instanceof User && $repository->owner->github_access_token === null;
})
->reject(function (Repository $repository): bool {
return $repository->owner instanceof Organization && $repository->owner->members()->whereIsRegistered()->doesntExist();
})
->groupBy('vendor_name')
->each(static function (Collection $repositories): void {
$repositories
->chunk(100)
->each(static function (Collection $repositories, int $i) {
$repositories->each(fn (Repository $repository) => Bus::batch([
(new LoadRepositoryContributors($repository))->delay(CarbonInterval::minutes($i * 5)),
])->onQueue('github')->name($repository->name)->dispatch());
});
});
}
}

We'd Love Your Feedback

Tell us what you like or what we can improve

Feel free to share anything you like or dislike about this page or the platform in general.