#!/usr/bin/env python3 from __future__ import annotations import os import sys from pathlib import Path import paramiko from load_dev_env import ssh_config HOST, USER, SSH_PASSWORD = ssh_config() REPO = "/home/ubuntu/gitlab-instance-0a899031_cnomadcna" ROOT = Path(__file__).resolve().parent.parent FILES = [ "backend/ntfy_push.py", "backend/main.py", "backend/settings.py", ] def main() -> None: c = paramiko.SSHClient() c.set_missing_host_key_policy(paramiko.AutoAddPolicy()) c.connect(HOST, username=USER, password=PASSWORD, timeout=30) sftp = c.open_sftp() try: for rel in FILES: local = ROOT / rel tmp = f"/tmp/{Path(rel).name}" dest = f"{REPO}/{rel.replace(chr(92), '/')}" sftp.put(str(local), tmp) _, o, _ = c.exec_command( f"echo '{PASSWORD}' | sudo -S cp {tmp} {dest} && sudo chown ubuntu:ubuntu {dest}", timeout=60, get_pty=True, ) print(f"uploaded {rel}: {o.read().decode().strip()}") _, o, _ = c.exec_command( f"echo '{PASSWORD}' | sudo -S systemctl restart cnomadcna-api.service && systemctl is-active cnomadcna-api.service", timeout=60, get_pty=True, ) sys.stdout.buffer.write(o.read()) finally: sftp.close() c.close() if __name__ == "__main__": main()