uffizzi_core 0.1.15 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/app/clients/uffizzi_core/docker_hub_client/not_authorized_error.rb +6 -0
  3. data/app/controllers/concerns/uffizzi_core/dependency_injection_concern.rb +6 -0
  4. data/app/forms/uffizzi_core/api/cli/v1/compose_file/create_form.rb +0 -2
  5. data/app/forms/uffizzi_core/api/cli/v1/deployment/create_form.rb +1 -0
  6. data/app/forms/uffizzi_core/api/cli/v1/template/create_form.rb +2 -0
  7. data/app/lib/uffizzi_core/concerns/models/account.rb +84 -0
  8. data/app/lib/uffizzi_core/concerns/models/build.rb +47 -0
  9. data/app/lib/uffizzi_core/concerns/models/comment.rb +20 -0
  10. data/app/lib/uffizzi_core/concerns/models/compose_file.rb +60 -0
  11. data/app/lib/uffizzi_core/concerns/models/config_file.rb +21 -0
  12. data/app/lib/uffizzi_core/concerns/models/container.rb +95 -0
  13. data/app/lib/uffizzi_core/concerns/models/container_config_file.rb +12 -0
  14. data/app/lib/uffizzi_core/concerns/models/coupon.rb +9 -0
  15. data/app/lib/uffizzi_core/concerns/models/deployment.rb +71 -0
  16. data/app/lib/uffizzi_core/concerns/models/event.rb +17 -0
  17. data/app/lib/uffizzi_core/concerns/models/invitation.rb +31 -0
  18. data/app/lib/uffizzi_core/concerns/models/membership.rb +20 -0
  19. data/app/lib/uffizzi_core/concerns/models/payment.rb +15 -0
  20. data/app/lib/uffizzi_core/concerns/models/price.rb +13 -0
  21. data/app/lib/uffizzi_core/concerns/models/product.rb +15 -0
  22. data/app/lib/uffizzi_core/concerns/models/project.rb +62 -0
  23. data/app/lib/uffizzi_core/concerns/models/rating.rb +24 -0
  24. data/app/lib/uffizzi_core/concerns/models/role.rb +21 -0
  25. data/app/lib/uffizzi_core/concerns/models/secret.rb +13 -0
  26. data/app/lib/uffizzi_core/concerns/models/template.rb +23 -0
  27. data/app/lib/uffizzi_core/concerns/models/user.rb +66 -0
  28. data/app/lib/uffizzi_core/concerns/models/user_project.rb +18 -0
  29. data/app/models/uffizzi_core/account.rb +1 -79
  30. data/app/models/uffizzi_core/activity_item.rb +1 -31
  31. data/app/models/uffizzi_core/build.rb +1 -35
  32. data/app/models/uffizzi_core/comment.rb +1 -12
  33. data/app/models/uffizzi_core/compose_file.rb +1 -44
  34. data/app/models/uffizzi_core/config_file.rb +1 -13
  35. data/app/models/uffizzi_core/container.rb +1 -85
  36. data/app/models/uffizzi_core/container_config_file.rb +1 -4
  37. data/app/models/uffizzi_core/coupon.rb +1 -1
  38. data/app/models/uffizzi_core/credential.rb +1 -57
  39. data/app/models/uffizzi_core/deployment.rb +1 -63
  40. data/app/models/uffizzi_core/event.rb +1 -9
  41. data/app/models/uffizzi_core/invitation.rb +1 -23
  42. data/app/models/uffizzi_core/membership.rb +1 -12
  43. data/app/models/uffizzi_core/payment.rb +1 -7
  44. data/app/models/uffizzi_core/price.rb +1 -5
  45. data/app/models/uffizzi_core/product.rb +1 -7
  46. data/app/models/uffizzi_core/project.rb +1 -54
  47. data/app/models/uffizzi_core/rating.rb +1 -16
  48. data/app/models/uffizzi_core/repo.rb +1 -25
  49. data/app/models/uffizzi_core/role.rb +1 -13
  50. data/app/models/uffizzi_core/secret.rb +1 -5
  51. data/app/models/uffizzi_core/template.rb +1 -15
  52. data/app/models/uffizzi_core/user.rb +1 -58
  53. data/app/models/uffizzi_core/user_project.rb +1 -10
  54. data/app/repositories/uffizzi_core/template_repo.rb +14 -6
  55. data/app/serializers/uffizzi_core/api/cli/v1/projects/deployment_serializer/container_serializer.rb +2 -1
  56. data/app/serializers/uffizzi_core/api/cli/v1/projects/deployments/container_serializer.rb +1 -1
  57. data/app/serializers/uffizzi_core/controller/deploy_containers/container_serializer/container_config_file_serializer/config_file_serializer.rb +2 -2
  58. data/app/serializers/uffizzi_core/controller/deploy_containers/container_serializer.rb +16 -1
  59. data/app/services/uffizzi_core/compose_file/builders/container_builder_service.rb +13 -7
  60. data/app/services/uffizzi_core/compose_file/{configs_options_service.rb → parsers/configs_parser_service.rb} +1 -1
  61. data/app/services/uffizzi_core/compose_file/{continuous_preview_options_service.rb → parsers/continuous_preview_parser_service.rb} +1 -1
  62. data/app/services/uffizzi_core/compose_file/{ingress_options_service.rb → parsers/ingress_parser_service.rb} +1 -1
  63. data/app/services/uffizzi_core/compose_file/{secrets_options_service.rb → parsers/secrets_parser_service.rb} +1 -1
  64. data/app/services/uffizzi_core/compose_file/{services_options/command_service.rb → parsers/services/command_parser_service.rb} +1 -1
  65. data/app/services/uffizzi_core/compose_file/{services_options/configs_service.rb → parsers/services/configs_parser_service.rb} +1 -1
  66. data/app/services/uffizzi_core/compose_file/{services_options/deploy_service.rb → parsers/services/deploy_parser_service.rb} +1 -1
  67. data/app/services/uffizzi_core/compose_file/{services_options/entrypoint_service.rb → parsers/services/entrypoint_parser_service.rb} +1 -1
  68. data/app/services/uffizzi_core/compose_file/{services_options/env_file_service.rb → parsers/services/env_file_parser_service.rb} +1 -1
  69. data/app/services/uffizzi_core/compose_file/{services_options/environment_service.rb → parsers/services/environment_parser_service.rb} +2 -2
  70. data/app/services/uffizzi_core/compose_file/parsers/services/healthcheck_parser_service.rb +73 -0
  71. data/app/services/uffizzi_core/compose_file/{services_options/image_service.rb → parsers/services/image_parser_service.rb} +1 -1
  72. data/app/services/uffizzi_core/compose_file/{services_options/secrets_service.rb → parsers/services/secrets_parser_service.rb} +1 -1
  73. data/app/services/uffizzi_core/compose_file/{services_options_service.rb → parsers/services_parser_service.rb} +22 -12
  74. data/app/services/uffizzi_core/compose_file/{variables_service.rb → parsers/variables_parser_service.rb} +1 -1
  75. data/app/services/uffizzi_core/compose_file/template_service.rb +4 -4
  76. data/app/services/uffizzi_core/compose_file_service.rb +10 -6
  77. data/app/services/uffizzi_core/deployment_service.rb +0 -1
  78. data/app/services/uffizzi_core/user_generator_service.rb +11 -5
  79. data/config/locales/en.yml +1 -0
  80. data/db/migrate/20220419074956_add_health_check_to_containers.rb +7 -0
  81. data/lib/tasks/uffizzi_core_tasks.rake +1 -1
  82. data/lib/uffizzi_core/version.rb +1 -1
  83. data/lib/uffizzi_core.rb +2 -0
  84. metadata +41 -16
@@ -1,27 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Invitation < UffizziCore::ApplicationRecord
4
- include AASM
5
- include UffizziCore::StateMachineConcern
6
- extend Enumerize
7
-
8
- self.table_name = UffizziCore.table_names[:invitations]
9
-
10
- enumerize :role, in: [:admin, :developer, :viewer], predicates: true
11
-
12
- belongs_to :entityable, polymorphic: true
13
- belongs_to :invited_by, class_name: UffizziCore::User.name, foreign_key: :invited_by_id
14
- belongs_to :invitee, class_name: UffizziCore::User.name, foreign_key: :invitee_id, optional: true
15
-
16
- validates :email, presence: true, 'uffizzi_core/email': true
17
- validates :token, presence: true, uniqueness: true
18
-
19
- aasm(:status) do
20
- state :pending, initial: true
21
- state :accepted
22
-
23
- event :accept do
24
- transitions from: :pending, to: :accepted
25
- end
26
- end
4
+ include UffizziCore::Concerns::Models::Invitation
27
5
  end
@@ -1,16 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Membership < UffizziCore::ApplicationRecord
4
- include UffizziCore::MembershipRepo
5
- extend Enumerize
6
-
7
- self.table_name = UffizziCore.table_names[:memberships]
8
-
9
- enumerize :role, in: [:admin, :developer, :viewer], predicates: true
10
- validates :role, presence: true
11
-
12
- belongs_to :account
13
- belongs_to :user
14
-
15
- validates :role, presence: true
4
+ include UffizziCore::Concerns::Models::Membership
16
5
  end
@@ -1,11 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Payment < UffizziCore::ApplicationRecord
4
- self.table_name = UffizziCore.table_names[:payments]
5
-
6
- belongs_to :account
7
-
8
- scope :succeeded, -> { where(status: :succeeded) }
9
- scope :pending, -> { where(status: :pending) }
10
- scope :failed, -> { where(status: :failed) }
4
+ include UffizziCore::Concerns::Models::Payment
11
5
  end
@@ -1,9 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Price < UffizziCore::ApplicationRecord
4
- include UffizziCore::PriceRepo
5
-
6
- self.table_name = UffizziCore.table_names[:prices]
7
-
8
- belongs_to :product
4
+ include UffizziCore::Concerns::Models::Price
9
5
  end
@@ -1,11 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Product < UffizziCore::ApplicationRecord
4
- include UffizziCore::ProductRepo
5
-
6
- self.table_name = UffizziCore.table_names[:products]
7
-
8
- has_one :price, dependent: :destroy
9
-
10
- UffizziCore::Product.inheritance_column = :sti
4
+ include UffizziCore::Concerns::Models::Product
11
5
  end
@@ -10,58 +10,5 @@
10
10
  # @property deployments [object<id: integer, domain: string>]
11
11
 
12
12
  class UffizziCore::Project < UffizziCore::ApplicationRecord
13
- include AASM
14
- include UffizziCore::StateMachineConcern
15
- include UffizziCore::ProjectRepo
16
-
17
- self.table_name = UffizziCore.table_names[:projects]
18
-
19
- belongs_to :account
20
-
21
- has_many :repos
22
- has_many :deployments, dependent: :destroy
23
- has_many :user_projects, dependent: :destroy
24
- has_many :users, through: :user_projects
25
- has_many :invitations, as: :entityable
26
- has_many :config_files, dependent: :destroy
27
- has_many :templates, dependent: :destroy
28
- has_many :credentials, through: :account
29
- has_many :compose_files, dependent: :destroy
30
- has_many :secrets, dependent: :destroy, as: :resource
31
-
32
- validates :name, presence: true, uniqueness: { scope: :account, message: 'Name already exists' }
33
- validates :slug, presence: true, uniqueness: { message: 'Project slug already taken' }
34
-
35
- aasm(:state) do
36
- state :active, initial: true
37
- state :disabled
38
-
39
- event :activate do
40
- transitions from: [:disabled], to: :active
41
- end
42
-
43
- event :disable, after: :after_disable do
44
- transitions from: [:active], to: :disabled
45
- end
46
- end
47
-
48
- def after_disable
49
- update(name: "#{name} deleted #{DateTime.current.strftime('%H:%M:%S-%m%d%Y')}")
50
- update(slug: "#{slug} deleted #{DateTime.current.strftime('%H:%M:%S-%m%d%Y')}")
51
- disable_deployments
52
- end
53
-
54
- def active_deployments
55
- deployments.active
56
- end
57
-
58
- def disable_deployments
59
- active_deployments.each do |deployment|
60
- UffizziCore::DeploymentService.disable!(deployment)
61
- end
62
- end
63
-
64
- def compose_file
65
- compose_files.main.first
66
- end
13
+ include UffizziCore::Concerns::Models::Project
67
14
  end
@@ -1,20 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Rating < UffizziCore::ApplicationRecord
4
- include AASM
5
-
6
- self.table_name = UffizziCore.table_names[:ratings]
7
-
8
- aasm(:state) do
9
- state :active, initial: true
10
- state :disabled
11
-
12
- event :activate do
13
- transitions from: [:disabled], to: :active
14
- end
15
-
16
- event :disable do
17
- transitions from: [:active], to: :disabled
18
- end
19
- end
4
+ include UffizziCore::Concerns::Models::Rating
20
5
  end
@@ -1,29 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Repo < UffizziCore::ApplicationRecord
4
- extend Enumerize
5
- include UffizziCore::RepoRepo
6
-
7
- self.table_name = UffizziCore.table_names[:repos]
8
-
9
- enumerize :kind, in: [:buildpacks18, :dockerfile, :dotnet, :gatsby, :barestatic], predicates: true
10
-
11
- belongs_to :project
12
- has_one :container, inverse_of: :repo, dependent: :destroy
13
- has_many :builds, dependent: :destroy
14
-
15
- validates :dockerfile_path, presence: true, if: :dockerfile?
16
- validates :delete_preview_after, numericality: { greater_than: 0, only_integer: true }, allow_nil: true
17
-
18
- def docker_hub?
19
- type == UffizziCore::Repo::DockerHub.name
20
- end
21
-
22
- def azure?
23
- type == UffizziCore::Repo::Azure.name
24
- end
25
-
26
- def google?
27
- type == UffizziCore::Repo::Google.name
28
- end
4
+ include UffizziCore::Concerns::Models::Repo
29
5
  end
@@ -1,17 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Role < UffizziCore::ApplicationRecord
4
- self.table_name = UffizziCore.table_names[:roles]
5
-
6
- has_and_belongs_to_many :users, join_table: UffizziCore.table_names[:users_roles]
7
-
8
- belongs_to :resource,
9
- polymorphic: true,
10
- optional: true
11
-
12
- validates :resource_type,
13
- inclusion: { in: Rolify.resource_types },
14
- allow_nil: true
15
-
16
- scopify
4
+ include UffizziCore::Concerns::Models::Role
17
5
  end
@@ -1,9 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Secret < ApplicationRecord
4
- self.table_name = UffizziCore.table_names[:secrets]
5
-
6
- belongs_to :resource, polymorphic: true
7
-
8
- validates :name, presence: true, uniqueness: { scope: :resource }
4
+ include UffizziCore::Concerns::Models::Secret
9
5
  end
@@ -1,19 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Template < UffizziCore::ApplicationRecord
4
- include UffizziCore::TemplateRepo
5
- extend Enumerize
6
-
7
- self.table_name = UffizziCore.table_names[:templates]
8
-
9
- belongs_to :added_by, class_name: UffizziCore::User.name, foreign_key: :added_by_id
10
- belongs_to :project, touch: true
11
- belongs_to :compose_file, optional: true
12
-
13
- has_many :deployments, dependent: :nullify
14
-
15
- enumerize :creation_source, in: [:manual, :compose_file, :system], predicates: true, scope: true
16
-
17
- validates :name, presence: true
18
- validates :name, uniqueness: { scope: :project }, if: -> { compose_file.blank? || compose_file.kind.main? }
4
+ include UffizziCore::Concerns::Models::Template
19
5
  end
@@ -1,62 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::User < ActiveRecord::Base
4
- include AASM
5
- include ActiveModel::Validations
6
- include UffizziCore::StateMachineConcern
7
- include UffizziCore::HashidConcern
8
- include UffizziCore::UserRepo
9
- extend Enumerize
10
-
11
- self.table_name = UffizziCore.table_names[:users]
12
-
13
- rolify
14
-
15
- has_secure_password
16
-
17
- validates :email, presence: true, 'uffizzi_core/email': true, uniqueness: { case_sensitive: false }
18
- validates :password, allow_nil: true, length: { minimum: 8 }, on: :update
19
-
20
- has_many :memberships, dependent: :destroy
21
- has_many :accounts, through: :memberships
22
- has_many :user_projects
23
- has_many :projects, through: :user_projects
24
-
25
- has_one_attached :avatar
26
-
27
- enumerize :creation_source, in: [:system, :online_registration, :google, :sso], predicates: true
28
-
29
- def organizational_account
30
- accounts.find_by(kind: UffizziCore::Account.kind.organizational)
31
- end
32
-
33
- def active_projects
34
- projects.active
35
- end
36
-
37
- def deployments
38
- UffizziCore::Deployment.where(project_id: active_projects)
39
- end
40
-
41
- def full_name
42
- "#{first_name} #{last_name}"
43
- end
44
-
45
- aasm(:state) do
46
- state :initial, initial: true
47
- state :active
48
- state :disabled
49
-
50
- event :activate do
51
- transitions from: [:initial, :disabled], to: :active
52
- end
53
-
54
- event :disable do
55
- transitions from: [:initial, :active], to: :disabled
56
- end
57
- end
58
-
59
- def admin_access_to_project?(project)
60
- projects.by_ids(project).by_accounts(memberships.by_role_admin.select(:account_id)).exists?
61
- end
4
+ include UffizziCore::Concerns::Models::User
62
5
  end
@@ -1,14 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::UserProject < UffizziCore::ApplicationRecord
4
- extend Enumerize
5
-
6
- self.table_name = UffizziCore.table_names[:user_projects]
7
-
8
- enumerize :role, in: [:admin, :developer, :viewer], predicates: true
9
- validates :role, presence: true
10
-
11
- belongs_to :user
12
- belongs_to :project
13
- belongs_to :invited_by, class_name: UffizziCore::User.name, foreign_key: :invited_by_id, optional: true
4
+ include UffizziCore::Concerns::Models::UserProject
14
5
  end
@@ -30,7 +30,7 @@ module UffizziCore::TemplateRepo
30
30
  ],
31
31
  }
32
32
 
33
- where('payload @> ?', general_query.to_json).where.not('payload @> ?', excluding_query.to_json)
33
+ where('templates.payload @> ?', general_query.to_json).where.not('templates.payload @> ?', excluding_query.to_json)
34
34
  }
35
35
 
36
36
  scope :by_docker_containers_with_delete_preview_when_image_tag_is_updated, ->(source, image, tag) {
@@ -47,7 +47,7 @@ module UffizziCore::TemplateRepo
47
47
  ],
48
48
  }
49
49
 
50
- where('payload @> ?', general_query.to_json)
50
+ where('templates.payload @> ?', general_query.to_json)
51
51
  }
52
52
 
