Files
cibuildwheel/bin/make_dependency_update_pr.py
T

83 lines
2.2 KiB
Python
Raw Normal View History

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