uffizzi_core 0.1.15 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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)