uffizzi_core 0.1.3 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/app/clients/uffizzi_core/docker_hub_client.rb +2 -0
  3. data/app/clients/uffizzi_core/github_container_registry_client/request_result.rb +7 -0
  4. data/app/clients/uffizzi_core/github_container_registry_client.rb +52 -0
  5. data/app/controllers/concerns/uffizzi_core/dependency_injection_concern.rb +2 -2
  6. data/app/controllers/uffizzi_core/api/cli/v1/account/credentials_controller.rb +45 -9
  7. data/app/controllers/uffizzi_core/api/cli/v1/projects/compose_files_controller.rb +2 -2
  8. data/app/controllers/uffizzi_core/api/cli/v1/projects/deployments/application_controller.rb +1 -1
  9. data/app/controllers/uffizzi_core/api/cli/v1/projects/deployments_controller.rb +41 -10
  10. data/app/controllers/uffizzi_core/api/cli/v1/projects/secrets_controller.rb +18 -26
  11. data/app/controllers/uffizzi_core/application_controller.rb +9 -3
  12. data/app/errors/uffizzi_core/deployment/image_pull_error.rb +10 -0
  13. data/app/forms/uffizzi_core/api/cli/v1/account/credential/check_credential_form.rb +16 -0
  14. data/app/forms/uffizzi_core/api/cli/v1/account/credential/create_form.rb +1 -1
  15. data/app/forms/uffizzi_core/api/cli/v1/compose_file/check_credentials_form.rb +2 -2
  16. data/app/forms/uffizzi_core/api/cli/v1/compose_file/cli_form.rb +1 -18
  17. data/app/forms/uffizzi_core/api/cli/v1/compose_file/template_form.rb +1 -1
  18. data/app/forms/uffizzi_core/api/cli/v1/deployment/update_form.rb +90 -0
  19. data/app/forms/uffizzi_core/api/cli/v1/project/update_form.rb +1 -31
  20. data/app/forms/uffizzi_core/api/cli/v1/secret/bulk_assign_form.rb +39 -0
  21. data/app/jobs/uffizzi_core/deployment/manage_deploy_activity_item_job.rb +22 -3
  22. data/app/lib/uffizzi_core/rbac/user_access_service.rb +12 -14
  23. data/app/models/uffizzi_core/account.rb +1 -19
  24. data/app/models/uffizzi_core/activity_item.rb +1 -6
  25. data/app/models/uffizzi_core/build.rb +1 -1
  26. data/app/models/uffizzi_core/comment.rb +1 -1
  27. data/app/models/uffizzi_core/compose_file.rb +1 -1
  28. data/app/models/uffizzi_core/config_file.rb +1 -1
  29. data/app/models/uffizzi_core/container.rb +1 -1
  30. data/app/models/uffizzi_core/container_config_file.rb +1 -1
  31. data/app/models/uffizzi_core/coupon.rb +1 -1
  32. data/app/models/uffizzi_core/credential/github_container_registry.rb +4 -0
  33. data/app/models/uffizzi_core/credential.rb +3 -6
  34. data/app/models/uffizzi_core/deployment.rb +11 -2
  35. data/app/models/uffizzi_core/event.rb +1 -1
  36. data/app/models/uffizzi_core/invitation.rb +1 -1
  37. data/app/models/uffizzi_core/membership.rb +1 -1
  38. data/app/models/uffizzi_core/payment.rb +1 -1
  39. data/app/models/uffizzi_core/price.rb +1 -1
  40. data/app/models/uffizzi_core/product.rb +1 -1
  41. data/app/models/uffizzi_core/project.rb +5 -11
  42. data/app/models/uffizzi_core/rating.rb +1 -1
  43. data/app/models/uffizzi_core/repo/github_container_registry.rb +4 -0
  44. data/app/models/uffizzi_core/repo.rb +1 -11
  45. data/app/models/uffizzi_core/role.rb +2 -2
  46. data/app/models/uffizzi_core/secret.rb +9 -0
  47. data/app/models/uffizzi_core/template.rb +1 -1
  48. data/app/models/uffizzi_core/user.rb +1 -1
  49. data/app/models/uffizzi_core/user_project.rb +1 -1
  50. data/app/policies/uffizzi_core/api/cli/v1/account/credentials_policy.rb +8 -0
  51. data/app/policies/uffizzi_core/api/cli/v1/projects/deployments_policy.rb +4 -0
  52. data/app/repositories/uffizzi_core/credential_repo.rb +17 -22
  53. data/app/repositories/uffizzi_core/deployment_repo.rb +1 -0
  54. data/app/serializers/uffizzi_core/api/cli/v1/projects/deployment_serializer/container_serializer.rb +8 -0
  55. data/app/serializers/uffizzi_core/api/cli/v1/projects/secret_serializer.rb +5 -0
  56. data/app/serializers/uffizzi_core/controller/apply_config_file/config_file_serializer.rb +5 -0
  57. data/app/serializers/uffizzi_core/controller/create_credential/credential_serializer.rb +7 -3
  58. data/app/serializers/uffizzi_core/controller/deploy_containers/container_serializer/container_config_file_serializer/config_file_serializer.rb +8 -0
  59. data/app/serializers/uffizzi_core/controller/deploy_containers/container_serializer/container_config_file_serializer.rb +7 -0
  60. data/app/serializers/uffizzi_core/controller/deploy_containers/container_serializer.rb +4 -3
  61. data/app/services/uffizzi_core/activity_item_service.rb +16 -26
  62. data/app/services/uffizzi_core/compose_file/builders/container_builder_service.rb +11 -18
  63. data/app/services/uffizzi_core/compose_file/container_service.rb +13 -9
  64. data/app/services/uffizzi_core/compose_file/dependencies_service.rb +1 -0
  65. data/app/services/uffizzi_core/compose_file/services_options_service.rb +2 -2
  66. data/app/services/uffizzi_core/compose_file_service.rb +148 -0
  67. data/app/services/uffizzi_core/container_service.rb +1 -16
  68. data/app/services/uffizzi_core/controller_service.rb +7 -1
  69. data/app/services/uffizzi_core/credential_service.rb +2 -2
  70. data/app/services/uffizzi_core/deployment_service.rb +28 -7
  71. data/app/services/uffizzi_core/github_container_registry/credential_service.rb +24 -0
  72. data/app/services/uffizzi_core/manage_activity_items_service.rb +4 -19
  73. data/app/services/uffizzi_core/repo_service.rb +2 -137
  74. data/app/services/uffizzi_core/user_generator_service.rb +78 -0
  75. data/config/locales/en.activerecord.yml +5 -0
  76. data/config/locales/en.yml +4 -1
  77. data/config/routes.rb +6 -2
  78. data/db/migrate/20220309110201_remove_secrets_from_projects.rb +7 -0
  79. data/db/migrate/20220310110150_create_project_secrets.rb +14 -0
  80. data/db/migrate/20220329123323_rename_project_secrets_to_secrets.rb +7 -0
  81. data/db/migrate/20220329124542_add_resource_to_secrets.rb +7 -0
  82. data/db/migrate/20220329143241_remove_project_ref_from_secrets.rb +7 -0
  83. data/lib/tasks/uffizzi_core_tasks.rake +5 -0
  84. data/lib/uffizzi_core/engine.rb +35 -0
  85. data/lib/uffizzi_core/version.rb +1 -1
  86. data/lib/uffizzi_core.rb +1 -30
  87. data/swagger/v1/swagger.json +220 -11
  88. metadata +45 -25
  89. data/app/clients/uffizzi_core/github/app_client.rb +0 -19
  90. data/app/clients/uffizzi_core/github/installation_client.rb +0 -11
  91. data/app/clients/uffizzi_core/github/user_client.rb +0 -51
  92. data/app/errors/uffizzi_core/compose_file/not_found_error.rb +0 -4
  93. data/app/forms/uffizzi_core/api/cli/v1/project/delete_secret_form.rb +0 -27
  94. data/app/jobs/uffizzi_core/deployment/send_github_preview_message_job.rb +0 -13
  95. data/app/services/uffizzi_core/cli/compose_file_service.rb +0 -203
  96. data/app/services/uffizzi_core/compose_file/builders/github_repo_builder_service.rb +0 -59
  97. data/app/services/uffizzi_core/compose_file/services_options/build_service.rb +0 -93
  98. data/app/services/uffizzi_core/compose_file/update_service.rb +0 -29
  99. data/app/services/uffizzi_core/github/app_service.rb +0 -51
  100. data/app/services/uffizzi_core/github/credential_service.rb +0 -124
  101. data/app/services/uffizzi_core/github/message_service.rb +0 -20
  102. data/app/services/uffizzi_core/github_service.rb +0 -28
  103. data/app/services/uffizzi_core/user_access_service.rb +0 -14
@@ -1,10 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Deployment::ManageDeployActivityItemJob < UffizziCore::ApplicationJob
4
- sidekiq_options queue: :deployments, retry: 5
4
+ sidekiq_options queue: :deployments, retry: 3
5
5
 
6
- def perform(id)
7
- activity_item = UffizziCore::ActivityItem.find(id)
6
+ sidekiq_retry_in do |count, exception|
7
+ case exception
8
+ when UffizziCore::Deployment::ImagePullError
9
+ Rails.logger.info("DEPLOYMENT_PROCESS ManageDeployActivityItemJob retry deployment_id=#{exception.deployment_id} count=#{count}")
10
+ 15.seconds
11
+ end
12
+ end
13
+
14
+ sidekiq_retries_exhausted do |msg, exception|
15
+ case exception
16
+ when UffizziCore::Deployment::ImagePullError
17
+ Rails.logger.info("DEPLOYMENT_PROCESS ManageDeployActivityItemJob exhausted #{msg.inspect} #{exception.inspect}")
18
+
19
+ activity_item_id = msg['args'].first
20
+ activity_item = UffizziCore::ActivityItem.find(activity_item_id)
21
+ UffizziCore::ActivityItemService.fail_deployment!(activity_item)
22
+ end
23
+ end
24
+
25
+ def perform(activity_item_id)
26
+ activity_item = UffizziCore::ActivityItem.find(activity_item_id)
8
27
  container = activity_item.container
9
28
 
10
29
  if container.disabled?
@@ -1,21 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module UffizziCore::Rbac::UserAccessService
4
- class << self
5
- def admin_access_to_account?(_user, _account)
6
- true
7
- end
3
+ class UffizziCore::Rbac::UserAccessService
4
+ def admin_access_to_account?(_user, _account)
5
+ true
6
+ end
8
7
 
9
- def any_access_to_account?(_user, _account)
10
- true
11
- end
8
+ def any_access_to_account?(_user, _account)
9
+ true
10
+ end
12
11
 
13
- def admin_or_developer_access_to_project?(_user, _project)
14
- true
15
- end
12
+ def admin_or_developer_access_to_project?(_user, _project)
13
+ true
14
+ end
16
15
 
17
- def any_access_to_project?(_user, _project)
18
- true
19
- end
16
+ def any_access_to_project?(_user, _project)
17
+ true
20
18
  end
21
19
  end
@@ -5,7 +5,7 @@ class UffizziCore::Account < UffizziCore::ApplicationRecord
5
5
  include UffizziCore::StateMachineConcern
6
6
  extend Enumerize
7
7
 
8
- self.table_name = UffizziCore.table_names[:accounts]
8
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:accounts]
9
9
 
10
10
  enumerize :kind, in: [:personal, :organizational], scope: true, predicates: true
11
11
  validates :kind, presence: true
@@ -68,32 +68,14 @@ class UffizziCore::Account < UffizziCore::ApplicationRecord
68
68
  update(payment_issue_at: DateTime.current)
69
69
  end
70
70
 
71
- def can_create_new_resources?
72
- return active? if Settings.features.stripe_enabled
73
-
74
- true
75
- end
76
-
77
71
  def active_projects
78
72
  projects.active
79
73
  end
80
74
 
81
- def disable_paid_deployments
82
- deployments.active.where('kind != ?', UffizziCore::Deployment.kind.free).each(&:disable!)
83
- end
84
-
85
75
  def disable_projects
86
76
  active_projects.each(&:disable_deployments)
87
77
  end
