blob: 1123cfd2f8f71dc8c6a7853a3da2e5f474974f03 [file]
"""Subcommand to create a release tracking issue."""
from dev.release.gh import GitHub
from dev.release.release_issue import load_release_tracking_template
from dev.release.utils import determine_next_version, semver_type
class CreateReleaseIssue:
"""Class to create a release tracking issue."""
def __init__(self, args, gh: GitHub):
self.args = args
self.gh = gh
def run(self) -> int:
"""Executes the create-release-issue subcommand."""
version = self.args.version
if version is None:
version = determine_next_version()
# Concurrency check
open_issues = self.gh.get_open_tracking_issues()
if open_issues:
print("Error: A release is already in progress. Active tracking issues:")
for issue in open_issues:
print(f"- {issue['title']}: {issue['url']}")
return 1
template_content = load_release_tracking_template(version=version)
issue_num = self.gh.create_release_tracking_issue(version, template_content)
print(f"Created tracking issue #{issue_num} for v{version}")
return 0
@classmethod
def add_parser(cls, subparsers):
"""Adds parser for create-release-issue subcommand."""
parser = subparsers.add_parser(
"create-release-issue",
help="Search for open releases and create a new tracking issue.",
)
parser.add_argument(
"--version",
type=semver_type,
help="The release version (e.g., 0.38.0). If not provided, determined automatically.",
)
parser.set_defaults(command=cls.run_from_args)
@classmethod
def run_from_args(cls, args):
"""Instantiates and runs the command from parsed args."""
gh = GitHub()
return cls(args, gh).run()