Spaces:
Sleeping
Sleeping
File size: 4,726 Bytes
b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea 9ed6b0b b69a3ea | 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 122 123 124 125 126 127 128 129 130 131 132 | # βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# π PATH: sync.py (root HF Space repo)
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
import os
import sys
import tarfile
import time
from huggingface_hub import HfApi, hf_hub_download
api = HfApi()
repo_id = os.getenv("HF_DATASET")
token = os.getenv("HF_TOKEN")
FILENAME = "latest_backup.tar.gz"
BROWSER_FILENAME = "browser_backup.tar.gz"
# Folder/file yang di-SKIP dari backup utama
# - openclaw.json β auto-create setiap startup, tidak perlu backup
# - browsers β punya backup terpisah (BROWSER_FILENAME)
SKIP_NAMES = {"openclaw.json", "browsers"}
def restore():
if not repo_id or not token:
print("Skip Restore: HF_DATASET atau HF_TOKEN belum di-set.")
return
# ββ Restore 1: sessions & memory ββββββββββββββββββββββββββ
try:
print(f"Downloading {FILENAME} from {repo_id}...")
path = hf_hub_download(
repo_id=repo_id,
filename=FILENAME,
repo_type="dataset",
token=token
)
with tarfile.open(path, "r:gz") as tar:
tar.extractall(path="/root/.openclaw/")
print(f"Success: Restored from {FILENAME}")
except Exception as e:
print(f"Restore Note: {e}")
print(" β Fresh install, normal untuk deploy pertama.")
# ββ Restore 2: browser binary ββββββββββββββββββββββββββββββ
try:
print(f"Downloading {BROWSER_FILENAME} from {repo_id}...")
browser_path = hf_hub_download(
repo_id=repo_id,
filename=BROWSER_FILENAME,
repo_type="dataset",
token=token
)
with tarfile.open(browser_path, "r:gz") as tar:
tar.extractall(path="/root/.openclaw/")
print(f"Success: Restored browser from {BROWSER_FILENAME}")
except Exception as e:
print(f"Restore Note (browser): {e} β akan install fresh jika dibutuhkan.")
def backup():
if not repo_id or not token:
print("Skip Backup: HF_DATASET atau HF_TOKEN belum di-set.")
return
# ββ Backup 1: semua file/folder kecuali yang di SKIP_NAMES β
try:
base_dir = "/root/.openclaw"
print(f"Creating {FILENAME} (semua kecuali: {SKIP_NAMES})...")
with tarfile.open(FILENAME, "w:gz") as tar:
for item in os.listdir(base_dir):
if item in SKIP_NAMES:
print(f" - Skip: {item}")
continue
full_path = os.path.join(base_dir, item)
arcname = item # path relatif di dalam tar = relatif ke /root/.openclaw/
tar.add(full_path, arcname=arcname)
print(f" + Added: {full_path}")
api.upload_file(
path_or_fileobj=FILENAME,
path_in_repo=FILENAME,
repo_id=repo_id,
repo_type="dataset",
token=token
)
print(f"Backup Success β {time.strftime('%Y-%m-%d %H:%M:%S')}")
except Exception as e:
print(f"Backup Error: {e}")
# ββ Backup 2: browser binary (upload sekali saja, ~150MB) ββ
try:
browsers_dir = "/root/.openclaw/browsers"
if not os.path.exists(browsers_dir):
return
# Cek apakah sudah ada di dataset
try:
hf_hub_download(
repo_id=repo_id,
filename=BROWSER_FILENAME,
repo_type="dataset",
token=token
)
print("Browser backup sudah ada di dataset β skip upload.")
except Exception:
# Belum ada β upload sekarang
print("Uploading browser backup (first time, ~150MB)...")
with tarfile.open(BROWSER_FILENAME, "w:gz") as tar:
tar.add(browsers_dir, arcname="browsers")
api.upload_file(
path_or_fileobj=BROWSER_FILENAME,
path_in_repo=BROWSER_FILENAME,
repo_id=repo_id,
repo_type="dataset",
token=token
)
print("Browser backup uploaded.")
except Exception as e:
print(f"Backup Error (browser): {e}")
if __name__ == "__main__":
if len(sys.argv) > 1 and sys.argv[1] == "backup":
backup()
else:
restore() |