Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GH-14997: [Release] Ensure archery release tasks works with both new style GitHub issues and old style JIRA issues #33615

Merged
merged 8 commits into from
Jan 18, 2023
41 changes: 22 additions & 19 deletions dev/archery/archery/release/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,34 +20,33 @@
import click

from ..utils.cli import validate_arrow_sources
from .core import Jira, CachedJira, Release
from .core import IssueTracker, Release


@click.group('release')
@click.option("--src", metavar="<arrow_src>", default=None,
callback=validate_arrow_sources,
help="Specify Arrow source directory.")
@click.option("--jira-cache", type=click.Path(), default=None,
help="File path to cache queried JIRA issues per version.")
@click.option('--github-token', '-t', default=None,
envvar="CROSSBOW_GITHUB_TOKEN",
help='OAuth token for GitHub authentication')
@click.pass_obj
def release(obj, src, jira_cache):
def release(obj, src, github_token):
"""Release releated commands."""
jira = Jira()
if jira_cache is not None:
jira = CachedJira(jira_cache, jira=jira)

obj['jira'] = jira
obj['issue_tracker'] = IssueTracker(github_token=github_token)
obj['repo'] = src.path


@release.command('curate', help="Lists release related Jira issues.")
@release.command('curate', help="Lists release related issues.")
@click.argument('version')
@click.option('--minimal/--full', '-m/-f',
help="Only show actionable Jira issues.", default=False)
help="Only show actionable issues.", default=False)
@click.pass_obj
def release_curate(obj, version, minimal):
"""Release curation."""
release = Release.from_jira(version, jira=obj['jira'], repo=obj['repo'])
release = Release(version, repo=obj['repo'],
issue_tracker=obj['issue_tracker'])
curation = release.curate(minimal)

click.echo(curation.render('console'))
Expand All @@ -64,10 +63,10 @@ def release_changelog():
@click.pass_obj
def release_changelog_add(obj, version):
"""Prepend the changelog with the current release"""
jira, repo = obj['jira'], obj['repo']
repo, issue_tracker = obj['repo'], obj['issue_tracker']

# just handle the current version
release = Release.from_jira(version, jira=jira, repo=repo)
release = Release(version, repo=repo, issue_tracker=issue_tracker)
if release.is_released:
raise ValueError('This version has been already released!')

Expand All @@ -87,10 +86,10 @@ def release_changelog_add(obj, version):
@click.pass_obj
def release_changelog_generate(obj, version, output):
"""Generate the changelog of a specific release."""
jira, repo = obj['jira'], obj['repo']
repo, issue_tracker = obj['repo'], obj['issue_tracker']

# just handle the current version
release = Release.from_jira(version, jira=jira, repo=repo)
release = Release(version, repo=repo, issue_tracker=issue_tracker)

changelog = release.changelog()
output.write(changelog.render('markdown'))
Expand All @@ -100,13 +99,15 @@ def release_changelog_generate(obj, version, output):
@click.pass_obj
def release_changelog_regenerate(obj):
"""Regeneretate the whole CHANGELOG.md file"""
jira, repo = obj['jira'], obj['repo']
issue_tracker, repo = obj['issue_tracker'], obj['repo']
changelogs = []
issue_tracker = IssueTracker(issue_tracker=issue_tracker)

for version in jira.project_versions('ARROW'):
for version in issue_tracker.project_versions():
if not version.released:
continue
release = Release.from_jira(version, jira=jira, repo=repo)
release = Release(version, repo=repo,
issue_tracker=issue_tracker)
click.echo('Querying changelog for version: {}'.format(version))
changelogs.append(release.changelog())

Expand All @@ -129,7 +130,9 @@ def release_cherry_pick(obj, version, dry_run, recreate):
"""
Cherry pick commits.
"""
release = Release.from_jira(version, jira=obj['jira'], repo=obj['repo'])
issue_tracker = obj['issue_tracker']
release = Release(version,
repo=obj['repo'], issue_tracker=issue_tracker)

if not dry_run:
release.cherry_pick_commits(recreate_branch=recreate)
Expand Down