Skip to content

Instantly share code, notes, and snippets.

@mizanRahman
Last active February 22, 2024 14:17
Show Gist options
  • Save mizanRahman/1a019b90f04436b05427e66def9b60f4 to your computer and use it in GitHub Desktop.
Save mizanRahman/1a019b90f04436b05427e66def9b60f4 to your computer and use it in GitHub Desktop.
Automated PR creation
from github import Github
import re
import time
TOKEN = "ghp_..."
dependencies = [
["vehicle-api.version" ,"1.0.2-8177-0927ca8" ]
]
dry_run=True
ticket_number='AMA-1049'
ticket_title= 'Update vehicle api version'
repo_names = [
"retail-export-service",
"retail-vehicle-sync-service",
"retail-vehicle-store-service",
"retail-vehicle-translation-service",
"retail-vehicle-service",
"retail-ad-feeder",
"retail-inventory-gql-service",
"retail-mapping-as24-service",
"retail-vehicle-feature-detail-service",
"retail-publishing-queue-service",
"retail-ad-aggregation-service"
]
def get_repos(github):
repos = []
for repo_name in repo_names:
full_repo_name = "wkda/" + repo_name
print("Getting repo {0} ".format(full_repo_name))
repo = github.get_repo(full_repo_name);
repos.append(repo)
return repos
def writeToFile(filename, content):
f = open(filename, "w")
f.write(content)
f.close()
def update_pom_file(pom_data, property, version):
reg_exp = re.compile('(<{}>)(.*?)(</{}>)'.format(property, property))
return re.sub(reg_exp, r"\g<1>%s\g<3>" % version, pom_data)
def create_pr(repo, ticket_title, ticket_desc):
branch=ticket_title
commit_msg = ticket_title + ": " + ticket_desc
master_branch = repo.get_branch("master")
# create new branch
repo.create_git_ref(ref="refs/heads/" + ticket_title, sha=master_branch.commit.sha)
print("New branch {0} created in {1}".format(branch, repo.name));
# update the file
repo.update_file(pom_file.path, commit_msg, pom_data, pom_file.sha, branch=branch)
#create a pr
pr = repo.create_pull(title=commit_msg, body=commit_msg, head=branch, base="master")
print("PR ", pr.number, " was created ", pr.url.replace("https://api.github.com/repos","https://github.com").replace("pulls","pull"))
if __name__ == '__main__':
print("Preparing PRs")
github = Github(base_url="https://api.github.com", login_or_token=TOKEN)
for repo in get_repos(github):
print("Checkout Repository: ", repo.name)
try:
pom_file = repo.get_contents("pom.xml", ref="master")
except:
print("No pom file found for ", repo.name)
continue
pom_data = pom_file.decoded_content.decode()
for dependency in dependencies:
pom_data = update_pom_file(pom_data, dependency[0], dependency[1])
writeToFile("pom.xml", pom_data)
if(dry_run==False):
create_pr(repo, ticket_number, ticket_title)
time.sleep(5)
@mizanRahman
Copy link
Author

Step to Run this script:

  1. First Update the github token from developers settings, use classic token
  2. python3 update_version.py
  3. to test the script: dry_run=True

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment