Source code for pywf_internal_proprietary.define_07_publish
# -*- coding: utf-8 -*-"""Publish to Python repository related automation."""importtypingasTimportdataclassestry:fromgithubimport(Github,GithubException,Repository,GitTag,GitRelease,)exceptImportError:# pragma: no coverpassfrom.vendor.emojiimportEmojifrom.vendor.better_pathlibimporttemp_cwdfrom.loggerimportloggerfrom.helpersimportbump_version,print_commandifT.TYPE_CHECKING:# pragma: no coverfrom.defineimportPyWf
[docs]@dataclasses.dataclassclassPyWfPublish:# pragma: no cover""" Namespace class for publishing to Python repository related automation. """
[docs]defbump_version(self:"PyWf",major:bool=False,minor:bool=False,patch:bool=False,real_run:bool=True,verbose:bool=False,):""" Bump a semantic version. The current version has to be in x.y.z format, where x, y, z are integers. :param major: bump major version. :param minor: bump minor version. :param patch: bump patch version. :param minor_start_from: if bumping major version, minor start from this number. :param micro_start_from: if bumping minor version, micro start from this number. """# update pyproject.toml fileifself.path_pyproject_toml.exists():ifmajor:action="major"elifminor:action="minor"elifpatch:action="patch"else:# pragma: no coverraiseNotImplementedErrorargs=[f"{self.path_bin_poetry}","version",action,]self.run_command(args,real_run)
@logger.emoji_block(msg="Publish to GitHub Release",emoji=Emoji.package,)def_publish_to_github_release(self:"PyWf",real_run:bool=True,)->T.Optional["GitRelease"]:# pragma: no cover""" Create a GitHub Release using the current version based on main branch. :returns: a boolean flag to indicate whether the operation is performed. """logger.info(f"preview release at {self.github_versioned_release_url}")release_name=self.package_versiongh=Github(self.github_token)repo=gh.get_repo(self.github_repo_fullname)# Check if release existstry:repo.get_release(release_name)logger.info(f"Release {release_name!r} already exists.")returnNoneexceptGithubExceptionase:ife.status==404:passelse:raiseeexceptExceptionase:# pragma: no coverraisee# Create Tag if not existstry:repo.get_git_ref(f"tags/{release_name}")logger.info(f"Tag {release_name!r} already exists.")exceptGithubExceptionase:ife.status==404:ifreal_run:default_branch=repo.default_branchcommit=repo.get_branch(default_branch).commitcommit_sha=commit.shatag=repo.create_git_tag(tag=release_name,message=f"Release {release_name}",object=commit_sha,type="commit",)repo.create_git_ref(ref=f"refs/tags/{release_name}",sha=tag.sha,)else:# pragma: no coverraiseeexceptExceptionase:# pragma: no coverraisee# Create Releaseifreal_run:release=repo.create_git_release(tag=release_name,name=release_name,message=f"Release {release_name}",)returnreleaseelse:returnNone
[docs]defpublish_to_github_release(self:"PyWf",real_run:bool=True,verbose:bool=True,):# pragma: no coverwithlogger.disabled(notverbose):returnself._publish_to_github_release(real_run=real_run,)