Dernière activité 1749352102

Simple script to update Forgejo Server.

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