53
53
  scope :by_github_containers_with_deploy_preview_when_pull_request_is_opened, ->(repository_id, branch) {
@@ -55,7 +55,7 @@ module UffizziCore::TemplateRepo
55
55
  containers_attributes: [
56
56
  {
57
57
  repo_attributes: {
58
- type: Repo::Github.name,
58
+ type: UffizziCore::Repo::Github.name,
59
59
  repository_id: repository_id,
60
60
  branch: branch,
61
61
  deploy_preview_when_pull_request_is_opened: true,
@@ -64,7 +64,7 @@ module UffizziCore::TemplateRepo
64
64
  ],
65
65
  }
66
66
 
67
- where('payload @> ?', query.to_json)
67
+ where('templates.payload @> ?', query.to_json)
68
68
  }
69
69
 
70
70
  scope :by_github_containers_with_delete_preview_when_pull_request_is_closed, ->(repository_id, branch) {
@@ -72,7 +72,7 @@ module UffizziCore::TemplateRepo
72
72
  containers_attributes: [
73
73
  {
74
74
  repo_attributes: {
75
- type: Repo::Github.name,
75
+ type: UffizziCore::Repo::Github.name,
76
76
  repository_id: repository_id,
77
77
  branch: branch,
78
78
  delete_preview_when_pull_request_is_closed: true,
@@ -81,7 +81,15 @@ module UffizziCore::TemplateRepo
81
81
  ],
82
82
  }
83
83
 
84
- where('payload @> ?', query.to_json)
84
+ where('templates.payload @> ?', query.to_json)
85
+ }
86
+
87
+ scope :by_compose_file_kind, ->(kind) {
88
+ left_joins(:compose_file).where(compose_files: { kind: kind })
89
+ }
90
+
91
+ scope :without_compose, -> {
92
+ left_joins(:compose_file).where(compose_files: { id: nil })
85
93
  }
86
94
  end
87
95
  end
@@ -19,7 +19,8 @@ class UffizziCore::Api::Cli::V1::Projects::DeploymentSerializer::ContainerSerial
19
19
  :public,
20
20
  :repo_id,
21
21
  :continuously_deploy,
22
- :receive_incoming_requests
22
+ :receive_incoming_requests,
23
+ :healthcheck
23
24
 
24
25
  def secret_variables
25
26
  return unless object.secret_variables.present?
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::Api::Cli::V1::Projects::Deployments::ContainerSerializer < UffizziCore::BaseSerializer
4
- attributes :id, :name, :memory_limit, :memory_request, :continuously_deploy, :variables, :secret_variables
4
+ attributes :id, :name, :memory_limit, :memory_request, :continuously_deploy, :variables, :secret_variables, :healthcheck
5
5
 
6
6
  has_many :container_config_files
7
7
 
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # rubocop:disable Metrics/LineLength
3
+ # rubocop:disable Layout/LineLength
4
4
  class UffizziCore::Controller::DeployContainers::ContainerSerializer::ContainerConfigFileSerializer::ConfigFileSerializer < UffizziCore::BaseSerializer
5
- # rubocop:enable Metrics/LineLength
5
+ # rubocop:enable Layout/LineLength
6
6
 
7
7
  attributes :id, :filename, :kind, :payload
8
8
  end
@@ -15,7 +15,8 @@ class UffizziCore::Controller::DeployContainers::ContainerSerializer < UffizziCo
15
15
  :target_port,
16
16
  :public,
17
17
  :controller_name,
18
- :receive_incoming_requests
18
+ :receive_incoming_requests,
19
+ :healthcheck
19
20
 
20
21
  has_many :container_config_files
21
22
 
@@ -52,4 +53,18 @@ class UffizziCore::Controller::DeployContainers::ContainerSerializer < UffizziCo
52
53
  def command
53
54
  object.command.blank? ? nil : JSON.parse(object.command)
54
55
  end
56
+
57
+ def healthcheck
58
+ return {} if object.healthcheck.nil?
59
+
60
+ command = object.healthcheck['test']
61
+ new_command = if command.is_a?(Array)
62
+ items_to_remove = ['CMD', 'CMD-SHELL']
63
+ command.select { |item| items_to_remove.exclude?(item) }
64
+ elsif object.healthcheck['test'].is_a?(String)
65
+ command.split
66
+ end
67
+
68
+ object.healthcheck.merge(test: new_command)
69
+ end
55
70
  end
@@ -17,18 +17,14 @@ class UffizziCore::ComposeFile::Builders::ContainerBuilderService
17
17
  configs_data = container_data[:configs] || []
18
18
  secrets = container_data[:secrets] || []
19
19
  container_name = container_data[:container_name]
20
- continuous_preview_container_data = container_data[:'x-uffizzi-continuous-preview'] || container_data[:'x-uffizzi-continuous-previews']
20
+ healthcheck_data = container_data[:healthcheck] || {}
21
21
 
22
22
  env_file_dependencies = UffizziCore::ComposeFile::GithubDependenciesService.env_file_dependencies_for_container(compose_dependencies,
23
23
  container_name)
24
24
  configs_dependencies = UffizziCore::ComposeFile::GithubDependenciesService.configs_dependencies_for_container(compose_dependencies,
25
25
  container_name)
26
-
27
26
  is_ingress = ingress_container?(container_name, ingress_data)
28
- repo_attributes = build_repo_attributes(container_data, image_data, build_data, credentials)
29
-
30
- repo_attributes = set_continuous_preview_attributes_to_repo(repo_attributes, continuous_preview_global_data.to_h,
31
- continuous_preview_container_data.to_h)
27
+ repo_attributes = repo_attributes(container_data, continuous_preview_global_data)
32
28
 
33
29
  {
34
30
  tag: tag(image_data, repo_attributes),
@@ -46,11 +42,20 @@ class UffizziCore::ComposeFile::Builders::ContainerBuilderService
46
42
  receive_incoming_requests: is_ingress,
47
43
  container_config_files_attributes: config_files(configs_data, configs_dependencies),
48
44
  service_name: container_name,
45
+ name: container_name,
46
+ healthcheck: healthcheck_data,
49
47
  }
50
48
  end
51
49
 
52
50
  private
53
51
 
52
+ def repo_attributes(container_data, continuous_preview_global_data)
53
+ repo_attributes = build_repo_attributes(container_data)
54
+ continuous_preview_container_data = container_data[:'x-uffizzi-continuous-preview'] || container_data[:'x-uffizzi-continuous-previews']
55
+
56
+ set_continuous_preview_attributes_to_repo(repo_attributes, continuous_preview_global_data.to_h, continuous_preview_container_data.to_h)
57
+ end
58
+
54
59
  def set_continuous_preview_attributes_to_repo(repo_attributes, global_data, container_data)
55
60
  condition_attributes = [
56
61
  :deploy_preview_when_pull_request_is_opened,
@@ -148,8 +153,9 @@ class UffizziCore::ComposeFile::Builders::ContainerBuilderService
148
153
  memory_value
149
154
  end
150
155
 
151
- def build_repo_attributes(container_data, image_data, _build_data, credentials)
156
+ def build_repo_attributes(container_data)
152
157
  repo_type = repo_type(container_data)
158
+ image_data = container_data[:image]
153
159
 
154
160
  case repo_type
155
161
  when UffizziCore::Repo::DockerHub.name
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UffizziCore::ComposeFile::ConfigsOptionsService
3
+ class UffizziCore::ComposeFile::Parsers::ConfigsParserService
4
4
  class << self
5
5
  def parse(configs_data)
6
6
  return [] if configs_data.nil?
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UffizziCore::ComposeFile::ContinuousPreviewOptionsService
3
+ class UffizziCore::ComposeFile::Parsers::ContinuousPreviewParserService
4
4
  class << self
5
5
  def parse(continuous_preview_data)
6
6
  return {} if continuous_preview_data.nil?
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UffizziCore::ComposeFile::IngressOptionsService
3
+ class UffizziCore::ComposeFile::Parsers::IngressParserService
4
4
  class << self
5
5
  def parse(ingress_data, services_data)
6
6
  raise UffizziCore::ComposeFile::ParseError, I18n.t('compose.no_ingress') if ingress_data.nil?
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UffizziCore::ComposeFile::SecretsOptionsService
3
+ class UffizziCore::ComposeFile::Parsers::SecretsParserService
4
4
  class << self
5
5
  def parse(secrets_data)
6
6
  return [] if secrets_data.nil?
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UffizziCore::ComposeFile::ServicesOptions::CommandService
3
+ class UffizziCore::ComposeFile::Parsers::Services::CommandParserService
4
4
  class << self
5
5
  def parse(command_data)
6
6
  return nil if command_data.blank?
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UffizziCore::ComposeFile::ServicesOptions::ConfigsService
3
+ class UffizziCore::ComposeFile::Parsers::Services::ConfigsParserService
4
4
  class << self
5
5
  def parse(configs, global_configs_data)
6
6
  return [] if configs.nil?
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UffizziCore::ComposeFile::ServicesOptions::DeployService
3
+ class UffizziCore::ComposeFile::Parsers::Services::DeployParserService
4
4
  class << self
5
5
  def parse(deploy_data)
6
6
  return {} if deploy_data.blank?
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UffizziCore::ComposeFile::ServicesOptions::EntrypointService
3
+ class UffizziCore::ComposeFile::Parsers::Services::EntrypointParserService
4
4
  class << self
5
5
  def parse(entrypoint_data)
6
6
  return nil if entrypoint_data.blank?
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UffizziCore::ComposeFile::ServicesOptions::EnvFileService
3
+ class UffizziCore::ComposeFile::Parsers::Services::EnvFileParserService
4
4
  class << self
5
5
  def parse(env_file)
6
6
  env_files = case env_file
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UffizziCore::ComposeFile::ServicesOptions::EnvironmentService
4
- extend UffizziCore::ComposeFile::VariablesService
3
+ class UffizziCore::ComposeFile::Parsers::Services::EnvironmentParserService
4
+ extend UffizziCore::ComposeFile::Parsers::VariablesParserService
5
5
 
6
6
  class << self
7
7
  def parse(environment)