def update_spec(spec_path, new_release): """ Update spec with new version and changelog for that version, change release to 1 :param spec_path: Path to package .spec file :param new_release: an array containing info about new release, see main() for definition """ if not os.path.isfile(spec_path): raise ReleaseException("No spec file found in dist-git repository!") # make changelog and get version locale.setlocale(locale.LC_TIME, "en_US.UTF-8") changelog = ( f"* {datetime.datetime.now():%a %b %d %Y} {new_release['author_name']!s} " f"<{new_release['author_email']!s}> {new_release['version']}-1\n") # add entries if new_release.get('changelog'): for item in new_release['changelog']: changelog += f"- {item}\n" else: changelog += f"- {new_release['version']} release\n" # change the version and add changelog in spec file with open(spec_path, 'r+') as spec_file: spec = spec_file.read() # replace version spec = re.sub(r'(Version:\s*)([0-9]|[.])*', r'\g<1>' + new_release['version'], spec) # make release 1 spec = re.sub(r'(Release:\s*)([0-9]*)(.*)', r'\g<1>1\g<3>', spec) # insert changelog spec = re.sub(r'(%changelog\n)', r'\g<1>' + changelog + '\n', spec) # write and close spec_file.seek(0) spec_file.write(spec) spec_file.truncate() spec_file.close()
def fedpkg_switch_branch(directory, branch, fail=True): if not os.path.isdir(directory): raise ReleaseException("Cannot access fedpkg repository:") return run_command(directory, f"fedpkg switch-branch {branch}", f"Switching to {branch} failed:", fail)
def fedpkg_lint(directory, branch, fail=True): if not os.path.isdir(directory): raise ReleaseException("Cannot access fedpkg repository:") return run_command(directory, "fedpkg lint", f"Spec lint on branch {branch} failed:", fail)
def fedpkg_commit(directory, branch, message, fail=True): if not os.path.isdir(directory): raise ReleaseException("Cannot access fedpkg repository:") return run_command(directory, f"fedpkg commit -m '{message}'", f"Committing on branch {branch} failed:", fail)
def detect_api_errors(response): """This function looks for errors in API response""" msg = '\n'.join((err['message'] for err in response.get('errors', []))) if msg: raise ReleaseException(msg)