app.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import sys
  2. import json
  3. import flask
  4. import brew
  5. import lib.db as db
  6. import lib.periodic as periodic
  7. import lib.utils as utils
  8. app = flask.Flask('stackbrew')
  9. config = None
  10. with open('./config.json') as config_file:
  11. config = json.load(config_file)
  12. data = db.DbManager(config['db_url'], debug=config['debug'])
  13. history = utils.load_history()
  14. brew.logger = app.logger
  15. brew.set_loglevel('DEBUG' if config['debug'] else 'INFO')
  16. @app.route('/')
  17. def home():
  18. return utils.resp(app, 'stackbrew')
  19. @app.route('/summary')
  20. @app.route('/status')
  21. def latest_summary():
  22. result = data.latest_status()
  23. return utils.resp(app, result)
  24. @app.route('/summary/<int:id>')
  25. def get_summary(id):
  26. result = data.get_summary(id)
  27. return utils.resp(app, result)
  28. @app.route('/success/<repo_name>')
  29. def latest_success(repo_name):
  30. tag = flask.request.args.get('tag', None)
  31. result = data.get_latest_successful(repo_name, tag)
  32. return utils.resp(app, result)
  33. if config['debug']:
  34. @app.route('/build/force', methods=['POST'])
  35. def force_build():
  36. build_task()
  37. return utils.resp(app, 'OK')
  38. def build_task():
  39. summary = data.new_summary(config['repos_folder'])
  40. library = brew.StackbrewLibrary(config['library_repo'])
  41. builder = brew.LocalBuilder(
  42. library=library, namespaces=config['namespaces'],
  43. repo_cache=config['repos_folder']
  44. )
  45. builder.build_repo_list()
  46. builder.history = history
  47. builder.build_all(callback=summary.handle_build_result)
  48. utils.save_history(builder.history)
  49. if config['push']:
  50. builder.push_all()
  51. try:
  52. periodic.init_task(build_task, config['build_interval'],
  53. logger=app.logger)
  54. app.logger.info('Periodic build task initiated.')
  55. except RuntimeError:
  56. app.logger.warning('Periodic build task already locked.')
  57. app.run(
  58. host=config.get('host', '127.0.0.1'),
  59. port=config.get('port', 5000),
  60. debug=config['debug']
  61. )