# Path: releasetool/commands/common.py
# class TagContext(GitHubContext):
#     release_pr: Optional[dict] = None
#     release_tag: Optional[str] = None
#     release_version: Optional[str] = None
#     github_release: Optional[dict] = None
#     kokoro_job_name: Optional[str] = None
#     fusion_url: Optional[str] = None
#     token: Optional[str] = None


import getpass
import click
import releasetool.commands.tag.nodejs
from typing import Union
from releasetool.commands.common import TagContext




def kokoro_job_name(upstream_repo: str, package_name: str) -> Union[str, None]:
    """Return the Kokoro job name.

    Args:
        upstream_repo (str): The GitHub repo in the form of `<owner>/<repo>`
        package_name (str): The name of package to release

    Returns:
        The name of the Kokoro job to trigger or None if there is no job to trigger
    """
    return None


def package_name(pull: dict) -> Union[str, None]:
    return None



# Path: releasetool/commands/common.py
# class TagContext(GitHubContext):
#     release_pr: Optional[dict] = None
#     release_tag: Optional[str] = None
#     release_version: Optional[str] = None
#     github_release: Optional[dict] = None
#     kokoro_job_name: Optional[str] = None
#     fusion_url: Optional[str] = None
#     token: Optional[str] = None


# Path: releasetool/commands/tag/php.py
import getpass
import click
import releasetool.commands.tag.nodejs
from typing import Union
from releasetool.commands.common import TagContext





def kokoro_job_name(upstream_repo: str, package_name: str) -> Union[str, None]:
    """Return the Kokoro job name.

    Args:
        upstream_repo (str): The GitHub repo in the form of `<owner>/<repo>`
        package_name (str): The name of package to release

    Returns:
        The name of the Kokoro job to trigger or None if there is no job to trigger
    """
    return None


def package_name(pull: dict) -> Union[str, None]:
    return None



def tag(ctx: TagContext = None) -> TagContext: