uffizzi_core 0.1.16 → 0.2.0

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 (30) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/uffizzi_core/dependency_injection_concern.rb +1 -1
  3. data/app/forms/uffizzi_core/api/cli/v1/deployment/create_form.rb +1 -0
  4. data/app/forms/uffizzi_core/api/cli/v1/template/create_form.rb +2 -0
  5. data/app/serializers/uffizzi_core/api/cli/v1/projects/deployment_serializer/container_serializer.rb +2 -1
  6. data/app/serializers/uffizzi_core/api/cli/v1/projects/deployments/container_serializer.rb +1 -1
  7. data/app/serializers/uffizzi_core/controller/deploy_containers/container_serializer.rb +16 -1
  8. data/app/services/uffizzi_core/compose_file/builders/container_builder_service.rb +13 -7
  9. data/app/services/uffizzi_core/compose_file/{configs_options_service.rb → parsers/configs_parser_service.rb} +1 -1
  10. data/app/services/uffizzi_core/compose_file/{continuous_preview_options_service.rb → parsers/continuous_preview_parser_service.rb} +1 -1
  11. data/app/services/uffizzi_core/compose_file/{ingress_options_service.rb → parsers/ingress_parser_service.rb} +1 -1
  12. data/app/services/uffizzi_core/compose_file/{secrets_options_service.rb → parsers/secrets_parser_service.rb} +1 -1
  13. data/app/services/uffizzi_core/compose_file/{services_options/command_service.rb → parsers/services/command_parser_service.rb} +1 -1
  14. data/app/services/uffizzi_core/compose_file/{services_options/configs_service.rb → parsers/services/configs_parser_service.rb} +1 -1
  15. data/app/services/uffizzi_core/compose_file/{services_options/deploy_service.rb → parsers/services/deploy_parser_service.rb} +1 -1
  16. data/app/services/uffizzi_core/compose_file/{services_options/entrypoint_service.rb → parsers/services/entrypoint_parser_service.rb} +1 -1
  17. data/app/services/uffizzi_core/compose_file/{services_options/env_file_service.rb → parsers/services/env_file_parser_service.rb} +1 -1
  18. data/app/services/uffizzi_core/compose_file/{services_options/environment_service.rb → parsers/services/environment_parser_service.rb} +2 -2
  19. data/app/services/uffizzi_core/compose_file/parsers/services/healthcheck_parser_service.rb +73 -0
  20. data/app/services/uffizzi_core/compose_file/{services_options/image_service.rb → parsers/services/image_parser_service.rb} +1 -1
  21. data/app/services/uffizzi_core/compose_file/{services_options/secrets_service.rb → parsers/services/secrets_parser_service.rb} +1 -1
  22. data/app/services/uffizzi_core/compose_file/{services_options_service.rb → parsers/services_parser_service.rb} +12 -10
  23. data/app/services/uffizzi_core/compose_file/{variables_service.rb → parsers/variables_parser_service.rb} +1 -1
  24. data/app/services/uffizzi_core/compose_file/template_service.rb +4 -4
  25. data/app/services/uffizzi_core/compose_file_service.rb +10 -6
  26. data/app/services/uffizzi_core/deployment_service.rb +14 -4
  27. data/config/locales/en.yml +1 -0
  28. data/db/migrate/20220419074956_add_health_check_to_containers.rb +7 -0
  29. data/lib/uffizzi_core/version.rb +1 -1
  30. metadata +18 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cfa4de16cbd2efbc1c9b12748807a9c283e206a490eaa4cf544eaee9e5a11733
4
- data.tar.gz: 8d3d6a27ed932c3760669f2397deef476b57c44ec09b783de51eca3143bb7aad
3
+ metadata.gz: a31b2584109bcdd076e1cb1254cd0f2449337f4bf23efa6b47666e43bb9e8f7b
4
+ data.tar.gz: 5c645f212bb2b5b328d2de38e6545b5b7af83095a5eccef66f38a240fade29b2
5
5
  SHA512:
6
- metadata.gz: 0db9e7b5f79bf19ac9576b516e72792b3a58ff98edccea36ef1f9a4385e214d7498d5c5dc047fb989cd1c958a8ec8be32ad39d0257ab57c8b264a6fef7b85d96
7
- data.tar.gz: a1f4c8f5a39e04357a1e9185454230b7671dffdac46f180a23310ae07f0b906912cf10fcd252fdfd1d31c7553a3074d139d504d94a916f4b2219e174771be945
6
+ metadata.gz: 2f17aee88420476b88e898523e5611c87f8151119135618f68b0a9741f7de47490fb5652ee0658d572f024f4528c62a97bd5845a2bd3173cb27860870e272135
7
+ data.tar.gz: bb6da9566c8c67ec7d178ee79f811e0a2629d50d7677b7dd981247a9089866781c28e9b447c015bec311435383cda609afcc0b69bf9e51a513e615e526da2771
@@ -10,7 +10,7 @@ module UffizziCore::DependencyInjectionConcern
10
10
  def build_parser_module
11
11
  return unless module_exists?(:github)
12
12
 
13
- module_class(:github).new
13
+ module_class(:github)
14
14
  end
15
15
 
16
16
  private
@@ -16,6 +16,7 @@ class UffizziCore::Api::Cli::V1::Deployment::CreateForm < UffizziCore::Deploymen
16
16
  :command,
17
17
  :receive_incoming_requests,
18
18
  :continuously_deploy,
