Adding initial github packages support

This commit is contained in:
Pavel Shevaev 2022-08-29 15:00:22 +03:00
parent 20ad03f44e
commit 7d140f2e6e
1 changed files with 62 additions and 10 deletions

View File

@ -143,6 +143,32 @@ function gitea_get_commit($auth_token, $gitea_url, $repo, $sha)
return $res; return $res;
} }
function github_get_tags($github_repo)
{
$api_url = "https://api.github.com/repos/$github_repo/tags";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api_url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "test");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$json = substr($response, $header_size);
$info = curl_getinfo($ch);
curl_close($ch);
if($info['http_code'] != 200)
return $info['http_code'];
return json_decode($json, true);
}
function _is_composer_git_repo(array $repos, $repo) function _is_composer_git_repo(array $repos, $repo)
{ {
foreach($repos as $item) foreach($repos as $item)
@ -153,6 +179,22 @@ function _is_composer_git_repo(array $repos, $repo)
return false; return false;
} }
function _is_composer_github_package(array $repos, $repo, &$github_repo)
{
foreach($repos as $item)
{
if($item['type'] == 'package' &&
$item['package']['name'] == $repo &&
preg_match('~https?://github.com/([^/]+)/([^/]+)~', $item['package']['dist']['url'], $matches))
{
$github_repo = $matches[1].'/'.$matches[2];
return true;
}
}
return false;
}
function gitea_check_repo( function gitea_check_repo(
$auth_token, $auth_token,
$gitea_url, $gitea_url,
@ -201,9 +243,8 @@ function gitea_check_repo(
if(strpos($repo, "bit/") !== 0) if(strpos($repo, "bit/") !== 0)
continue; continue;
if(!_is_composer_git_repo($composer_arr['repositories'], "$gitea_url/$repo")) if(_is_composer_git_repo($composer_arr['repositories'], "$gitea_url/$repo"))
continue; {
$tags = gitea_get_tags($auth_token, $gitea_url, $repo); $tags = gitea_get_tags($auth_token, $gitea_url, $repo);
if(isset($tags[0])) if(isset($tags[0]))
{ {
@ -214,6 +255,17 @@ function gitea_check_repo(
else else
echo "Could not fetch tags for $repo\n"; echo "Could not fetch tags for $repo\n";
} }
else if(_is_composer_github_package($composer_arr['repositories'], $repo, $github_repo))
{
$tags = github_get_tags($github_repo);
if(isset($tags[0]))
{
$last_tag_info = $tags[0];
if(ltrim($last_tag_info["name"], 'v') != ltrim($version, 'v'))
echo "Package '$repo': current $version, latest {$last_tag_info["name"]}\n";
}
}
}
} }
if($opts['check_upm']) if($opts['check_upm'])