File update-version.py of Package amdvlk
#!/usr/bin/env python
import os
import re
import git
import argparse
from git import Repo, Git
from bs4 import BeautifulSoup
amdvlk_url = 'https://github.com/GPUOpen-Drivers/AMDVLK.git'
def clone_repo(git_url, repo_dir):
try:
repo = Repo(repo_dir)
origin = repo.remotes.origin
origin.fetch()
except (git.exc.GitCommandError, git.exc.NoSuchPathError, git.exc.InvalidGitRepositoryError):
print(f"cloning {git_url}...")
repo = Repo.clone_from(git_url, repo_dir)
return repo
def read_repo_xml(repo_xml_path):
with open(repo_xml_path, 'r') as f:
data = f.read()
bsdata = BeautifulSoup(data, 'xml')
projects = bsdata.find_all('project')
version = {}
for p in projects:
name = p.get('name')
revision = p.get('revision')
version[name] = revision
return version
def update_obs_xml(obs_xml_path, new_rev):
urls = []
vers = {}
url_re = "GPUOpen-Drivers\/(.*)<\/param>"
rev_re = 'name="revision">(.*)<\/param>'
result_data = []
with open(obs_xml_path, 'r') as f:
data = f.read().splitlines()
for line in data:
url_line = re.search(url_re, line)
rev_line = re.search(rev_re, line)
new_line = line
if url_line:
pj = url_line.groups()[0]
urls.append(pj)
elif rev_line:
revision = rev_line.groups()[0]
vers[urls[-1]] = revision
new_line = line.replace(revision, new_rev[urls[-1]])
result_data.append(new_line)
with open(obs_xml_path, 'w') as f:
f.write("\n".join(result_data))
def update_spec_file(spec_file, tag):
def replace_version(match_obj):
if match_obj:
return match_obj.group(1) + str(tag)[2:]
# get the old tag
with open(spec_file, "r") as sf:
sf_lines = sf.read().splitlines()
new_sf = []
for ind, s in enumerate(sf_lines):
new_sf.append(re.sub(r'(Version:\s+).*', replace_version, s))
with open(spec_file, "w") as sf:
sf.writelines(s + "\n" for s in new_sf)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Scripts that updates amdvlk version.')
parser.add_argument('--obs-dir', required=True, help='Location of the obs amdvlk repo')
parser.add_argument('--repo-dir', required=True, help='Location to clone the Git amdvlk repo')
args = parser.parse_args()
repo_dir = args.repo_dir
repo = clone_repo(amdvlk_url, repo_dir)
tags = sorted(repo.tags, key=lambda t: t.commit.committed_datetime)
latest_tag = tags[-1]
print(f"checking out amdvlk latest tag: {latest_tag} ...")
repo.git.checkout(latest_tag)
repo_xml = os.path.join(args.repo_dir, "default.xml")
print(f"reading from file: {repo_xml} ...")
versions = read_repo_xml(repo_xml)
versions['AMDVLK'] = latest_tag.path
obs_service_xml = os.path.join(args.obs_dir, "_service")
print(f"writing to file: {obs_service_xml} ...")
update_obs_xml(obs_service_xml, versions)
spec_file = os.path.join(args.obs_dir, "amdvlk.spec")
print(f"updating the spec file: {spec_file}")
update_spec_file(spec_file, latest_tag)