app.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import sys
  2. import json
  3. import flask
  4. sys.path.append('./lib')
  5. import brew
  6. import db
  7. import periodic
  8. import utils
  9. app = flask.Flask('stackbrew')
  10. config = None
  11. with open('./config.json') as config_file:
  12. config = json.load(config_file)
  13. data = db.DbManager(config['db_url'], debug=config['debug'])
  14. @app.route('/')
  15. def home():
  16. return utils.resp(app, 'stackbrew')
  17. @app.route('/summary')
  18. @app.route('/status')
  19. def latest_summary():
  20. result = data.latest_status()
  21. return utils.resp(app, result)
  22. @app.route('/summary/<int:id>')
  23. def get_summary(id):
  24. result = data.get_summary(id)
  25. return utils.resp(app, result)
  26. @app.route('/success/<repo_name>')
  27. def latest_success(repo_name):
  28. tag = flask.request.args.get('tag', None)
  29. result = data.get_latest_successful(repo_name, tag)
  30. return utils.resp(app, result)
  31. if config['debug']:
  32. @app.route('/build/force', methods=['POST'])
  33. def force_build():
  34. build_task()
  35. def build_task():
  36. summary = brew.build_library(
  37. config['library_repo'], namespace='stackbrew',
  38. debug=config['debug'], push=config['push'], prefill=False,
  39. repos_folder=config['repos_folder'], logger=app.logger
  40. )
  41. data.insert_summary(summary)
  42. try:
  43. periodic.init_task(build_task, config['build_interval'],
  44. logger=app.logger)
  45. app.logger.info('Periodic build task initiated.')
  46. except RuntimeError:
  47. app.logger.warning('Periodic build task already locked.')
  48. app.run(
  49. host=config.get('host', '127.0.0.1'),
  50. port=config.get('port', 5000),
  51. debug=config['debug']
  52. )