app.py 1.5 KB

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