Skip to content

Commit

Permalink
GH-14997: [Release] Ensure archery release tasks works with both new …
Browse files Browse the repository at this point in the history
…style GitHub issues and old style JIRA issues (#33615)

I've decided to do all the archery release tasks on a single PR:
* Closes: #14997
* Closes: #14999
* Closes: #15002

Authored-by: Raúl Cumplido <raulcumplido@gmail.com>
Signed-off-by: Raúl Cumplido <raulcumplido@gmail.com>
  • Loading branch information
raulcd committed Jan 18, 2023
1 parent 6633251 commit ccd169c
Show file tree
Hide file tree
Showing 7 changed files with 278 additions and 145 deletions.
41 changes: 22 additions & 19 deletions dev/archery/archery/release/cli.py
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

0 comments on commit ccd169c

Please sign in to comment.