88
78
 
89
- def any_paid_projects?
90
- projects.any?(&:any_paid_deployments?)
91
- end
92
-
93
- def cards
94
- StripeService.cards(self)
95
- end
96
-
97
79
  # This method is deprecated. Don't use it.
98
80
  def user
99
81
  users.find_by(memberships: { role: UffizziCore::Membership.role.admin })
@@ -21,7 +21,7 @@
21
21
  class UffizziCore::ActivityItem < UffizziCore::ApplicationRecord
22
22
  include UffizziCore::ActivityItemRepo
23
23
 
24
- self.table_name = UffizziCore.table_names[:activity_items]
24
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:activity_items]
25
25
 
26
26
  belongs_to :deployment
27
27
  belongs_to :container
@@ -37,10 +37,6 @@ class UffizziCore::ActivityItem < UffizziCore::ApplicationRecord
37
37
  where(type: UffizziCore::ActivityItem::Github.name)
38
38
  }
39
39
 
40
- def github?
41
- type == UffizziCore::ActivityItem::Github.name
42
- end
43
-
44
40
  def docker?
45
41
  type == UffizziCore::ActivityItem::Docker.name
46
42
  end
@@ -50,7 +46,6 @@ class UffizziCore::ActivityItem < UffizziCore::ApplicationRecord
50
46
  end
51
47
 
52
48
  def full_image
53
- return "#{image}:#{branch}" if github?
54
49
  return "#{image}:#{tag}" if docker?
55
50
 
56
51
  ''
@@ -3,7 +3,7 @@
3
3
  class UffizziCore::Build < UffizziCore::ApplicationRecord
4
4
  include UffizziCore::BuildRepo
5
5
 
6
- self.table_name = UffizziCore.table_names[:builds]
6
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:builds]
7
7
 
8
8
  BUILDING = 1
9
9
  SUCCESS = 2
@@ -3,7 +3,7 @@
3
3
  class UffizziCore::Comment < UffizziCore::ApplicationRecord
4
4
  include UffizziCore::CommentRepo
5
5
 
6
- self.table_name = UffizziCore.table_names[:comments]
6
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:comments]
7
7
 
8
8
  has_ancestry(cache_depth: true)
9
9
  MAX_DEPTH_LEVEL = 1
@@ -14,7 +14,7 @@ class UffizziCore::ComposeFile < UffizziCore::ApplicationRecord
14
14
  include AASM
15
15
  extend Enumerize
16
16
 
17
- self.table_name = UffizziCore.table_names[:compose_files]
17
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:compose_files]
18
18
 
19
19
  belongs_to :project
20
20
  belongs_to :added_by, class_name: UffizziCore::User.name, foreign_key: :added_by_id, optional: true
@@ -11,7 +11,7 @@ class UffizziCore::ConfigFile < UffizziCore::ApplicationRecord
11
11
  include UffizziCore::ConfigFileRepo
12
12
  extend Enumerize
13
13
 
14
- self.table_name = UffizziCore.table_names[:config_files]
14
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:config_files]
15
15
 
16
16
  belongs_to :project
17
17
  belongs_to :added_by, class_name: UffizziCore::User.name, foreign_key: :added_by_id, optional: true
@@ -17,7 +17,7 @@ class UffizziCore::Container < UffizziCore::ApplicationRecord
17
17
  include UffizziCore::StateMachineConcern
18
18
  extend Enumerize
19
19
 
20
- self.table_name = UffizziCore.table_names[:containers]
20
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:containers]
21
21
 
22
22
  enumerize :kind, in: [:internal, :user], predicates: true
23
23
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::ContainerConfigFile < UffizziCore::ApplicationRecord
4
- self.table_name = UffizziCore.table_names[:container_config_files]
4
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:container_config_files]
5
5
 
6
6
  belongs_to :container
7
7
  belongs_to :config_file
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Coupon < UffizziCore::ApplicationRecord
4
- self.table_name = UffizziCore.table_names[:coupons]
4
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:coupons]
5
5
  end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UffizziCore::Credential::GithubContainerRegistry < UffizziCore::Credential
