|
9 | 9 | from rich import print as rprint
|
10 | 10 | from rich.console import Group
|
11 | 11 | from rich.panel import Panel
|
| 12 | +from rich.progress import Progress, SpinnerColumn, TextColumn |
12 | 13 | from rich.text import Text
|
13 | 14 |
|
14 | 15 | from upgrade_dependencies.dependency import GitHubDependency, PyPIDependency
|
@@ -330,98 +331,113 @@ def update(
|
330 | 331 | version: _description_
|
331 | 332 | project_path: _description_
|
332 | 333 | """
|
333 |
| - # TODO: print status of update |
334 |
| - project = Project( |
335 |
| - project_path=project_path, |
336 |
| - gh_pat=GH_PAT, |
337 |
| - ) |
338 |
| - |
339 |
| - # search for dependency and save old version |
340 |
| - try: |
341 |
| - dep = project.get_dependency(name=dependency) |
342 |
| - old_ver = str(sorted(dep.specifier, key=str)[0].version) |
343 |
| - except RuntimeError as e: |
344 |
| - rprint(f"Cannot find {dependency} in {project.name}.") |
345 |
| - raise typer.Exit(code=1) from e |
346 |
| - |
347 |
| - # fetch data from pypi/github |
348 |
| - asyncio.run(dep.save_data()) |
349 |
| - |
350 |
| - # get latest/desired version |
351 |
| - if version is None: |
352 |
| - version = str(dep.get_latest_version()) |
353 |
| - |
354 |
| - # create new branch |
355 |
| - if isinstance(dep, GitHubDependency) and dep.action: |
356 |
| - v = Version(version) |
357 |
| - branch_name = f"dependency/{dep.short_name}-v{v.major}" |
358 |
| - else: |
359 |
| - branch_name = f"dependency/{dep.short_name}-{version}" |
360 |
| - |
361 |
| - run_shell_command(["git", "checkout", "-b", branch_name]) |
362 |
| - |
363 |
| - # get status of files before changes |
364 |
| - files_before = get_git_status() |
365 |
| - |
366 |
| - # update dependency |
367 |
| - project.update_dependency(dependency=dep, version=version) |
368 |
| - |
369 |
| - # get status of files after changes |
370 |
| - files_after = get_git_status() |
371 |
| - |
372 |
| - # get only the files that were changed |
373 |
| - changed_files = [f for f in files_after if f not in files_before] |
374 |
| - |
375 |
| - run_shell_command(["git", "add", *changed_files]) |
376 |
| - |
377 |
| - # commit the changes |
378 |
| - if isinstance(dep, GitHubDependency) and dep.action: |
379 |
| - old_v = Version(old_ver) |
380 |
| - v = Version(version) |
381 |
| - commit_message = f"Bump {dep.package_name} from v{old_v.major} to v{v.major}" |
382 |
| - else: |
383 |
| - commit_message = f"Bump {dep.package_name} from {old_ver} to {version}" |
384 |
| - |
385 |
| - run_shell_command(["git", "commit", "-m", commit_message]) |
386 |
| - |
387 |
| - # push the branch |
388 |
| - run_shell_command(["git", "push", "origin", branch_name]) |
| 334 | + with Progress( |
| 335 | + SpinnerColumn(), |
| 336 | + TextColumn("[progress.description]{task.description}"), |
| 337 | + transient=True, |
| 338 | + ) as progress: |
| 339 | + task = progress.add_task("Creating project...") |
| 340 | + project = Project( |
| 341 | + project_path=project_path, |
| 342 | + gh_pat=GH_PAT, |
| 343 | + ) |
389 | 344 |
|
390 |
| - # create pr_body |
391 |
| - if isinstance(dep, PyPIDependency): |
392 |
| - url = f"https://pypi.org/project/{dep.package_name}" |
393 |
| - pr_body = f"Bumps [{dep.package_name}]({url}) from {old_ver} to {version}." |
394 |
| - elif isinstance(dep, GitHubDependency): |
395 |
| - old_v = Version(old_ver) |
396 |
| - v = Version(version) |
397 |
| - url = f"https://github.com/{dep.owner}/{dep.repo}" |
398 |
| - pr_body = ( |
399 |
| - f"Bumps [{dep.package_name}]({url}) from v{old_v.major} to v{v.major}." |
| 345 | + # search for dependency and save old version |
| 346 | + try: |
| 347 | + dep = project.get_dependency(name=dependency) |
| 348 | + old_ver = str(sorted(dep.specifier, key=str)[0].version) |
| 349 | + except RuntimeError as e: |
| 350 | + rprint(f"Cannot find {dependency} in {project.name}.") |
| 351 | + raise typer.Exit(code=1) from e |
| 352 | + |
| 353 | + # fetch data from pypi/github |
| 354 | + progress.update(task, description="Fetching dependency data...") |
| 355 | + asyncio.run(dep.save_data()) |
| 356 | + |
| 357 | + # get latest/desired version |
| 358 | + if version is None: |
| 359 | + version = str(dep.get_latest_version()) |
| 360 | + |
| 361 | + # create new branch |
| 362 | + progress.update(task, description="Creating new branch...") |
| 363 | + if isinstance(dep, GitHubDependency) and dep.action: |
| 364 | + v = Version(version) |
| 365 | + branch_name = f"dependency/{dep.short_name}-v{v.major}" |
| 366 | + else: |
| 367 | + branch_name = f"dependency/{dep.short_name}-{version}" |
| 368 | + |
| 369 | + run_shell_command(["git", "checkout", "-b", branch_name]) |
| 370 | + |
| 371 | + # get status of files before changes |
| 372 | + progress.update(task, description="Updating dependency...") |
| 373 | + files_before = get_git_status() |
| 374 | + |
| 375 | + # update dependency |
| 376 | + project.update_dependency(dependency=dep, version=version) |
| 377 | + |
| 378 | + # get status of files after changes |
| 379 | + files_after = get_git_status() |
| 380 | + |
| 381 | + # get only the files that were changed |
| 382 | + changed_files = [f for f in files_after if f not in files_before] |
| 383 | + |
| 384 | + run_shell_command(["git", "add", *changed_files]) |
| 385 | + |
| 386 | + # commit the changes |
| 387 | + progress.update(task, description="Committing changes...") |
| 388 | + if isinstance(dep, GitHubDependency) and dep.action: |
| 389 | + old_v = Version(old_ver) |
| 390 | + v = Version(version) |
| 391 | + commit_message = ( |
| 392 | + f"Bump {dep.package_name} from v{old_v.major} to v{v.major}" |
| 393 | + ) |
| 394 | + else: |
| 395 | + commit_message = f"Bump {dep.package_name} from {old_ver} to {version}" |
| 396 | + |
| 397 | + run_shell_command(["git", "commit", "-m", commit_message]) |
| 398 | + |
| 399 | + # push the branch |
| 400 | + progress.update(task, description="Pushing changes to GitHub...") |
| 401 | + run_shell_command(["git", "push", "origin", branch_name]) |
| 402 | + |
| 403 | + # create pr_body |
| 404 | + progress.update(task, description="Creating pull request...") |
| 405 | + if isinstance(dep, PyPIDependency): |
| 406 | + url = f"https://pypi.org/project/{dep.package_name}" |
| 407 | + pr_body = f"Bumps [{dep.package_name}]({url}) from {old_ver} to {version}." |
| 408 | + elif isinstance(dep, GitHubDependency): |
| 409 | + old_v = Version(old_ver) |
| 410 | + v = Version(version) |
| 411 | + url = f"https://github.com/{dep.owner}/{dep.repo}" |
| 412 | + pr_body = ( |
| 413 | + f"Bumps [{dep.package_name}]({url}) from v{old_v.major} to v{v.major}." |
| 414 | + ) |
| 415 | + else: |
| 416 | + pr_body = "" |
| 417 | + |
| 418 | + # create pull request |
| 419 | + pr = run_shell_command( |
| 420 | + [ |
| 421 | + "gh", |
| 422 | + "pr", |
| 423 | + "create", |
| 424 | + "-a", |
| 425 | + "@me", |
| 426 | + "--base", |
| 427 | + "master", |
| 428 | + "--body", |
| 429 | + pr_body, |
| 430 | + "--label", |
| 431 | + "dependencies", |
| 432 | + "--title", |
| 433 | + commit_message, |
| 434 | + ], |
400 | 435 | )
|
401 |
| - else: |
402 |
| - pr_body = "" |
403 |
| - |
404 |
| - # create pull request |
405 |
| - run_shell_command( |
406 |
| - [ |
407 |
| - "gh", |
408 |
| - "pr", |
409 |
| - "create", |
410 |
| - "-a", |
411 |
| - "@me", |
412 |
| - "--base", |
413 |
| - "master", |
414 |
| - "--body", |
415 |
| - pr_body, |
416 |
| - "--label", |
417 |
| - "dependencies", |
418 |
| - "--title", |
419 |
| - commit_message, |
420 |
| - ], |
421 |
| - ) |
422 | 436 |
|
423 |
| - # re-checkout master |
424 |
| - run_shell_command(["git", "checkout", "master"]) |
| 437 | + # re-checkout master |
| 438 | + run_shell_command(["git", "checkout", "master"]) |
| 439 | + |
| 440 | + rprint(f"✅Dependency updated! View the pull request at {pr.stdout}") |
425 | 441 |
|
426 | 442 |
|
427 | 443 | def main():
|
|
0 commit comments