models.py 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # Copyright: (c) OpenSpug Organization. https://github.com/openspug/spug
  2. # Copyright: (c) <spug.dev@gmail.com>
  3. # Released under the AGPL-3.0 License.
  4. from django.db import models
  5. from django.conf import settings
  6. from libs.mixins import ModelMixin
  7. from apps.app.models import App, Environment, Deploy
  8. from apps.account.models import User
  9. from datetime import datetime
  10. import json
  11. import os
  12. class Repository(models.Model, ModelMixin):
  13. STATUS = (
  14. ('0', '未开始'),
  15. ('1', '构建中'),
  16. ('2', '失败'),
  17. ('5', '成功'),
  18. )
  19. app = models.ForeignKey(App, on_delete=models.PROTECT)
  20. env = models.ForeignKey(Environment, on_delete=models.PROTECT)
  21. deploy = models.ForeignKey(Deploy, on_delete=models.PROTECT)
  22. version = models.CharField(max_length=50)
  23. spug_version = models.CharField(max_length=50)
  24. remarks = models.CharField(max_length=255, null=True)
  25. extra = models.TextField()
  26. status = models.CharField(max_length=2, choices=STATUS, default='0')
  27. created_at = models.DateTimeField(auto_now_add=True)
  28. created_by = models.ForeignKey(User, on_delete=models.PROTECT)
  29. @staticmethod
  30. def make_spug_version(deploy_id):
  31. return f'{deploy_id}_{datetime.now().strftime("%Y%m%d%H%M%S")}'
  32. def to_view(self):
  33. tmp = self.to_dict()
  34. tmp['extra'] = json.loads(self.extra)
  35. tmp['status_alias'] = self.get_status_display()
  36. if hasattr(self, 'app_name'):
  37. tmp['app_name'] = self.app_name
  38. if hasattr(self, 'env_name'):
  39. tmp['env_name'] = self.env_name
  40. if hasattr(self, 'created_by_user'):
  41. tmp['created_by_user'] = self.created_by_user
  42. return tmp
  43. def delete(self, using=None, keep_parents=False):
  44. super().delete(using, keep_parents)
  45. try:
  46. build_file = f'{self.spug_version}.tar.gz'
  47. os.remove(os.path.join(settings.BUILD_DIR, build_file))
  48. except FileNotFoundError:
  49. pass
  50. class Meta:
  51. db_table = 'repositories'
  52. ordering = ('-id',)