4
+ end
@@ -4,7 +4,7 @@ class UffizziCore::Credential < UffizziCore::ApplicationRecord
4
4
  include AASM
5
5
  include UffizziCore::CredentialRepo
6
6
 
7
- self.table_name = UffizziCore.table_names[:credentials]
7
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:credentials]
8
8
 
9
9
  belongs_to :account
10
10
 
@@ -26,8 +26,8 @@ class UffizziCore::Credential < UffizziCore::ApplicationRecord
26
26
  end
27
27
  end
28
28
 
29
- def github?
30
- type == UffizziCore::Credential::Github.name
29
+ def github_container_registry?
30
+ type == UffizziCore::Credential::GithubContainerRegistry.name
31
31
  end
32
32
 
33
33
  def docker_hub?
@@ -54,11 +54,8 @@ class UffizziCore::Credential < UffizziCore::ApplicationRecord
54
54
  containers = deployment.containers
55
55
  attributes = { continuously_deploy: UffizziCore::Container::STATE_DISABLED }
56
56
 
57
- containers.with_github_repo.update_all(attributes) if github?
58
57
  containers.with_docker_hub_repo.update_all(attributes) if docker_hub?
59
58
  end
60
59
  end
61
-
62
- UffizziCore::Credential::RemoveInstallationJob.perform_async(provider_ref) if github?
63
60
  end
64
61
  end
@@ -25,7 +25,7 @@ class UffizziCore::Deployment < UffizziCore::ApplicationRecord
25
25
  include UffizziCore::DeploymentRepo
26
26
  extend Enumerize
27
27
 
28
- self.table_name = UffizziCore.table_names[:deployments]
28
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:deployments]
29
29
 
30
30
  enumerize :kind, in: [:standard, :performance, :enterprise, :free], predicates: true, default: :standard
31
31
 
@@ -55,14 +55,19 @@ class UffizziCore::Deployment < UffizziCore::ApplicationRecord
55
55
 
56
56
  aasm(:state) do
57
57
  state :active, initial: true
58
+ state :failed
58
59
  state :disabled
59
60
 
60
61
  event :activate do
61
62
  transitions from: [:disabled], to: :active
62
63
  end
63
64
 
65
+ event :fail, after: :after_fail do
66
+ transitions from: [:active], to: :failed
67
+ end
68
+
64
69
  event :disable, after: :after_disable do
65
- transitions from: [:active], to: :disabled
70
+ transitions from: [:active, :failed], to: :disabled
66
71
  end
67
72
  end
68
73
 
@@ -70,6 +75,10 @@ class UffizziCore::Deployment < UffizziCore::ApplicationRecord
70
75
  clean
71
76
  end
72
77
 
78
+ def after_fail
79
+ active_containers.each(&:disable!)
80
+ end
81
+
73
82
  def clean
74
83
  active_containers.each(&:disable!)
75
84
  UffizziCore::Deployment::DeleteJob.perform_async(id)
@@ -4,7 +4,7 @@ class UffizziCore::Event < UffizziCore::ApplicationRecord
4
4
  include UffizziCore::EventRepo
5
5
  extend Enumerize
6
6
 
7
- self.table_name = UffizziCore.table_names[:events]
7
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:events]
8
8
 
9
9
  enumerize :state, in: [:queued, :successful, :deployed, :failed, :building, :timeout, :cancelled, :deploying], predicates: true,
10
10
  scope: true
@@ -5,7 +5,7 @@ class UffizziCore::Invitation < UffizziCore::ApplicationRecord
5
5
  include UffizziCore::StateMachineConcern
6
6
  extend Enumerize
7
7
 
8
- self.table_name = UffizziCore.table_names[:invitations]
8
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:invitations]
9
9
 
10
10
  enumerize :role, in: [:admin, :developer, :viewer], predicates: true
11
11
 
@@ -4,7 +4,7 @@ class UffizziCore::Membership < UffizziCore::ApplicationRecord
4
4
  include UffizziCore::MembershipRepo
5
5
  extend Enumerize
6
6
 
7
- self.table_name = UffizziCore.table_names[:memberships]
7
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:memberships]
8
8
 
9
9
  enumerize :role, in: [:admin, :developer, :viewer], predicates: true
