diff --git a/Makefile b/Makefile index 0468020..8e17806 100644 --- a/Makefile +++ b/Makefile @@ -8,4 +8,4 @@ build: start: - sudo venv/bin/waitress-serve --host 0.0.0.0 --port 5000 listen:app + sudo venv/bin/waitress-serve --host 0.0.0.0 --port $(PORT) listen:app diff --git a/deploy.py b/deploy.py index da904b9..ef5dc71 100644 --- a/deploy.py +++ b/deploy.py @@ -16,7 +16,10 @@ class DeployerRequest: DEPLOYERDIR = "/home/drm/live" BASE_PORT = 3001 -config = {"games": {"user": "drm", "repo": "games", "branch": "prod"}} +config = { + "deployer": ("drm", "deployer", "main"), + "games": ("drm", "games", "prod"), +} by_branch = { (user, repo, branch): {"domain": domain, "port": BASE_PORT + i} for i, (domain, (user, repo, branch)) in enumerate(config.items()) @@ -25,18 +28,22 @@ by_branch = { def handle_request(rq: DeployerRequest): if (rq.user, rq.repo, rq.branch) not in by_branch: + print( + f"{rq.user}/{rq.repo}/{rq.branch} is not registered in the deployer config" + ) + print(by_branch) return domain, port = itemgetter("domain", "port")( by_branch[(rq.user, rq.repo, rq.branch)] ) - deployment_id = int(time()) + deployment_id = str(int(time())) domain_dir = f"{DEPLOYERDIR}/{domain}" - deployment_dir = f"{domain_dir}/{deployment_id}" - os.makedirs(deployment_dir, exist_ok=True) + logs_dir = f"{domain_dir}/{deployment_id}" + os.makedirs(logs_dir, exist_ok=True) - build_log = f"{deployment_dir}/build.log" + build_log = f"{logs_dir}/build.log" subprocess.Popen( ["./deploy.sh"], @@ -47,11 +54,12 @@ def handle_request(rq: DeployerRequest): env=dict( os.environ, DOMAIN=domain, - DEPLOYMENT_DIR=deployment_dir, + DOMAIN_DIR=domain_dir, + LOGS_DIR=logs_dir, USER=rq.user, REPO=rq.repo, BRANCH=rq.branch, COMMIT_HASH=rq.commit_hash, - PORT=port, + PORT=str(port), ), ) diff --git a/deploy.sh b/deploy.sh index d658742..fedf716 100755 --- a/deploy.sh +++ b/deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -cd $DEPLOYMENT_DIR +cd $DOMAIN_DIR # Create our service configuration service_file=$DOMAIN.service @@ -10,17 +10,31 @@ After=network.target [Service] Type=simple -ExecStart=make start +ExecStart='PORT=$PORT make start' User=drm -WorkingDirectory=$DEPLOYMENT_DIR/src +WorkingDirectory=$DOMAIN_DIR/src Restart=on-failure -StandardOutput=file:$DEPLOYMENT_DIR/start.log -StandardError=file:$DEPLOYMENT_DIR/start.log +StandardOutput=file:$LOGS_DIR/start.log +StandardError=file:$LOGS_DIR/start.log [Install] WantedBy=multi-user.target " > $service_file +echo " +SHELL := /bin/bash + +status: + systemctl status deployer-$DOMAIN + +logs: + journalctl -u deployer-$DOMAIN + +stop + systemctl stop deployer-$DOMAIN + +" > Makefile + # create a folder to put the source code mkdir -p src @@ -41,7 +55,7 @@ make build cd .. service="deployer-$DOMAIN.service" -ln -sf $DEPLOYMENT_DIR/$service_file /etc/systemd/system/$service +ln -sf $DOMAIN_DIR/$service_file /etc/systemd/system/$service systemctl daemon-reload systemctl restart $service diff --git a/deploy_self.py b/deploy_self.py new file mode 100644 index 0000000..06a3971 --- /dev/null +++ b/deploy_self.py @@ -0,0 +1,10 @@ +from deploy import DeployerRequest, handle_request + +handle_request( + DeployerRequest( + user="drm", + repo="deployer", + branch="main", + commit_hash="93954f3190f7bbcbf29df2f68ebc400acb47cda9", + ) +)