Detect and rewrite versions

Fetch latest tag from GitHub API and detect if it requires a pattern rewrite.
Currently supports tagged releases starting with "v".

Signed-off-by: Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
This commit is contained in:
Georg Pfuetzenreuter 2023-08-28 01:28:36 +02:00
parent 3f72623da1
commit f5aa9ae35c
Signed by: Georg
GPG Key ID: 1ED2F138E7E6FF57
2 changed files with 23 additions and 6 deletions

View File

@ -73,12 +73,26 @@ class parse_opam():
log.debug(f'Returning info dict: {self.info}')
return self.info
def get_latest_tag(repository):
url = f'https://api.github.com/repos/{repository}/tags'
result = requests.get(url)
status = result.status_code
logmsg = f'{url} returned {status}'
if status != 200:
_fail(logmsg)
log.debug(logmsg)
tag = result.json()[0]['name']
log.debug(f'Found latest tag: {tag}')
return tag
def parse_homepage(homepage):
if 'github.com' in homepage:
repository_url = f'{homepage}.git'
log.debug(f'Set repository URL to {repository_url}')
repository_name = homepage.rsplit('/')[-1]
hpsplit = homepage.rsplit('/')
repository_name = hpsplit[-1]
log.debug(f'Set repository name to {repository_name}')
latest_tag = get_latest_tag('/'.join(hpsplit[3:]))
# add parsing for other common homepages here
else:
_fail(f'Unsupported homepage: {homepage}')
@ -88,7 +102,7 @@ def parse_homepage(homepage):
else:
is_prefixed = False
return repository_url, repository_name, is_prefixed
return repository_url, repository_name, is_prefixed, latest_tag
def evaluate_prefixing(upstream_prefixed):
if upstream_prefixed and downstream_prefixed:
@ -131,14 +145,14 @@ def manglepkgname(srcname, add_prefix):
pkgname = srcname
return pkgname
def render(name, srcname, url, license, buildrequires, prefixed, vcs_url=None):
def render(name, srcname, url, license, buildrequires, prefixed, version, vcs_url=None):
if not vcs_url:
vcs_url = url
templenv = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath=f'{mydir}/templates'))
template_service = templenv.get_template('service')
template_spec = templenv.get_template('ultimate.spec')
log.debug(f'Rendering {template_spec}')
rendered_service = template_service.render(pkgname=name, url=vcs_url)
rendered_service = template_service.render(pkgname=name, url=vcs_url, version=version)
rendered_spec = template_spec.render(pkgname=srcname, url=url, buildrequires=buildrequires, license=license, mode='dune', do_prefix=prefixed)
log.debug(f'Service: {rendered_service}')
@ -172,12 +186,12 @@ def spec_cleaner(file):
def main():
opam_package = parse_opam(query_opam(args.package))
info = opam_package.get_info()
repository_url, name, is_prefixed = parse_homepage(info['Homepage'])
repository_url, name, is_prefixed, version = parse_homepage(info['Homepage'])
add_prefix = evaluate_prefixing(is_prefixed)
dependencies = parse_dependencies(info['Dependencies'])
srcname = manglesrcname(name)
pkgname = manglepkgname(name, add_prefix)
data_service, data_spec = render(name, srcname, info['Homepage'], info['License'], dependencies, add_prefix, repository_url)
data_service, data_spec = render(name, srcname, info['Homepage'], info['License'], dependencies, add_prefix, version, repository_url)
prjdir = args.obs_project_dir
if prjdir:
if not os.path.isfile(f'{prjdir}/.osc/_project'):

View File

@ -4,6 +4,9 @@
<param name="scm">git</param>
<param name="revision">@PARENT_TAG@</param>
<param name="versionformat">@PARENT_TAG@</param>
{%- if version.startswith('v') %}
<param name="versionrewrite-pattern">v(.*)</param>
{%- endif %}
<param name="changesgenerate">enable</param>
</service>
<service mode="buildtime" name="tar">