10
10
  validates :role, presence: true
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Payment < UffizziCore::ApplicationRecord
4
- self.table_name = UffizziCore.table_names[:payments]
4
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:payments]
5
5
 
6
6
  belongs_to :account
7
7
 
@@ -3,7 +3,7 @@
3
3
  class UffizziCore::Price < UffizziCore::ApplicationRecord
4
4
  include UffizziCore::PriceRepo
5
5
 
6
- self.table_name = UffizziCore.table_names[:prices]
6
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:prices]
7
7
 
8
8
  belongs_to :product
9
9
  end
@@ -3,7 +3,7 @@
3
3
  class UffizziCore::Product < UffizziCore::ApplicationRecord
4
4
  include UffizziCore::ProductRepo
5
5
 
6
- self.table_name = UffizziCore.table_names[:products]
6
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:products]
7
7
 
8
8
  has_one :price, dependent: :destroy
9
9
 
@@ -8,7 +8,7 @@ class UffizziCore::Project < UffizziCore::ApplicationRecord
8
8
  include UffizziCore::StateMachineConcern
9
9
  include UffizziCore::ProjectRepo
10
10
 
11
- self.table_name = UffizziCore.table_names[:projects]
11
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:projects]
12
12
 
13
13
  belongs_to :account
14
14
 
@@ -21,9 +21,9 @@ class UffizziCore::Project < UffizziCore::ApplicationRecord
21
21
  has_many :templates, dependent: :destroy
22
22
  has_many :credentials, through: :account
23
23
  has_many :compose_files, dependent: :destroy
24
+ has_many :secrets, dependent: :destroy, as: :resource
24
25
 
25
26
  validates :name, presence: true, uniqueness: { scope: :account }
26
- validates :secrets, 'uffizzi_core/environment_variable_list': true, allow_nil: true
27
27
 
28
28
  aasm(:state) do
29
29
  state :active, initial: true
@@ -38,14 +38,6 @@ class UffizziCore::Project < UffizziCore::ApplicationRecord
38
38
  end
39
39
  end
40
40
 
41
- def any_paid_deployments?
42
- !all_deployments_free?
43
- end
44
-
45
- def all_deployments_free?
46
- active_deployments.all?(&:free?)
47
- end
48
-
49
41
  def after_disable
50
42
  update(name: "#{name} deleted #{DateTime.current.strftime('%H:%M:%S-%m%d%Y')}")
51
43
  update(slug: "#{slug} deleted #{DateTime.current.strftime('%H:%M:%S-%m%d%Y')}")
@@ -57,7 +49,9 @@ class UffizziCore::Project < UffizziCore::ApplicationRecord
57
49
  end
58
50
 
59
51
  def disable_deployments
60
- active_deployments.each(&:disable!)
52
+ active_deployments.each do |deployment|
53
+ UffizziCore::DeploymentService.disable!(deployment)
54
+ end
61
55
  end
62
56
 
63
57
  def compose_file
@@ -3,7 +3,7 @@
3
3
  class UffizziCore::Rating < UffizziCore::ApplicationRecord
4
4
  include AASM
5
5
 
6
- self.table_name = UffizziCore.table_names[:ratings]
6
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:ratings]
7
7
 
8
8
  aasm(:state) do
9
9
  state :active, initial: true
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UffizziCore::Repo::GithubContainerRegistry < UffizziCore::Repo
4
+ end
@@ -4,7 +4,7 @@ class UffizziCore::Repo < UffizziCore::ApplicationRecord
4
4
  extend Enumerize
5
5
  include UffizziCore::RepoRepo
6
6
 
7
- self.table_name = UffizziCore.table_names[:repos]
7
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:repos]
8
8
 
9
9
  enumerize :kind, in: [:buildpacks18, :dockerfile, :dotnet, :gatsby, :barestatic], predicates: true
10
10
 
@@ -15,10 +15,6 @@ class UffizziCore::Repo < UffizziCore::ApplicationRecord
15
15
  validates :dockerfile_path, presence: true, if: :dockerfile?
16
16
  validates :delete_preview_after, numericality: { greater_than: 0, only_integer: true }, allow_nil: true
