File size: 2,010 Bytes
81bd72d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import sys
import time
from huggingface_hub import HfApi


def main():
    token = os.environ.get("HF_TOKEN")
    repo_id = os.environ.get("HF_SPACE_ID")
    if not token or not repo_id:
        print("Missing HF_TOKEN or HF_SPACE_ID env vars", file=sys.stderr)
        sys.exit(1)

    api = HfApi(token=token)

    base_dir = os.path.dirname(__file__)
    files_to_push = [
        (os.path.join(base_dir, "requirements.txt"), "requirements.txt"),
        (os.path.join(base_dir, "flux_pipeline.py"), "flux_pipeline.py"),
        (os.path.join(base_dir, "app.py"), "app.py"),
        (os.path.join(base_dir, "Dockerfile"), "Dockerfile"),
    ]
    for local, remote in files_to_push:
        if not os.path.exists(local):
            print(f"Missing {local}", file=sys.stderr)
            sys.exit(1)
        print(f"Uploading {remote} to {repo_id}...")
        api.upload_file(
            path_or_fileobj=local,
            path_in_repo=remote,
            repo_id=repo_id,
            repo_type="space",
        )
    print("Uploaded files. Restarting Space...")
    try:
        api.restart_space(repo_id=repo_id)
        print("Restart triggered.")
    except Exception as e:
        print(f"Warning: restart_space failed: {e}")

    # Poll runtime until RUNNING
    print("Waiting for Space to enter RUNNING stage...")
    start = time.time()
    last_stage = None
    while time.time() - start < 900:  # up to 15 minutes
        try:
            rt = api.get_space_runtime(repo_id)
            stage = getattr(rt, "stage", None)
            if stage != last_stage:
                print(f"Stage: {stage}")
                last_stage = stage
            if stage in ("RUNNING", "SUCCESS"):
                print("Space is running.")
                return
        except Exception as e:
            # transient errors during rebuild
            pass
        time.sleep(5)
    print("Timeout waiting for Space to run.", file=sys.stderr)
    sys.exit(2)


if __name__ == "__main__":
    main()