diff --git a/jekyll_clone_repo.sh b/jekyll_clone_repo.sh new file mode 100644 index 0000000..4e20cde --- /dev/null +++ b/jekyll_clone_repo.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +cloned_dir=$1 +destination_dir=$2 + +function finish { + rm -rf "$cloned_dir" +} +trap finish EXIT + +/usr/local/bin/jekyll build --source "$cloned_dir" --destination "$destination_dir" 2>&1 |& systemd-cat -t "jekyll-cloner" -p "info" diff --git a/jekyll_webhook.py b/jekyll_webhook.py new file mode 100644 index 0000000..39037be --- /dev/null +++ b/jekyll_webhook.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python + +from __future__ import print_function + +import json +import tempfile + +import git +from flask import Flask, request +import sarge +from systemd.journal import JournalHandler + +DESTINATION = "/var/www/dennogumi-test/" +REPO = "dennogumi.org" + +app = Flask(__name__) + +@app.route("/", methods=["POST"]) +def push_hook_to_server(): + + app.logger.info("New data received. Processing...") + + handler = JournalHandler() + app.logger.addHandler(handler) + + data = json.loads(request.data) + + repository = data["repository"] + if repository["name"] != REPO: + app.logger.warning("Repository not found.") + return "OK" + + repo_url = repository["url"] + temp = tempfile.mkdtemp() + app.logger.info("Cloning repository...") + git.Repo.clone_from(repo_url, temp) + + cmd = "/home/einar/bin/jekyll_clone_repo.sh {0} {1}" + cmd = sarge.shell_format(cmd, temp, DESTINATION) + app.logger.info("Deploying Jekyll...") + pid = sarge.run(cmd, async=True) + + return "OK" + +if __name__ == "__main__": + app.run()