17
17
 
18
- def github?
19
- type == UffizziCore::Repo::Github.name
20
- end
21
-
22
18
  def docker_hub?
23
19
  type == UffizziCore::Repo::DockerHub.name
24
20
  end
@@ -30,10 +26,4 @@ class UffizziCore::Repo < UffizziCore::ApplicationRecord
30
26
  def google?
31
27
  type == UffizziCore::Repo::Google.name
32
28
  end
33
-
34
- def url
35
- return unless github?
36
-
37
- ['https://github.com', namespace, name].join('/')
38
- end
39
29
  end
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Role < UffizziCore::ApplicationRecord
4
- self.table_name = UffizziCore.table_names[:roles]
4
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:roles]
5
5
 
6
- has_and_belongs_to_many :users, join_table: UffizziCore.table_names[:users_roles]
6
+ has_and_belongs_to_many :users, join_table: Rails.application.config.uffizzi_core[:table_names][:users_roles]
7
7
 
8
8
  belongs_to :resource,
9
9
  polymorphic: true,
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UffizziCore::Secret < ApplicationRecord
4
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:secrets]
5
+
6
+ belongs_to :resource, polymorphic: true
7
+
8
+ validates :name, presence: true, uniqueness: { scope: :resource }
9
+ end
@@ -4,7 +4,7 @@ class UffizziCore::Template < UffizziCore::ApplicationRecord
4
4
  include UffizziCore::TemplateRepo
5
5
  extend Enumerize
6
6
 
7
- self.table_name = UffizziCore.table_names[:templates]
7
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:templates]
8
8
 
9
9
  belongs_to :added_by, class_name: UffizziCore::User.name, foreign_key: :added_by_id
10
10
  belongs_to :project, touch: true
@@ -8,7 +8,7 @@ class UffizziCore::User < ActiveRecord::Base
8
8
  include UffizziCore::UserRepo
9
9
  extend Enumerize
10
10
 
11
- self.table_name = UffizziCore.table_names[:users]
11
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:users]
12
12
 
13
13
  rolify
14
14
 
@@ -3,7 +3,7 @@
3
3
  class UffizziCore::UserProject < UffizziCore::ApplicationRecord
4
4
  extend Enumerize
5
5
 
6
- self.table_name = UffizziCore.table_names[:user_projects]
6
+ self.table_name = Rails.application.config.uffizzi_core[:table_names][:user_projects]
7
7
 
8
8
  enumerize :role, in: [:admin, :developer, :viewer], predicates: true
9
9
  validates :role, presence: true
@@ -1,10 +1,18 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Api::Cli::V1::Account::CredentialsPolicy < UffizziCore::ApplicationPolicy
4
+ def index?
5
+ context.user_access_module.admin_access_to_account?(context.user, context.account)
6
+ end
7
+
4
8
  def create?
5
9
  context.user_access_module.admin_access_to_account?(context.user, context.account)
6
10
  end
7
11
 
12
+ def check_credential?
13
+ context.user_access_module.admin_access_to_account?(context.user, context.account)
14
+ end
15
+
8
16
  def destroy?
9
17
  context.user_access_module.admin_access_to_account?(context.user, context.account)
10
18
  end
@@ -13,6 +13,10 @@ class UffizziCore::Api::Cli::V1::Projects::DeploymentsPolicy < UffizziCore::Appl
13
13
  context.user_access_module.admin_or_developer_access_to_project?(context.user, context.project)
14
14
  end
15
15
 
16
+ def update?
17
+ context.user_access_module.admin_or_developer_access_to_project?(context.user, context.project)
18
+ end
19
+
16
20
  def destroy?
17
21
  context.user_access_module.admin_or_developer_access_to_project?(context.user, context.project)
18
22
  end
@@ -4,33 +4,28 @@ module UffizziCore::CredentialRepo
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
- scope :docker_hub, -> {
8
- where(type: UffizziCore::Credential::DockerHub.name)
9
- }
7
+ scope :by_type, ->(type) { where(type: type) }
10
8
 
