example / .github /tools /deploy_to_space.py
Ray Chen
new: --deployer to use different space in dev mode
2c54808
import argparse
import subprocess
import sys
from config import DEV_SPACE_CONFIG, PRODUCTION_SPACE_CONFIG
from model import Space
def force_push_to_remote(space: Space, username: str, token: str, branch_name: str):
proc = subprocess.run(
[
"git",
"push",
"--force",
f"https://{username}:{token}@huggingface.co/spaces/{space.owner}/{space.name}",
f"{branch_name}:main",
],
capture_output=True,
)
if proc.returncode == 0:
# NOTE: `git push` output always goes to stderr
results = proc.stderr.decode("utf-8")
return results
print(f"Failed to push remote: {proc.stderr.decode('utf-8')}")
return None
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Deploy to Hugging Face spaces.")
parser.add_argument("--branch_name", required=True)
parser.add_argument("--username", required=True)
parser.add_argument("--user_token", required=True)
parser.add_argument("--mode", required=True, choices=["prod", "dev"])
parser.add_argument(
"--deployer",
help="The actor in Github Actions, it used to choose space config in dev mode.",
)
args = parser.parse_args()
try:
if args.mode == "prod":
space = Space(PRODUCTION_SPACE_CONFIG["production"])
elif args.mode == "dev":
space_config = DEV_SPACE_CONFIG.get(
args.deployer, DEV_SPACE_CONFIG["default"]
)
space = Space(space_config)
except Exception:
print("Error: The space is not set correctly!")
sys.exit(1)
push_result = force_push_to_remote(
space, args.username, args.user_token, args.branch_name
)
if not push_result:
sys.exit(1)
print(push_result)
sys.exit(0)