diff --git a/opam2rpm.py b/opam2rpm.py index 8f8e0f8..730430c 100755 --- a/opam2rpm.py +++ b/opam2rpm.py @@ -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'): diff --git a/templates/service b/templates/service index 6b8883d..9ddc7b4 100644 --- a/templates/service +++ b/templates/service @@ -4,6 +4,9 @@ git @PARENT_TAG@ @PARENT_TAG@ + {%- if version.startswith('v') %} + v(.*) + {%- endif %} enable