Files
cibuildwheel/bin/make_dependency_update_pr.py
T

83 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
from __future__ import annotations
import os
import sys
import textwrap
import time
from pathlib import Path
from subprocess import run
import click
def shell(cmd, **kwargs):
return run([cmd], shell=True, **kwargs)
def git_repo_has_changes():
unstaged_changes = shell("git diff-index --quiet HEAD --").returncode != 0
staged_changes = shell("git diff-index --quiet --cached HEAD --").returncode != 0
return unstaged_changes or staged_changes
@click.command()
def main():
project_root = Path(__file__).parent / ".."
os.chdir(project_root)
if git_repo_has_changes():
print("Your git repo has uncommitted changes. Commit or stash before continuing.")
sys.exit(1)
previous_branch = shell(
"git rev-parse --abbrev-ref HEAD", check=True, capture_output=True, encoding="utf8"
).stdout.strip()
shell("git fetch origin", check=True)
timestamp = time.strftime("%Y-%m-%dT%H-%M-%S", time.gmtime())
branch_name = f"update-constraints-{timestamp}"
shell(f"git checkout -b {branch_name} origin/master", check=True)
try:
shell("bin/update_dependencies.py", check=True)
if not git_repo_has_changes():
print("Done: no constraint updates required.")
return
shell('git commit -a -m "Update dependencies"', check=True)
body = textwrap.dedent(
f"""
Update the versions of our dependencies.
PR generated by `{os.path.basename(__file__)}`.
"""
)
run(
[
"gh",
"pr",
"create",
"--repo=joerick/cibuildwheel",
"--base=master",
"--title=Update dependencies",
f"--body='{body}'",
],
check=True,
)
print("Done.")
finally:
# remove any local changes
shell("git checkout -- .")
shell(f"git checkout {previous_branch}", check=True)
shell(f"git branch -D --force {branch_name}", check=True)
if __name__ == "__main__":
main.main(standalone_mode=True)