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" # --- STEP 1: Delete old files --- 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() # --- STEP 2: Upload new backup --- 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) # 45 minutes