11
- scope :github, -> {
12
- where(type: UffizziCore::Credential::Github.name)
13
- }
9
+ scope :docker_hub, -> { by_type(UffizziCore::Credential::DockerHub.name) }
14
10
 
15
- scope :azure, -> {
16
- where(type: UffizziCore::Credential::Azure.name)
17
- }
11
+ scope :github, -> { by_type(UffizziCore::Credential::Github.name) }
18
12
 
19
- scope :google, -> {
20
- where(type: UffizziCore::Credential::Google.name)
21
- }
13
+ scope :azure, -> { by_type(UffizziCore::Credential::Azure.name) }
22
14
 
23
- scope :deployable, -> {
24
- where(type: [
25
- UffizziCore::Credential::DockerHub.name,
26
- UffizziCore::Credential::Azure.name,
27
- UffizziCore::Credential::Google.name,
28
- UffizziCore::Credential::Amazon.name,
29
- ])
30
- }
15
+ scope :google, -> { by_type(UffizziCore::Credential::Google.name) }
16
+
17
+ scope :amazon, -> { by_type(UffizziCore::Credential::Amazon.name) }
31
18
 
32
- scope :amazon, -> {
33
- where(type: UffizziCore::Credential::Amazon.name)
19
+ scope :github_container_registry, -> { by_type(UffizziCore::Credential::GithubContainerRegistry.name) }
20
+
21
+ scope :deployable, -> {
22
+ by_type([
23
+ UffizziCore::Credential::DockerHub.name,
24
+ UffizziCore::Credential::Azure.name,
25
+ UffizziCore::Credential::Google.name,
26
+ UffizziCore::Credential::Amazon.name,
27
+ UffizziCore::Credential::GithubContainerRegistry.name,
28
+ ])
34
29
  }
35
30
  end
36
31
  end
@@ -19,5 +19,6 @@ module UffizziCore::DeploymentRepo
19
19
  scope :with_containers, ->(source, image, tag) {
20
20
  includes(containers: :repo).where(containers: { image: image, tag: tag, repos: { type: source } })
21
21
  }
22
+ scope :existed, -> { where(state: [:active, :failed]) }
22
23
  end
23
24
  end
@@ -20,4 +20,12 @@ class UffizziCore::Api::Cli::V1::Projects::DeploymentSerializer::ContainerSerial
20
20
  :repo_id,
21
21
  :continuously_deploy,
22
22
  :receive_incoming_requests
23
+
24
+ def secret_variables
25
+ return unless object.secret_variables.present?
26
+
27
+ object.secret_variables.map do |var|
28
+ { name: var['name'], value: anonymize(var['value']) }
29
+ end
30
+ end
23
31
  end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UffizziCore::Api::Cli::V1::Projects::SecretSerializer < UffizziCore::BaseSerializer
4
+ attributes :name, :created_at, :updated_at
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UffizziCore::Controller::ApplyConfigFile::ConfigFileSerializer < UffizziCore::BaseSerializer
4
+ attributes :id, :filename, :kind, :payload
5
+ end
@@ -10,8 +10,12 @@ class UffizziCore::Controller::CreateCredential::CredentialSerializer < UffizziC
10
10
  end
11
11
 
12
12
  def password
13
- return UffizziCore::Amazon::CredentialService.access_token(object) if object.amazon?
14
-
15
- object.password
13
+ if object.amazon?
14
+ UffizziCore::Amazon::CredentialService.access_token(object)
15
+ elsif object.github_container_registry?
16
+ UffizziCore::GithubContainerRegistry::CredentialService.access_token(object, instance_options[:image])
17
+ else
18
+ object.password
19
+ end
16
20
  end
17
21
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Metrics/LineLength
4
+ class UffizziCore::Controller::DeployContainers::ContainerSerializer::ContainerConfigFileSerializer::ConfigFileSerializer < UffizziCore::BaseSerializer
5
+ # rubocop:enable Metrics/LineLength
6
+
7
+ attributes :id, :filename, :kind, :payload
8
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UffizziCore::Controller::DeployContainers::ContainerSerializer::ContainerConfigFileSerializer < UffizziCore::BaseSerializer
4
+ attributes :mount_path
5
+
6
+ belongs_to :config_file
7
+ end