19
+ { healthcheck: {} },
19
20
  { variables: [:name, :value],
20
21
  secret_variables: [:name, :value],
21
22
  repo_attributes: [
@@ -17,6 +17,8 @@ class UffizziCore::Api::Cli::V1::Template::CreateForm < UffizziCore::Template
17
17
  :receive_incoming_requests,
18
18
  :continuously_deploy,
19
19
  :service_name,
20
+ :name,
21
+ :healthcheck,
20
22
  { variables: [:name, :value],
21
23
  secret_variables: [:name, :value],
22
24
  repo_attributes: [
@@ -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
 
@@ -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)
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UffizziCore::ComposeFile::Parsers::Services::HealthcheckParserService
4
+ REQUIRED_START_COMMANDS = ['NONE', 'CMD', 'CMD-SHELL'].freeze
5
+
6
+ class << self
7
+ def parse(healthcheck_data)
8
+ return {} if healthcheck_data.blank?
9
+
10
+ command = parse_command(healthcheck_data)
11
+
12
+ {
13
+ test: command,
14
+ interval: parse_time(healthcheck_data['interval']),
15
+ timeout: parse_time(healthcheck_data['timeout']),
16
+ retries: parse_retries(healthcheck_data['retries']),
17
+ start_period: parse_time(healthcheck_data['start_period']),
18
+ disable: parse_disable_option(healthcheck_data['disable'], command),
19
+ }
20
+ end
21
+
22
+ private
23
+
24
+ def parse_command(healthcheck_data)
25
+ command = healthcheck_data['test']
26
+ raise UffizziCore::ComposeFile::ParseError, I18n.t('compose.string_or_array_error', option: :test) if command.nil?
27
+
28
+ case command
29
+ when Array
30
+ start_command = command.first
31
+ raise UffizziCore::ComposeFile::ParseError unless REQUIRED_START_COMMANDS.include?(start_command)
32
+
33
+ command
34
+ when String
35
+ command
36
+ else
37
+ raise UffizziCore::ComposeFile::ParseError, I18n.t('compose.invalid_type', option: :test)
38
+ end
39
+ end
40
+
41
+ def parse_retries(value)
42
+ raise UffizziCore::ComposeFile::ParseError, I18n.t('compose.invalid_integer', option: :retries) unless value.is_a?(Integer)
43
+ end
44
+
45
+ def parse_time(value)
46
+ tokens = {
47
+ 's' => 1,
48
+ 'm' => 60,
49
+ 'h' => (60 * 60),
50
+ 'd' => (60 * 60 * 24),
51
+ }
52
+
53
+ time_parts = value.scan(/(\d+)(\w)/).compact
54
+
55
+ time_parts.reduce(0) do |acc, part|
56
+ amount, measure = part
57
+ acc += amount.to_i * tokens[measure]
58
+
59
+ acc
60
+ rescue StandardError
61
+ raise UffizziCore::ComposeFile::ParseError, I18n.t('compose.invalid_time_interval')
62
+ end
63
+ end
64
+
65
+ def parse_disable_option(value, command)
66
+ return true if command.is_a?(Array) && command.first == 'NONE'
67
+ return false if value.nil?
68
+ return value if value.in?([true, false])
69
+
70
+ raise UffizziCore::ComposeFile::ParseError, I18n.t('compose.invalid_bool_value', field: 'disable', value: value)
71
+ end
72
+ end
73
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UffizziCore::ComposeFile::ServicesOptions::ImageService
3
+ class UffizziCore::ComposeFile::Parsers::Services::ImageParserService
4
4
  class << self
5
5
  def parse(image)
6
6
  return {} if image.blank?
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UffizziCore::ComposeFile::ServicesOptions::SecretsService
3
+ class UffizziCore::ComposeFile::Parsers::Services::SecretsParserService
4
4
  class << self
5
5
  def parse(secrets, global_secrets_data)
6
6
  return [] if secrets.nil?
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UffizziCore::ComposeFile::ServicesOptionsService
3
+ class UffizziCore::ComposeFile::Parsers::ServicesParserService
4
4
  class << self
5
5
  include UffizziCore::DependencyInjectionConcern
6
6
 
@@ -27,25 +27,27 @@ class UffizziCore::ComposeFile::ServicesOptionsService
27
27
 
28
28
  options_data[service_key] = case service_key
29
29
  when :image
30
- UffizziCore::ComposeFile::ServicesOptions::ImageService.parse(value)
30
+ UffizziCore::ComposeFile::Parsers::Services::ImageParserService.parse(value)
31
31
  when :build
32
32
  check_and_parse_build_option(value, compose_payload)
33
33
  when :env_file
34
- UffizziCore::ComposeFile::ServicesOptions::EnvFileService.parse(value)
34
+ UffizziCore::ComposeFile::Parsers::Services::EnvFileParserService.parse(value)
35
35
  when :environment
36
- UffizziCore::ComposeFile::ServicesOptions::EnvironmentService.parse(value)
36
+ UffizziCore::ComposeFile::Parsers::Services::EnvironmentParserService.parse(value)
37
37
  when :configs
38
- UffizziCore::ComposeFile::ServicesOptions::ConfigsService.parse(value, global_configs_data)
38
+ UffizziCore::ComposeFile::Parsers::Services::ConfigsParserService.parse(value, global_configs_data)
39
39
  when :secrets
40
- UffizziCore::ComposeFile::ServicesOptions::SecretsService.parse(value, global_secrets_data)
40
+ UffizziCore::ComposeFile::Parsers::Services::SecretsParserService.parse(value, global_secrets_data)
41
41
  when :deploy
42
- UffizziCore::ComposeFile::ServicesOptions::DeployService.parse(value)
42
+ UffizziCore::ComposeFile::Parsers::Services::DeployParserService.parse(value)
43
43
  when :entrypoint
44
- UffizziCore::ComposeFile::ServicesOptions::EntrypointService.parse(value)
44
+ UffizziCore::ComposeFile::Parsers::Services::EntrypointParserService.parse(value)
45
45
  when :command
46
- UffizziCore::ComposeFile::ServicesOptions::CommandService.parse(value)
46
+ UffizziCore::ComposeFile::Parsers::Services::CommandParserService.parse(value)
47
+ when :healthcheck
48
+ UffizziCore::ComposeFile::Parsers::Services::HealthcheckParserService.parse(value)
47
49
  when :'x-uffizzi-continuous-preview', :'x-uffizzi-continuous-previews'
48
- UffizziCore::ComposeFile::ContinuousPreviewOptionsService.parse(value)
50
+ UffizziCore::ComposeFile::Parsers::ContinuousPreviewParserService.parse(value)
49
51
  end
50
52
  end
51
53
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module UffizziCore::ComposeFile::VariablesService
3
+ module UffizziCore::ComposeFile::Parsers::VariablesParserService
4
4
  def parse_variable_from_string(str)
5
5
  variable_parts = str.split('=', 2)
6
6
 
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class UffizziCore::ComposeFile::TemplateService
4
- def initialize(github_form, project, user)
4
+ def initialize(cli_form, project, user)
5
5
  @project = project
6
6
  @user = user
7
- @compose_dependencies = github_form.compose_dependencies
8
- @compose_data = github_form.compose_data
9
- @compose_repositories = github_form.compose_repositories
7
+ @compose_dependencies = cli_form.compose_dependencies
8
+ @compose_data = cli_form.compose_data
9
+ @compose_repositories = cli_form.compose_repositories
10
10
  end
11
11
 
12
12
  def create_template(compose_file_form)
@@ -17,16 +17,20 @@ module UffizziCore::ComposeFileService
17
17
  def parse(compose_content, compose_payload = {})
18
18
  compose_data = load_compose_data(compose_content)
19
19
  check_config_options_format(compose_data)
20
- configs_data = UffizziCore::ComposeFile::ConfigsOptionsService.parse(compose_data['configs'])
21
- secrets_data = UffizziCore::ComposeFile::SecretsOptionsService.parse(compose_data['secrets'])
22
- containers_data = UffizziCore::ComposeFile::ServicesOptionsService.parse(compose_data['services'], configs_data, secrets_data,
23
- compose_payload)
20
+ configs_data = UffizziCore::ComposeFile::Parsers::ConfigsParserService.parse(compose_data['configs'])
21
+ secrets_data = UffizziCore::ComposeFile::Parsers::SecretsParserService.parse(compose_data['secrets'])
22
+ containers_data = UffizziCore::ComposeFile::Parsers::ServicesParserService.parse(
23
+ compose_data['services'],
24
+ configs_data,
25
+ secrets_data,
26
+ compose_payload,
27
+ )
24
28
 
25
29
  continuous_preview_option = UffizziCore::ComposeFile::ConfigOptionService.continuous_preview_option(compose_data)
26
- continuous_preview_data = UffizziCore::ComposeFile::ContinuousPreviewOptionsService.parse(continuous_preview_option)
30
+ continuous_preview_data = UffizziCore::ComposeFile::Parsers::ContinuousPreviewParserService.parse(continuous_preview_option)
27
31
 
28
32
  ingress_option = UffizziCore::ComposeFile::ConfigOptionService.ingress_option(compose_data)
29
- ingress_data = UffizziCore::ComposeFile::IngressOptionsService.parse(ingress_option, compose_data['services'])
33
+ ingress_data = UffizziCore::ComposeFile::Parsers::IngressParserService.parse(ingress_option, compose_data['services'])
30
34
 
31
35
  {
32
36
  containers: containers_data,
@@ -14,7 +14,6 @@ module UffizziCore::DeploymentService
14
14
  class << self
15
15
  def create_from_compose(compose_file, project, user)
16
16
  deployment_attributes = ActionController::Parameters.new(compose_file.template.payload)
17
-
18
17
  deployment_form = UffizziCore::Api::Cli::V1::Deployment::CreateForm.new(deployment_attributes)
19
18
  deployment_form.assign_dependences!(project, user)
20
19
  deployment_form.compose_file = compose_file
@@ -104,8 +103,9 @@ module UffizziCore::DeploymentService
104
103
  pull_request_payload = continuous_preview_payload['pull_request']
105
104
  repo_name = pull_request_payload['repository_full_name'].split('/').last
106
105
  deployment_name = name(deployment)
106
+ subdomain = "pr#{pull_request_payload['id']}-#{deployment_name}-#{repo_name}-#{project.slug}"
107
107
 
108
- "pr#{pull_request_payload['id']}-#{deployment_name}.#{repo_name}.#{project.slug}"
108
+ format_subdomain(subdomain)
109
109
  end
110
110
 
111
111
  def build_docker_continuous_preview_subdomain(deployment)
@@ -115,14 +115,17 @@ module UffizziCore::DeploymentService
115
115
  repo_name = docker_payload['image'].split('/').last.gsub('_', '-')
116
116
  image_tag = docker_payload['tag'].gsub('_', '-')
117
117
  deployment_name = name(deployment)
118
+ subdomain = "#{image_tag}-#{deployment_name}-#{repo_name}-#{project.slug}"
118
119
 
119
- "#{image_tag}-#{deployment_name}.#{repo_name}.#{project.slug}"
120
+ format_subdomain(subdomain)
120
121
  end
121
122
 
122
123
  def build_default_subdomain(deployment)
123
124
  deployment_name = name(deployment)
124
125
  slug = deployment.project.slug.to_s
125
- "#{deployment_name}.#{slug}"
126
+ subdomain = "#{deployment_name}-#{slug}"
127
+
128
+ format_subdomain(subdomain)
126
129
  end
127
130
 
128
131
  def build_preview_url(deployment)
@@ -293,5 +296,12 @@ module UffizziCore::DeploymentService
293
296
  container.variables.push(*envs)
294
297
  end
295
298
  end
299
+
300
+ def format_subdomain(full_subdomain_name)
301
+ subdomain_length_limit = Settings.deployment.subdomain.length_limit
302
+ return full_subdomain_name if full_subdomain_name.length <= subdomain_length_limit
303
+
304
+ full_subdomain_name.slice(0, subdomain_length_limit)
305
+ end
296
306
  end
297
307
  end
@@ -57,6 +57,7 @@ en:
57
57
  continuous_preview_in_service_level: The option '%{option}' is not supported for service-level. Use 'x-uffizzi-continuous-preview' instead
58
58
  file_already_exists: A compose file already exists for this project. Run 'uffizzi compose update' to update this file or 'uffizzi compose rm' to remove it. For more options, see 'uffizzi compose --help'
59
59
  invalid_healthcheck_command: "Service '%{name}' defines an invalid healthcheck: when 'test' is a list the first item must be either NONE, CMD or CMD-SHELL"
60
+ invalid_time_interval: The time interval should be in the following format '{hours}h{minutes}m{seconds}s'. At least one value must be present.
60
61
  string_or_array_error: "'%{option}' contains an invalid type, it should be a string, or an array"
61
62
  not_implemented: "'%{option}' option is not implemented"
62
63
  infinite_recursion: "Found infinite recursion for key '%{key}'"
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddHealthCheckToContainers < ActiveRecord::Migration[6.1]
4
+ def change
5
+ add_column :uffizzi_core_containers, :healthcheck, :jsonb
6
+ end
7
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UffizziCore
4
- VERSION = '0.1.16'
4
+ VERSION = '0.2.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uffizzi_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.16
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Thurman
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-06-06 00:00:00.000000000 Z
12
+ date: 2022-06-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aasm
@@ -871,25 +871,26 @@ files:
871
871
  - app/services/uffizzi_core/compose_file/builders/variables_builder_service.rb
872
872
  - app/services/uffizzi_core/compose_file/config_files_service.rb
873
873
  - app/services/uffizzi_core/compose_file/config_option_service.rb
874
- - app/services/uffizzi_core/compose_file/configs_options_service.rb
875
874
  - app/services/uffizzi_core/compose_file/container_service.rb
876
- - app/services/uffizzi_core/compose_file/continuous_preview_options_service.rb
877
875
  - app/services/uffizzi_core/compose_file/dependencies_service.rb
878
876
  - app/services/uffizzi_core/compose_file/errors_service.rb
879
877
  - app/services/uffizzi_core/compose_file/github_dependencies_service.rb
880
- - app/services/uffizzi_core/compose_file/ingress_options_service.rb
881
- - app/services/uffizzi_core/compose_file/secrets_options_service.rb
882
- - app/services/uffizzi_core/compose_file/services_options/command_service.rb
883
- - app/services/uffizzi_core/compose_file/services_options/configs_service.rb
884
- - app/services/uffizzi_core/compose_file/services_options/deploy_service.rb
885
- - app/services/uffizzi_core/compose_file/services_options/entrypoint_service.rb
886
- - app/services/uffizzi_core/compose_file/services_options/env_file_service.rb
887
- - app/services/uffizzi_core/compose_file/services_options/environment_service.rb
888
- - app/services/uffizzi_core/compose_file/services_options/image_service.rb
889
- - app/services/uffizzi_core/compose_file/services_options/secrets_service.rb
890
- - app/services/uffizzi_core/compose_file/services_options_service.rb
878
+ - app/services/uffizzi_core/compose_file/parsers/configs_parser_service.rb
879
+ - app/services/uffizzi_core/compose_file/parsers/continuous_preview_parser_service.rb
880
+ - app/services/uffizzi_core/compose_file/parsers/ingress_parser_service.rb
881
+ - app/services/uffizzi_core/compose_file/parsers/secrets_parser_service.rb
882
+ - app/services/uffizzi_core/compose_file/parsers/services/command_parser_service.rb
883
+ - app/services/uffizzi_core/compose_file/parsers/services/configs_parser_service.rb
884
+ - app/services/uffizzi_core/compose_file/parsers/services/deploy_parser_service.rb
885
+ - app/services/uffizzi_core/compose_file/parsers/services/entrypoint_parser_service.rb
886
+ - app/services/uffizzi_core/compose_file/parsers/services/env_file_parser_service.rb
887
+ - app/services/uffizzi_core/compose_file/parsers/services/environment_parser_service.rb
888
+ - app/services/uffizzi_core/compose_file/parsers/services/healthcheck_parser_service.rb
889
+ - app/services/uffizzi_core/compose_file/parsers/services/image_parser_service.rb
890
+ - app/services/uffizzi_core/compose_file/parsers/services/secrets_parser_service.rb
891
+ - app/services/uffizzi_core/compose_file/parsers/services_parser_service.rb
892
+ - app/services/uffizzi_core/compose_file/parsers/variables_parser_service.rb
891
893
  - app/services/uffizzi_core/compose_file/template_service.rb
892
- - app/services/uffizzi_core/compose_file/variables_service.rb
893
894
  - app/services/uffizzi_core/compose_file_service.rb
894
895
  - app/services/uffizzi_core/container_service.rb
895
896
  - app/services/uffizzi_core/controller_service.rb
@@ -925,6 +926,7 @@ files:
925
926
  - db/migrate/20220329123323_rename_project_secrets_to_secrets.rb
926
927
  - db/migrate/20220329124542_add_resource_to_secrets.rb
927
928
  - db/migrate/20220329143241_remove_project_ref_from_secrets.rb
929
+ - db/migrate/20220419074956_add_health_check_to_containers.rb
928
930
  - db/migrate/20220525113412_rename_name_to_uffizzi_containers.rb
929
931
  - db/seeds.rb
930
932
  - lib/tasks/uffizzi_core_tasks.rake