Вход Регистрация
Файл: app/Services/GithubService.php
Строк: 67
<?php

namespace AppServices;

use 
IlluminateSupportFacadesCache;
use 
IlluminateSupportFacadesHttp;
use 
RuntimeException;
use 
Throwable;

class 
GithubService
{
    protected 
string $baseUrl 'https://api.github.com/repos/visavi/rotor/';
    protected 
int $defaultCacheTtl 3600;

    
/**
     * Получает последние коммиты
     */
    
public function getLatestCommits(): array
    {
        return 
Cache::remember('commits'$this->defaultCacheTtl, function () {
            return 
$this->fetchGitHubData(
                
endpoint'commits',
                
params: ['per_page' => 100]
            );
        });
    }

    
/**
     * Get last release
     */
    
public function getLatestRelease(): array
    {
        return 
$this->getLatestReleases()[0] ?? [];
    }

    
/**
     * Get last version
     */
    
public function getLatestVersion(): string
    
{
        
$release $this->getLatestRelease();

        return 
$release['tag_name'] ?? '';
    }

    
/**
     * Get last version
     */
    
public function getLatestVersionClean(): string
    
{
        
$version $this->getLatestVersion();
        
$clean ltrim($version'v');

        return 
str_replace(['-alpha''-beta''-rc'], ''$clean);
    }

    
/**
     * Получает последние релизы
     */
    
public function getLatestReleases(): array
    {
        return 
Cache::remember('releases'$this->defaultCacheTtl, function () {
            return 
$this->fetchGitHubData(
                
endpoint'releases',
                
params: ['per_page' => 10]
            );
        });
    }

    
/**
     * Обращается к GitHub API
     */
    
protected function fetchGitHubData(string $endpoint, array $params = []): array
    {
        
$headers = [
            
'Accept' => 'application/vnd.github+json',
        ];

        try {
            
$response Http::withHeaders($headers)
                ->
timeout(3)
                ->
retry(3100)
                ->
get($this->baseUrl $endpoint$params);

            if (
$response->failed()) {
                throw new 
RuntimeException(
                    
'GitHub API error: ' $response->body(),
                    
$response->status()
                );
            }

            return 
$response->json() ?? [];
        } catch (
Throwable) {
            return [];
        }
    }
}
Онлайн: 1
Реклама