-
Notifications
You must be signed in to change notification settings - Fork 0
/
frontend-release-pr-action.py
97 lines (82 loc) · 3.08 KB
/
frontend-release-pr-action.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import argparse
import toml
from github import Auth, Github
parser = argparse.ArgumentParser()
parser.add_argument(
"--new_release_version",
type=str,
help="Whether or not this is a pre-release.",
required=True,
)
parser.add_argument(
"--github_token",
type=str,
help="Github API Access token",
required=True,
)
if __name__ == "__main__":
args = parser.parse_args()
github = Github(auth=Auth.Token(args.github_token))
new_version_tag = args.new_release_version
MAIN = "main"
ORGANIZATION = "music-assistant"
SERVER_REPO = "server"
FRONTEND_DEPENDENCY = "music-assistant-frontend"
LABEL_NAME = "frontend-release"
MAINTENANCE_LABEL_NAME = "maintenance"
server_repo = github.get_repo(f"{ORGANIZATION}/{SERVER_REPO}")
# Get pyproject.toml extract current version and update with new version
pyproject_file = server_repo.get_contents("pyproject.toml", ref=MAIN)
existing_pyproject_contents = toml.loads(
pyproject_file.decoded_content.decode("utf-8")
)
server_dependencies = existing_pyproject_contents["project"][
"optional-dependencies"
]["server"]
music_assistant_frontend_dependecy = ""
for x in server_dependencies:
if x.startswith(FRONTEND_DEPENDENCY):
music_assistant_frontend_dependecy = x
music_assistant_frontend_dependecy_new = music_assistant_frontend_dependecy.replace(
music_assistant_frontend_dependecy.split("==")[1], new_version_tag
)
existing_pyproject_file = pyproject_file.decoded_content.decode("utf-8")
pyproject_new = existing_pyproject_file.replace(
music_assistant_frontend_dependecy, music_assistant_frontend_dependecy_new
)
# Get requirements_all.txt and update with new version
requirements_file = server_repo.get_contents("requirements_all.txt", ref=MAIN)
existing_requirements_file = requirements_file.decoded_content.decode("utf-8")
requirements_new = existing_requirements_file.replace(
music_assistant_frontend_dependecy, music_assistant_frontend_dependecy_new
)
# Create new branch and PR
ref = server_repo.get_git_ref("heads/main")
sha = ref.object.sha
new_branch_name = f"frontend-{new_version_tag}"
new_branch = server_repo.create_git_ref(
ref=f"refs/heads/{new_branch_name}", sha=sha
)
server_repo.update_file(
path="pyproject.toml",
message=f"Update pyproject.toml for {new_version_tag}",
content=pyproject_new,
sha=pyproject_file.sha,
branch=new_branch_name,
)
server_repo.update_file(
path="requirements_all.txt",
message=f"Update requirements_all.txt for {new_version_tag}",
content=requirements_new,
sha=requirements_file.sha,
branch=new_branch_name,
)
pull_request = server_repo.create_pull(
title=new_branch_name,
body=f"Bump frontend to {new_version_tag}",
head=new_branch_name,
base="main",
)
pull_request.add_to_labels(
server_repo.get_label(LABEL_NAME), server_repo.get_label(MAINTENANCE_LABEL_NAME)
)