def update_changelog(self, new_version): self.git.fetch_tags() self.git.checkout(new_version) # FIXME: make the file name configurable p = os.path.join(self.git.repo_path, "CHANGELOG.md") try: with open(p, "r") as fd: changelog_content = fd.read() except FileNotFoundError: logger.info("CHANGELOG.md not found") return finally: self.git.checkout('master') # get latest release changelog = parse_changelog(new_version, changelog_content) url = (f"{self.API3_ENDPOINT}repos/{self.conf.repository_owner}/" f"{self.conf.repository_name}/releases/latest") latest_release = self.do_request(method="GET", url=url, use_github_auth=True).json() # check if the changelog needs updating if latest_release["body"] == changelog: return url = (f"{self.API3_ENDPOINT}repos/{self.conf.repository_owner}/" f"{self.conf.repository_name}/releases/{latest_release['id']}") response = self.do_request(method="POST", url=url, json_payload={'body': changelog}, use_github_auth=True) if response.status_code != 200: self.logger.error((f"Something went wrong during changelog " f"update for {new_version}:\n{response.text}"))
def get_changelog(self, new_version): """ Get changelog for new version :param new_version: version number :return: """ self.git.fetch_tags() self.git.checkout(f'{new_version}-release') self.git.pull_branch(f'{new_version}-release') p = os.path.join(self.git.repo_path, "CHANGELOG.md") try: with open(p, "r") as fd: changelog_content = fd.read() except FileNotFoundError: logger.info("CHANGELOG.md not found") return '' finally: self.git.checkout('master') changelog = parse_changelog(new_version, changelog_content) latest_release = self.project.get_latest_release() # check if the changelog needs updating if latest_release.body == changelog: return '' return changelog
def update_changelog(self, previous_release, new_version, fs_path, id_): # parse changelog and update the release with it changelog = parse_changelog(previous_release, new_version, fs_path) url = (f"{self.API3_ENDPOINT}repos/{self.conf.repository_owner}/" f"{self.conf.repository_name}/releases/{id_!s}") response = requests.post(url=url, json={'body': changelog}, headers=self.headers) if response.status_code != 200: self.logger.error((f"Something went wrong during changelog " f"update for {new_version}:\n{response.text}"))
def test_no_changes(self, changelog_with_no_changes): changelog = parse_changelog("0.0.2", changelog_with_no_changes) assert changelog == "# 0.0.2"
def test_normal_use_case(self, changelog_with_two_entries): changelog = parse_changelog("0.0.2", changelog_with_two_entries) assert changelog == "# 0.0.2\n* New entry\n* Fixes"
def test_wrong_version(self, changelog_with_one_entry): changelog = parse_changelog("0.0.2", changelog_with_one_entry) assert changelog == "No changelog provided"
def test_one_entry_changelog(self, changelog_with_one_entry): changelog = parse_changelog("0.0.1", changelog_with_one_entry) assert changelog == "# 0.0.1\n* Test entry\n* Another test entry\n"
def test_empty_changelog(self, empty_changelog): changelog = parse_changelog("2.0.0", empty_changelog) assert changelog == "No changelog provided"
def test_no_changelog(self): changelog = parse_changelog("2.0.0", "nochangelogpath") assert changelog == "No changelog provided"
def test_no_changes(self, changelog_with_no_changes): changelog = parse_changelog("0.0.1", "0.0.2", changelog_with_no_changes) assert changelog == "No changelog provided"