-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmake-pkgs-public.py
121 lines (90 loc) · 2.89 KB
/
make-pkgs-public.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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env python
import time
import tomllib
import getpass
import requests as req
from selenium import webdriver
from selenium.webdriver.common.by import By
f = tomllib.load(open("config.toml", "rb"))
token = f["registry"]["token"]
ORG = "macos-pacman"
package_urls: list[tuple[str, str]] = []
password = getpass.getpass()
# first get a list of packages
page = 1
while True:
pkgs = req.get(f"https://api.github.com/orgs/{ORG}/packages", params={
"package_type": "container",
"visibility": "private",
"page": page,
"per_page": 100,
}, headers={
"Accept": "application/vnd.github+json",
"X-GitHub-Api-Version": "2022-11-28",
"Authorization": f"Bearer {token}"
}).json()
if len(pkgs) == 0:
break
print(f"Page {page}: {len(pkgs)} package{'' if len(pkgs) == 1 else 's'}")
for pkg in pkgs:
package_urls.append((pkg["html_url"], pkg["name"]))
page += 1
# pyright: reportUnknownMemberType=false
driver = webdriver.Safari()
# driver.maximize_window()
driver.implicitly_wait(0.3)
driver.get("https://github.com/login")
driver.find_element(by=By.ID, value="login_field").clear()
driver.find_element(by=By.ID, value="login_field").send_keys("macos-pacman-bot")
driver.find_element(by=By.ID, value="password").clear()
driver.find_element(by=By.ID, value="password").send_keys(password)
del password
time.sleep(1.0)
driver.find_element(by=By.NAME, value="commit").click()
time.sleep(2.0)
print(f"Found {len(package_urls)} packages")
import random
random.shuffle(package_urls)
successed: dict[str, bool] = dict()
i = 0
for pkg_url, pkg_name in package_urls:
i += 1
try:
# for _, pkg_name in [("", "core/haskell-appar")]:
# print("A");
print(f"[{i}/{len(package_urls)}]")
driver.get(f"https://github.com/orgs/{ORG}/packages/container/{pkg_name.replace('/', '%2F')}/settings")
time.sleep(1.0)
# print("B");
box = driver.find_element(by=By.CLASS_NAME, value="Box--danger")
assert box is not None
# print("C");
vis = box.find_element(by=By.CSS_SELECTOR, value="ul > li > p").text
if "public" in vis:
continue
# print("D");
btn = box.find_element(by=By.CSS_SELECTOR, value="summary.btn-danger")
assert btn is not None
driver.execute_script("arguments[0].scrollIntoView();", btn)
# print("E");
driver.execute_script("arguments[0].click();", btn)
time.sleep(0.3)
# print("F");
driver.execute_script("document.getElementById('visibility_public').click();", btn)
# print("G");
driver.find_element(by=By.NAME, value="verify").send_keys(pkg_name)
time.sleep(0.5)
# print("H");
clicker = "document.getElementById('visibility_public').parentElement.parentElement." + \
"parentElement.getElementsByTagName('button')[0].click();"
driver.execute_script(clicker)
time.sleep(0.5)
successed[pkg_name] = True
except KeyboardInterrupt as ki:
print("breaking")
successed[pkg_name] = False
break
except Exception as e:
print(e)
successed[pkg_name] = False
pass