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:
parent
3f72623da1
commit
f5aa9ae35c
26
opam2rpm.py
26
opam2rpm.py
@ -73,12 +73,26 @@ class parse_opam():
|
|||||||
log.debug(f'Returning info dict: {self.info}')
|
log.debug(f'Returning info dict: {self.info}')
|
||||||
return 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):
|
def parse_homepage(homepage):
|
||||||
if 'github.com' in homepage:
|
if 'github.com' in homepage:
|
||||||
repository_url = f'{homepage}.git'
|
repository_url = f'{homepage}.git'
|
||||||
log.debug(f'Set repository URL to {repository_url}')
|
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}')
|
log.debug(f'Set repository name to {repository_name}')
|
||||||
|
latest_tag = get_latest_tag('/'.join(hpsplit[3:]))
|
||||||
# add parsing for other common homepages here
|
# add parsing for other common homepages here
|
||||||
else:
|
else:
|
||||||
_fail(f'Unsupported homepage: {homepage}')
|
_fail(f'Unsupported homepage: {homepage}')
|
||||||
@ -88,7 +102,7 @@ def parse_homepage(homepage):
|
|||||||
else:
|
else:
|
||||||
is_prefixed = False
|
is_prefixed = False
|
||||||
|
|
||||||
return repository_url, repository_name, is_prefixed
|
return repository_url, repository_name, is_prefixed, latest_tag
|
||||||
|
|
||||||
def evaluate_prefixing(upstream_prefixed):
|
def evaluate_prefixing(upstream_prefixed):
|
||||||
if upstream_prefixed and downstream_prefixed:
|
if upstream_prefixed and downstream_prefixed:
|
||||||
@ -131,14 +145,14 @@ def manglepkgname(srcname, add_prefix):
|
|||||||
pkgname = srcname
|
pkgname = srcname
|
||||||
return pkgname
|
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:
|
if not vcs_url:
|
||||||
vcs_url = url
|
vcs_url = url
|
||||||
templenv = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath=f'{mydir}/templates'))
|
templenv = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath=f'{mydir}/templates'))
|
||||||
template_service = templenv.get_template('service')
|
template_service = templenv.get_template('service')
|
||||||
template_spec = templenv.get_template('ultimate.spec')
|
template_spec = templenv.get_template('ultimate.spec')
|
||||||
log.debug(f'Rendering {template_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)
|
rendered_spec = template_spec.render(pkgname=srcname, url=url, buildrequires=buildrequires, license=license, mode='dune', do_prefix=prefixed)
|
||||||
|
|
||||||
log.debug(f'Service: {rendered_service}')
|
log.debug(f'Service: {rendered_service}')
|
||||||
@ -172,12 +186,12 @@ def spec_cleaner(file):
|
|||||||
def main():
|
def main():
|
||||||
opam_package = parse_opam(query_opam(args.package))
|
opam_package = parse_opam(query_opam(args.package))
|
||||||
info = opam_package.get_info()
|
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)
|
add_prefix = evaluate_prefixing(is_prefixed)
|
||||||
dependencies = parse_dependencies(info['Dependencies'])
|
dependencies = parse_dependencies(info['Dependencies'])
|
||||||
srcname = manglesrcname(name)
|
srcname = manglesrcname(name)
|
||||||
pkgname = manglepkgname(name, add_prefix)
|
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
|
prjdir = args.obs_project_dir
|
||||||
if prjdir:
|
if prjdir:
|
||||||
if not os.path.isfile(f'{prjdir}/.osc/_project'):
|
if not os.path.isfile(f'{prjdir}/.osc/_project'):
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
<param name="scm">git</param>
|
<param name="scm">git</param>
|
||||||
<param name="revision">@PARENT_TAG@</param>
|
<param name="revision">@PARENT_TAG@</param>
|
||||||
<param name="versionformat">@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>
|
<param name="changesgenerate">enable</param>
|
||||||
</service>
|
</service>
|
||||||
<service mode="buildtime" name="tar">
|
<service mode="buildtime" name="tar">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user