| import os |
| import time |
| import subprocess |
| import datetime |
|
|
| BACKUP_REPO = os.environ.get("BACKUP_REPO") |
| HF_TOKEN = os.environ.get("HF_TOKEN") |
|
|
| def run_backup(): |
| env = os.environ.copy() |
| env["HF_HOME"] = "/tmp/hf_cache" |
| env["XDG_CACHE_HOME"] = "/tmp/xdg_cache" |
| env["TMPDIR"] = "/tmp" |
| env["HF_TOKEN"] = HF_TOKEN |
|
|
| os.makedirs(env["HF_HOME"], exist_ok=True) |
| os.makedirs(env["XDG_CACHE_HOME"], exist_ok=True) |
| os.makedirs(env["TMPDIR"], exist_ok=True) |
|
|
| local_path = "/home/vscode/workspace" |
|
|
| |
| print("[Backup] Deleting old files...") |
| cmd = [ |
| "hf", "repo-files", "delete", BACKUP_REPO, "workspace/", |
| "--repo-type", "dataset", |
| ] |
| process = subprocess.Popen( |
| cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, |
| env=env, text=True, cwd="/tmp" |
| ) |
| for line in iter(process.stdout.readline, ""): |
| print("[Backup]", line.strip()) |
| process.wait() |
|
|
| |
| print("[Backup] Uploading workspace...") |
| cmd = [ |
| "hf", "upload", BACKUP_REPO, local_path, "workspace/", |
| "--repo-type", "dataset", |
| ] |
| process = subprocess.Popen( |
| cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, |
| env=env, text=True, cwd="/tmp" |
| ) |
| for line in iter(process.stdout.readline, ""): |
| print("[Backup]", line.strip()) |
| process.wait() |
|
|
| print("[Backup] Completed at", datetime.datetime.utcnow().isoformat(), "UTC") |
|
|
| if __name__ == "__main__": |
| if not BACKUP_REPO or not HF_TOKEN: |
| print("[Backup] BACKUP_REPO or HF_TOKEN not set! Please set it in your Spaces secrets to use the Backup Service.") |
| exit(0) |
|
|
| while True: |
| print("[Backup] Backup started.") |
| try: |
| run_backup() |
| except Exception as e: |
| print("[Backup] Failed:", e) |
| time.sleep(45 * 60) |