def get_latest_version(self): """ Retrieves information about a tag Parameters: release_name (str): tag name Returns: dict: tag details """ try: request_data = { "method": "GET", "headers": self.req_headers, "url": f"{self.repo_url}/releases/latest" } response = request_handler(request_data) if response is None: return {"message": "No releases found", "status_code": 404} if response.status_code == 200 and 'tag_name' in response.json(): self.current_release = response.json() return self.current_release['tag_name'] return response except Exception as err: print("Error occurred getting tag: {}".format(err)) return None else: return None
def get_tag(self, tag_name: str): """ Retrieves information about a tag Parameters: tag_name (str): branch name Returns: dict: Tag information """ try: request_data = { "method": "GET", "headers": self.req_headers, "url": f"{self.repo_url}/git/ref/tags/{tag_name}" } response = request_handler(request_data) if response is None: return None if response.status_code == 200: self.tag_details = response.json() return response.json() return self.tag_details except Exception as err: print("Error occurred getting tag: {}".format(err)) return None else: return None
def create_tag_object(self, payload: dict): """ Create tag object Parameters: payload (dict): tag: tag name message: tag message object: commit id sha type: type of object, nomrally commit Returns: dict: Tag delete result """ try: request_data = { "method": "POST", "headers": self.req_headers, "url": f"{self.repo_url}/git/tags", "data": payload } response = request_handler(request_data) return response except Exception as err: print("Error occurred creating tag object: {}".format(err)) return None else: return None
def get_commit_ids(self): request_data = { "method": "GET", "headers": self.req_headers, "url": f"{self.repo_url}/commits" } response = request_handler(request_data) commit_ids = [id["sha"] for id in response.json()] return commit_ids
def get_commit(self, commit_id: str): try: request_data = { "method": "GET", "headers": self.req_headers, "url": f"{self.repo_url}/git/commits/{commit_id}" } response = request_handler(request_data) return response.json() except Exception as err: print("Error occurred getting tag: {}".format(err)) return None else: return None
def get_all_references(self): """ Get all tag references Parameters: tag_name (str): tag name Returns: dict: Tag delete result """ try: request_data = { "method": "GET", "headers": self.req_headers, "url": f"{self.repo_url}/git/matching-refs/" } response = request_handler(request_data) return response.json() except Exception as err: print("Error occurred getting tag: {}".format(err)) return None else: return None
def create_release(self, branch_name: str, commit_id: str): """ Create a release Parameters: branch_name (str): Specifies the git branch tag is created from. commit_id (str): git commit id Returns: dict: tag details """ try: current_version = self.get_latest_version() release_name = generate_version(current_version) resp_obj = { "message": f"Error occurred creating release version {release_name} no changes made", "exit_code": 1 } current_tag = self.get_tag(current_version) if current_tag is not None: if current_tag['object']["sha"] != commit_id: _ids = self.get_commit_ids() if commit_id in _ids: self.create_release_status = True if self.create_release_status == False: resp_obj[ 'message'] = f"Release {current_version} using commit id {commit_id}, skipping creating new release" resp_obj['exit_code'] = 0 resp_obj['data'] = self.tag_details return resp_obj url = f"{self.repo_url}/releases" req_body = { "tag_name": release_name, "target_commitish": branch_name, "name": release_name, "draft": False, "prerelease": False } request_data = { "method": "POST", "headers": self.req_headers, "url": url, "data": req_body } response = request_handler(request_data) if response.json() is not None and response.status_code == 201: self.create_alpha_tag() self.release_details = response.json() resp_obj[ 'message'] = f"Release {release_name} created using branch {branch_name}" resp_obj['exit_code'] = 0 resp_obj['data'] = self.release_details return resp_obj return response except Exception as err: print("Error occurred creating tag: {}".format(err)) resp_obj[ 'message'] = f"An error occurred creating release {release_name}" resp_obj['error'] = err return resp_obj else: return None