def get_current_milestone(repo: str, patch_version: Optional[int] = None) -> Dict: milestones = get_latest_milestones(repo) if patch_version is None: patch_version = get_patch_version() milestone_version = f"v{patch_version}" result = next((milestone for milestone in milestones if milestone["title"] == milestone_version), None) if result is None: raise AssertionError(f"Milestone `{milestone_version}` doesn't exist") return result
def main(): parser = argparse.ArgumentParser() parser.add_argument("--token", type=str, required=True, help="github token") args = parser.parse_args() repo = env("GITHUB_REPOSITORY") milestones = get_latest_milestones(repo) milestones.sort(key=lambda milestone: milestone["title"], reverse=True) patch_version = get_patch_version() milestone_version = f"v{patch_version}" current_milestone = next((milestone for milestone in milestones if milestone["title"] == milestone_version), None) # do nothing if milestone with expected title is already created if current_milestone is not None: return prev_milestone_version = f"v{patch_version - 1}" prev_milestone = next((milestone for milestone in milestones if milestone["title"] == prev_milestone_version), None) due_on = None if prev_milestone is not None and prev_milestone["due_on"] is not None: date = datetime.strptime(prev_milestone["due_on"], "%Y-%m-%dT%H:%M:%SZ") + timedelta(weeks=2) due_on = "%04d-%02d-%02dT%02d:%02d:%02dZ" % (date.year, date.month, date.day, date.hour, date.minute, date.second) maintainers = [ "Undin", "ortem", "mchernyavsky", "vlad20012", "dima74", "avrong", "ozkriff" ] for m in milestones: if len(maintainers) == 1: break desc = m["description"] res = re.search(RELEASE_MANAGER_RE, desc) if res is not None: try: maintainers.remove(res.group(1)) except ValueError: pass description = f"Release manager: @{maintainers[0]}" create_milestone(repo, args.token, milestone_version, description=description, due_on=due_on)
def main() -> None: parser = argparse.ArgumentParser() parser.add_argument("--token", type=str, required=True) parser.add_argument("--repo_owner", type=str, required=True) parser.add_argument("--repo_name", type=str, required=True) args = parser.parse_args() repo = env("GITHUB_REPOSITORY") # the script is supposed to be invoked only after release branch creation # so we need previous patch version release_patch_version = get_patch_version() - 1 changelog_repo = f"{args.repo_owner}/{args.repo_name}" branch_name = changelog_branch_name(release_patch_version) branches = get_all_branches(changelog_repo, args.token) existing_branch = next( (branch["name"] for branch in branches if branch["name"].endswith(branch_name)), None) if existing_branch is not None: print( f"Branch for v{release_patch_version} release already exists: `{existing_branch}`" ) return milestone = get_current_milestone(repo, release_patch_version) # TODO: find out more correct way to parse data release_date = datetime.strptime(milestone["due_on"], "%Y-%m-%dT%H:%M:%SZ").date() today = date.today() if today >= release_date or milestone["state"] == "closed": print(f"Milestone v{release_patch_version} is over") return delta = release_date - today five_days = timedelta(5) if delta > five_days: print("Too early to create release changelog") return add_changelog_template(args.token, release_patch_version, args.repo_name) create_changelog_pull_request(changelog_repo, args.token, release_patch_version, milestone)
import argparse from common import get_patch_version, inc_patch_version, GRADLE_PROPERTIES, git_command, construct_repository_url if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument("--token", type=str, help="github token") args = parser.parse_args() repo_url = construct_repository_url(args.token) patch_version = get_patch_version() release_branch = f"release-{patch_version}" git_command("branch", release_branch) git_command("push", repo_url, release_branch) inc_patch_version() git_command("add", GRADLE_PROPERTIES) git_command("commit", "-m", ":arrow_up: patch version") git_command("push", repo_url, "master")