first commit
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
**/__pycache__/*
|
||||||
|
venv/*
|
||||||
9
Makefile
Normal file
9
Makefile
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
build:
|
||||||
|
@:
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
venv/bin/waitress-serve --host 0.0.0.0 --port 5000 listen:app
|
||||||
|
|
||||||
|
stop:
|
||||||
|
@:
|
||||||
22
deploy.py
Normal file
22
deploy.py
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
from dataclasses import dataclass
|
||||||
|
import subprocess
|
||||||
|
import os
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class DeployerRequest:
|
||||||
|
repo: str
|
||||||
|
branch: str
|
||||||
|
commit_hash: str
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def handle_request(rq: DeployerRequest):
|
||||||
|
subprocess.run(
|
||||||
|
["./deploy.sh"],
|
||||||
|
env=dict(
|
||||||
|
os.environ,
|
||||||
|
REPO=rq.repo,
|
||||||
|
BRANCH=rq.branch,
|
||||||
|
COMMIT_HASH=rq.commit_hash,
|
||||||
|
),
|
||||||
|
)
|
||||||
39
deploy.sh
Normal file
39
deploy.sh
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
$rootdir=$(pwd)
|
||||||
|
$deploydir=$rootdir/deployments/$REPO/$BRANCH
|
||||||
|
|
||||||
|
mkdir -p $deploydir
|
||||||
|
cd $deploydir
|
||||||
|
git clone $CLONE_URL .
|
||||||
|
|
||||||
|
git fetch origin $BRANCH
|
||||||
|
git reset --hard origin/$BRANCH
|
||||||
|
git checkout $COMMIT_HASH
|
||||||
|
|
||||||
|
make build
|
||||||
|
echo "
|
||||||
|
[Unit]
|
||||||
|
Description=Deployment of $REPO/$BRANCH
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
ExecStart=make deploy
|
||||||
|
User=drm
|
||||||
|
WorkingDirectory=$deploydir
|
||||||
|
Restart=on-failure
|
||||||
|
StandardOutput=file:$deploydir/server.log
|
||||||
|
StandardError=file:$deploydir/server.log
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
" > deploy.service
|
||||||
|
systemctl daemon reload
|
||||||
|
|
||||||
|
$service="deployer-$repo-$branch.service"
|
||||||
|
ln -s $deploydir/deploy.service /etc/systemd/system/$service
|
||||||
|
systemctl stop $service
|
||||||
|
systemctl start $service
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
18
listen.py
Normal file
18
listen.py
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
from flask import Flask, request
|
||||||
|
|
||||||
|
from .deploy import handle_request, DeployerRequest
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route("/gitea", methods=["POST"])
|
||||||
|
def gitea():
|
||||||
|
data = request.get_json()
|
||||||
|
|
||||||
|
handle_request(
|
||||||
|
DeployerRequest(
|
||||||
|
repo = data["repository"]["name"],
|
||||||
|
branch = data["ref"].strip("refs/heads/"),
|
||||||
|
commit_hash = data["after"]
|
||||||
|
)
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user