| 124 | |
| 125 | |
| 126 | class GitHubIssue(object): |
| 127 | |
| 128 | def __init__(self, github_api, github_id, cmd): |
| 129 | self.github_api = github_api |
| 130 | self.github_id = github_id |
| 131 | self.cmd = cmd |
| 132 | |
| 133 | try: |
| 134 | self.issue = self.github_api.get_issue_data(github_id) |
| 135 | except Exception as e: |
| 136 | self.cmd.fail("GitHub could not find %s\n%s" % (github_id, e)) |
| 137 | |
| 138 | def get_label(self, prefix): |
| 139 | prefix = f"{prefix}:" |
| 140 | return [ |
| 141 | lbl["name"][len(prefix):].strip() |
| 142 | for lbl in self.issue["labels"] if lbl["name"].startswith(prefix) |
| 143 | ] |
| 144 | |
| 145 | @property |
| 146 | def components(self): |
| 147 | return self.get_label("Component") |
| 148 | |
| 149 | @property |
| 150 | def assignees(self): |
| 151 | return [a["login"] for a in self.issue["assignees"]] |
| 152 | |
| 153 | @property |
| 154 | def current_fix_versions(self): |
| 155 | try: |
| 156 | return self.issue.get("milestone", {}).get("title") |
| 157 | except AttributeError: |
| 158 | pass |
| 159 | |
| 160 | @property |
| 161 | def current_versions(self): |
| 162 | all_versions = self.github_api.get_milestones() |
| 163 | |
| 164 | unreleased_versions = [x for x in all_versions if x["state"] == "open"] |
| 165 | unreleased_versions = [x["title"] for x in unreleased_versions] |
| 166 | |
| 167 | return unreleased_versions |
| 168 | |
| 169 | def resolve(self, fix_version, comment, pr_body): |
| 170 | cur_status = self.issue["state"] |
| 171 | |
| 172 | if cur_status == "closed": |
| 173 | self.cmd.fail("GitHub issue %s already has status '%s'" |
| 174 | % (self.github_id, cur_status)) |
| 175 | |
| 176 | if DEBUG: |
| 177 | print("GitHub issue %s untouched -> %s" % |
| 178 | (self.github_id, fix_version)) |
| 179 | else: |
| 180 | self.github_api.assign_milestone(self.github_id, fix_version) |
| 181 | if f"Closes: #{self.github_id}" not in pr_body: |
| 182 | self.github_api.close_issue(self.github_id, comment) |
| 183 | print("Successfully resolved %s!" % (self.github_id)) |