1
0
mirror of https://github.com/IEEE-SB-Passau/pelican-deployment-system.git synced 2017-09-06 16:35:38 +02:00
Files
pelican-deployment-system/app.py

83 lines
3.2 KiB
Python
Raw Normal View History

2016-06-17 01:26:56 +02:00
Copyright 2016 Peter Dahlberg
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
2016-06-12 00:22:17 +02:00
#! /usr/bin/env python3
from pelican_deploy import DeploymentRunner
2016-06-13 10:27:18 +02:00
from apscheduler.schedulers.background import BackgroundScheduler
from importlib.machinery import SourceFileLoader
2016-06-13 16:05:22 +02:00
from operator import methodcaller
from bottle import run, default_app
2016-06-13 23:10:52 +02:00
from wsgiref.simple_server import make_server
2016-06-12 04:17:54 +02:00
import pelican_deploy.webhookbottle
2016-06-15 00:15:11 +02:00
import pelican_deploy.statusbottle
2016-06-12 00:22:17 +02:00
import logging
2016-06-13 23:10:52 +02:00
import atexit
import sys
2016-06-12 00:22:17 +02:00
def init_app(configpath):
2016-06-13 10:27:18 +02:00
config = SourceFileLoader("config", configpath).load_module()
2016-06-13 10:27:18 +02:00
runners = {name: DeploymentRunner(name, conf)
2016-06-13 23:10:52 +02:00
for name, conf in config.RUNNERS.items()}
2016-06-13 10:27:18 +02:00
2016-06-13 23:10:52 +02:00
for r in runners.values():
atexit.register(r.shutdown) # finally, wait for builds to finish
for r in runners.values():
atexit.register(r.try_abort_build) # then try to abort running builds
schedulers = {r: BackgroundScheduler(daemon=True) for r in runners}
2016-06-13 16:05:22 +02:00
for s in schedulers.values():
s.start()
atexit.register(s.shutdown, wait=False) # first stop the schedulers
2016-06-13 10:27:18 +02:00
2016-06-13 23:10:52 +02:00
atexit.register(print,
"<><><><><><><><><><><><><><><><><><><><><><><><><>\n",
">>>>> Shutting down gracefully, please wait! <<<<<\n",
"<><><><><><><><><><><><><><><><><><><><><><><><><>",
file=sys.stderr, sep="")
2016-06-13 10:27:18 +02:00
2016-06-13 23:10:52 +02:00
for i, (rname, trigger) in enumerate(config.SCHEDULED_BUILD_JOBS):
schedulers[rname].add_job(runners[rname].build,
trigger=trigger,
name="{} ({})".format(rname, i),
id="{}_{}".format(rname, i),
max_instances=1,
kwargs={"wait": True,
"ignore_pull_error": True})
2016-06-13 10:27:18 +02:00
2016-06-12 04:17:54 +02:00
pelican_deploy.webhookbottle.set_runners(**runners)
2016-06-13 10:27:18 +02:00
pelican_deploy.webhookbottle.set_github_secret(config.GITHUB_SECRET)
2016-06-13 16:05:22 +02:00
default_app().mount("/hooks/", pelican_deploy.webhookbottle.app)
2016-06-15 00:15:11 +02:00
pelican_deploy.statusbottle.set_auth_basic_fn(getattr(config,
2016-06-16 23:42:28 +02:00
"STATUS_AUTH_BASIC_FN", None))
2016-06-15 00:15:11 +02:00
pelican_deploy.statusbottle.set_runners(**runners)
2016-06-16 23:56:17 +02:00
pelican_deploy.statusbottle.set_schedulers(**schedulers)
2016-06-15 00:15:11 +02:00
default_app().mount("/status/", pelican_deploy.statusbottle.app)
return default_app()
if __name__ == "__main__":
if (len(sys.argv) != 4):
print("Usage: {} <configfile> <host> <port>".format(sys.argv[0]))
sys.exit(1)
_, configpath, host, port = sys.argv
app = init_app(configpath)
2016-06-17 00:07:53 +02:00
run(app=app, host=host, port=port, server="waitress")