forked from conda-forge/admin-requests
-
Notifications
You must be signed in to change notification settings - Fork 0
/
update_repodata_patches.py
101 lines (81 loc) · 2.6 KB
/
update_repodata_patches.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import sys
import subprocess
import os
import tempfile
import github
import datetime
def _commit_to_patches(tmpdir):
subprocess.check_call(
"git reset --hard HEAD",
cwd=os.path.join(tmpdir, "conda-forge-repodata-patches-feedstock"),
shell=True,
)
subprocess.check_call(
"git commit --allow-empty -am 'resync repo data for weekly cron-job'",
cwd=os.path.join(tmpdir, "conda-forge-repodata-patches-feedstock"),
shell=True,
)
subprocess.check_call(
"git push",
cwd=os.path.join(tmpdir, "conda-forge-repodata-patches-feedstock"),
shell=True,
)
def _post_issue_with_diff(diff):
msg = """\
Hi! Our weekly job found a non-zero repodata patch diff:
<details>
```
%s
```
</details>
""" % diff
dstr = datetime.date.today().strftime("%Y-%m-%d")
gh = github.Github(os.environ['GITHUB_TOKEN'])
repo = gh.get_repo("conda-forge/conda-forge-repodata-patches-feedstock")
repo.create_issue(
"[%s] non-zero repodata patch diff" % dstr,
body=msg,
)
def update_repodata_patches(dry_run):
with tempfile.TemporaryDirectory() as tmpdir:
subprocess.check_call(
"git clone https://github.com/conda-forge/"
"conda-forge-repodata-patches-feedstock.git",
cwd=tmpdir,
shell=True,
)
subprocess.check_call(
"git remote set-url --push origin "
"https://x-access-token:${GITHUB_TOKEN}@github.com/conda-forge/"
"conda-forge-repodata-patches-feedstock.git",
cwd=os.path.join(tmpdir, "conda-forge-repodata-patches-feedstock"),
shell=True,
)
d = subprocess.check_output(
"python show_diff.py",
cwd=os.path.join(
tmpdir,
"conda-forge-repodata-patches-feedstock",
"recipe"
),
shell=True,
).decode("utf-8")
empty = True
for line in d.splitlines():
line = line.strip()
if len(line) > 0 and not line.startswith("Downloading"):
empty = False
print("diff:\n" + d, flush=True)
print("is empty:", empty, flush=True)
if len(d) > 0 and not empty:
if not dry_run:
_post_issue_with_diff(d)
_commit_to_patches(tmpdir)
if __name__ == "__main__":
if len(sys.argv) > 2:
raise RuntimeError("Need 0 or 1 arguments")
if len(sys.argv) == 2 and sys.argv[1] == '--dry-run':
dry_run = True
else:
dry_run = False
update_repodata_patches(dry_run)