Última actividad 1749352102

Simple script to update Forgejo Server.

Revisión 0e3d75739e8fd9a227a6250218646f975b521b71

forgejoupdate.py Sin formato
1# HOW TO USE THIS SCRIPT
2# download this file and run
3# python3 forgejoupdate.py
4#
5# If you use an init system to run Forgejo, you can let this script automatically restart Forgejo for you
6# (Assuming Forgejo's service name is `forgejo`)
7# By passsing the arguments `systemd` or `openrc`
8#
9# python3 forgejoupdate.py systemd
10
11from tqdm import tqdm
12import requests
13import subprocess
14import sys
15import hashlib
16import os
17import stat
18print("Checking latest version...")
19req = requests.get("https://codeberg.org/api/v1/repos/forgejo/forgejo/releases/latest").json()
20latest = req["tag_name"][1:]
21download = ""
22sha = ""
23for asset in req["assets"]:
24 if asset["name"] == f"forgejo-{latest}-linux-amd64":
25 download = asset["browser_download_url"]
26 if asset["name"] == f"forgejo-{latest}-linux-amd64.sha256":
27 sha = requests.get(asset["browser_download_url"]).content.decode().strip().split(" ")[0]
28
29print(f"Latest: {latest}")
30print(f"Download Exists: {download != ''}")
31print(f"Checksum Exists: {sha != ''}")
32
33# 5
34try:
35 current = subprocess.run(["forgejo", "-v"], stdout=subprocess.PIPE).stdout.decode().strip().split(" ")[5][:-1]
36except:
37 current = 0
38print(f"Current: {current if current != 0 else 'Not installed!'}")
39if current == latest:
40 print("No need to update.")
41 sys.exit()
42
43print("Downloading latest version...")
44
45response = requests.get(download, stream=True)
46
47total_size = int(response.headers.get("content-length", 0))
48block_size = 1024
49
50h = hashlib.sha256()
51
52with tqdm(total=total_size, unit="B", unit_scale=True, leave=False) as progress_bar:
53 with open("forgejo.part", "wb") as file:
54 for data in response.iter_content(block_size):
55 progress_bar.update(len(data))
56 file.write(data)
57 h.update(data)
58
59if sha != h.hexdigest():
60 print(f"ERROR: SHA256 doesn't match! {hex}{h.hexdigest()}")
61 os.remove("forgejo.part")
62 sys.exit(1)
63else:
64 print("Checksum verify success!")
65
66os.chmod("forgejo.part", stat.S_IXOTH | stat.S_IROTH | stat.S_IWUSR)
67
68os.rename("forgejo.part", "/usr/local/bin/forgejo")
69
70if len(sys.argv) == 2:
71 print("Restarting...")
72 if sys.argv[1] == "systemd":
73 os.system("systemctl restart forgejo")
74 elif sys.argv[1] == "openrc":
75 os.system("rc-service forgejo restart")
76