uffizzi_core 0.6.0 → 0.7.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 906801fea12b493de551c88a90e6a8fb576d76e07cca94d599387a620dcca920
4
- data.tar.gz: e42b3989f0cee2e2ca4a87c7231d477cffc426d73ba26368a5ed47a60ac2c569
3
+ metadata.gz: 25654d45dce9f26feb5a3cca55a5891bb389216e749512b2900898bec4a8da0b
4
+ data.tar.gz: cb7784c03bcffb216adc343ae30e0ef0c51e3038791da4fe0229b86179cdc8e9
5
5
  SHA512:
6
- metadata.gz: 7ccf182b08308c44d6b62c00832cefd031b34abad8b7c5eace999d6c34ec43976b5d2c577c5044bcf83299cef80776a55a9ebdd56a4dc82e12013bee47dd9582
7
- data.tar.gz: 4e6a3c3921e8d360a73eeeb615c24039b362148a9f4119f04e0bfa7f8f9cff3ab8b27ed9f5923d033d482cd668f65e669a9af60609f2b060a0ed9276b56cdee2
6
+ metadata.gz: c3b6ae9974961ae5d39e723264e6c72fa0f4dfa9f99085a6550a98af67afd6ddcbd92f98e7f815ff602bb7f6a3144d2f87ac9d61a58f228099b9dedd537ce6be
7
+ data.tar.gz: 572bcfcc9d1e3396d721a83a60c703db10c0b3848031e35b63aa26065b67ceb6fc11bb5278fd6b383e4686a5885758d45d69b0a3c3314cda4f6d93fc3a81d93b
@@ -14,7 +14,10 @@ class UffizziCore::Api::Cli::V1::Projects::DeploymentsController < UffizziCore::
14
14
  # @response [Array<Deployment>] 200 OK
15
15
  # @response 401 Not authorized
16
16
  def index
17
- respond_with deployments
17
+ search_labels = JSON.parse(q_param)
18
+ filtered_deployments = deployments.with_labels(search_labels)
19
+
20
+ respond_with filtered_deployments, each_serializer: UffizziCore::Api::Cli::V1::Projects::DeploymentsSerializer
18
21
  end
19
22
 
20
23
  # Get deployment information by id
@@ -51,7 +54,7 @@ class UffizziCore::Api::Cli::V1::Projects::DeploymentsController < UffizziCore::
51
54
  errors = check_credentials(compose_file)
52
55
  return render_errors(errors) if errors.present?
53
56
 
54
- deployment = UffizziCore::DeploymentService.create_from_compose(compose_file, resource_project, current_user)
57
+ deployment = UffizziCore::DeploymentService.create_from_compose(compose_file, resource_project, current_user, metadata_params)
55
58
 
56
59
  respond_with deployment
57
60
  end
@@ -82,8 +85,9 @@ class UffizziCore::Api::Cli::V1::Projects::DeploymentsController < UffizziCore::
82
85
  errors = check_credentials(compose_file)
83
86
  return render_errors(errors) if errors.present?
84
87
 
85
- deployment = UffizziCore::Deployment.find(params[:id])
86
- updated_deployment = UffizziCore::DeploymentService.update_from_compose(compose_file, resource_project, current_user, deployment)
88
+ deployment = deployments.find(params[:id])
89
+ updated_deployment = UffizziCore::DeploymentService.update_from_compose(compose_file, resource_project, current_user, deployment,
90
+ metadata_params)
87
91
 
88
92
  respond_with updated_deployment
89
93
  end
@@ -171,6 +175,10 @@ class UffizziCore::Api::Cli::V1::Projects::DeploymentsController < UffizziCore::
171
175
  params.permit(dependencies: [:name, :path, :source, :content])
172
176
  end
173
177
 
178
+ def metadata_params
179
+ params[:metadata]
180
+ end
181
+
174
182
  def render_invalid_file
175
183
  render json: { errors: { state: ['Invalid compose file'] } }, status: :unprocessable_entity
176
184
  end
@@ -4,6 +4,7 @@ class UffizziCore::Api::Cli::V1::Deployment::CreateForm < UffizziCore::Deploymen
4
4
  include UffizziCore::ApplicationForm
5
5
 
6
6
  permit :creation_source,
7
+ :metadata,
7
8
  containers_attributes: [
8
9
  :image,
9
10
  :service_name,
@@ -3,46 +3,47 @@
3
3
  class UffizziCore::Api::Cli::V1::Deployment::UpdateForm < UffizziCore::Deployment
4
4
  include UffizziCore::ApplicationForm
5
5
 
6
- permit containers_attributes: [
7
- :image,
8
- :service_name,
9
- :tag,
10
- :port,
11
- :public,
12
- :memory_limit,
13
- :memory_request,
14
- :entrypoint,
15
- :command,
16
- :receive_incoming_requests,
17
- :continuously_deploy,
18
- { variables: [:name, :value],
19
- secret_variables: [:name, :value],
20
- volumes: [:source, :target, :type, :read_only],
21
- repo_attributes: [
22
- :namespace,
23
- :name,
24
- :slug,
25
- :type,
26
- :description,
27
- :is_private,
28
- :repository_id,
29
- :branch,
30
- :kind,
31
- :dockerfile_path,
32
- :dockerfile_context_path,
33
- :deploy_preview_when_pull_request_is_opened,
34
- :delete_preview_when_pull_request_is_closed,
35
- :deploy_preview_when_image_tag_is_created,
36
- :delete_preview_when_image_tag_is_updated,
37
- :share_to_github,
38
- :delete_preview_after,
39
- { args: [:name, :value] },
40
- ],
41
- container_config_files_attributes: [
42
- :config_file_id,
43
- :mount_path,
44
- ] },
45
- ]
6
+ permit :metadata,
7
+ containers_attributes: [
8
+ :image,
9
+ :service_name,
10
+ :tag,
11
+ :port,
12
+ :public,
13
+ :memory_limit,
14
+ :memory_request,
15
+ :entrypoint,
16
+ :command,
17
+ :receive_incoming_requests,
18
+ :continuously_deploy,
19
+ { variables: [:name, :value],
20
+ secret_variables: [:name, :value],
21
+ volumes: [:source, :target, :type, :read_only],
22
+ repo_attributes: [
23
+ :namespace,
24
+ :name,
25
+ :slug,
26
+ :type,
27
+ :description,
28
+ :is_private,
29
+ :repository_id,
30
+ :branch,
31
+ :kind,
32
+ :dockerfile_path,
33
+ :dockerfile_context_path,
34
+ :deploy_preview_when_pull_request_is_opened,
35
+ :delete_preview_when_pull_request_is_closed,
36
+ :deploy_preview_when_image_tag_is_created,
37
+ :delete_preview_when_image_tag_is_updated,
38
+ :share_to_github,
39
+ :delete_preview_after,
40
+ { args: [:name, :value] },
41
+ ],
42
+ container_config_files_attributes: [
43
+ :config_file_id,
44
+ :mount_path,
45
+ ] },
46
+ ]
46
47
 
47
48
  validate :check_all_containers_have_unique_ports
48
49
  validate :check_exists_ingress_container
@@ -45,7 +45,7 @@ module UffizziCore::Concerns::Models::Container
45
45
  validates :command, 'uffizzi_core/image_command_args': true, allow_nil: true
46
46
  validates :tag, presence: true
47
47
 
48
- aasm :continuously_deploy, column: :continuously_deploy do
48
+ aasm :continuously_deploy, column: :continuously_deploy, namespace: :cd do
49
49
  state :disabled, initial: true
50
50
  state :enabled
51
51
  end
@@ -27,6 +27,10 @@ module UffizziCore::Concerns::Models::Credential
27
27
  event :unauthorize do
28
28
  transitions from: [:not_connected, :active], to: :unauthorized
29
29
  end
30
+
31
+ event :disconnect do
32
+ transitions from: [:active, :unauthorized], to: :not_connected
33
+ end
30
34
  end
31
35
 
32
36
  def github_container_registry?
@@ -59,7 +63,7 @@ module UffizziCore::Concerns::Models::Credential
59
63
  account.projects.find_each do |project|
60
64
  project.deployments.find_each do |deployment|
61
65
  containers = deployment.containers
62
- attributes = { continuously_deploy: UffizziCore::Container::STATE_DISABLED }
66
+ attributes = { continuously_deploy: UffizziCore::Container::STATE_CD_DISABLED }
63
67
 
64
68
  containers.with_docker_hub_repo.update_all(attributes) if docker_hub?
65
69
  end
@@ -12,5 +12,9 @@ module UffizziCore::DeploymentRepo
12
12
  scope :active_for_credential_id, ->(credential_id) {
13
13
  active.joins(project: :credentials).merge(UffizziCore::Project.active).where(credentials: { id: credential_id })
14
14
  }
15
+
16
+ scope :with_labels, ->(labels) {
17
+ where("#{UffizziCore::Deployment.table_name}.metadata @> ?", labels.to_json)
18
+ }
15
19
  end
16
20
  end
@@ -16,16 +16,13 @@ class UffizziCore::Api::Cli::V1::Projects::DeploymentSerializer < UffizziCore::B
16
16
  :image_id,
17
17
  :ingress_container_ready,
18
18
  :ingress_container_state,
19
- :creation_source
19
+ :creation_source,
20
+ :metadata
20
21
 
21
22
  has_many :containers
22
23
 
23
24
  belongs_to :deployed_by
24
25
 
25
- def deployed_by
26
- object.deployed_by
27
- end
28
-
29
26
  def containers
30
27
  object.containers.active
31
28
  end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UffizziCore::Api::Cli::V1::Projects::DeploymentsSerializer::UserSerializer < UffizziCore::BaseSerializer
4
+ type :user
5
+
6
+ attributes :email
7
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UffizziCore::Api::Cli::V1::Projects::DeploymentsSerializer < UffizziCore::BaseSerializer
4
+ type :deployment
5
+
6
+ attributes :id,
7
+ :created_at,
8
+ :updated_at,
9
+ :state,
10
+ :preview_url,
11
+ :metadata
12
+
13
+ belongs_to :deployed_by
14
+ end
@@ -5,9 +5,8 @@ class UffizziCore::ComposeFile::Parsers::Services::ImageParserService
5
5
  def parse(value)
6
6
  return {} if value.blank?
7
7
 
8
- parse_error = UffizziCore::ComposeFile::ParseError, I18n.t('compose.invalid_image_value', value: value)
9
- image_path, tag = get_image_path_and_tag(value, parse_error)
10
- raise parse_error if image_path.blank?
8
+ image_path, tag = get_image_path_and_tag(value)
9
+ raise_parse_error(value) if image_path.blank?
11
10
 
12
11
  tag = Settings.compose.default_tag if tag.blank?
13
12
 
@@ -27,7 +26,11 @@ class UffizziCore::ComposeFile::Parsers::Services::ImageParserService
27
26
 
28
27
  private
29
28
 
30
- def get_image_path_and_tag(value, parse_error)
29
+ def raise_parse_error(value)
30
+ raise UffizziCore::ComposeFile::ParseError, I18n.t('compose.invalid_image_value', value: value)
31
+ end
32
+
33
+ def get_image_path_and_tag(value)
31
34
  image_path_parts = value.downcase.split(':')
32
35
  case image_path_parts.size
33
36
  when 1
@@ -40,18 +43,18 @@ class UffizziCore::ComposeFile::Parsers::Services::ImageParserService
40
43
  elsif tag_pattern.match?(value)
41
44
  [image_path_parts[0], image_path_parts[1]]
42
45
  else
43
- raise parse_error
46
+ raise_parse_error(value)
44
47
  end
45
48
  when 3
46
49
  ["#{image_path_parts[0]}:#{image_path_parts[1]}", image_path_parts[2]]
47
50
  else
48
- raise parse_error
51
+ raise_parse_error(value)
49
52
  end
50
53
  end
51
54
 
52
55
  def url?(image_path)
53
56
  uri = URI(add_https_if_needed(image_path))
54
- uri.host.present? && uri.host =~ /\w+\.(\w+\.)*\w+/ && uri.path.present?
57
+ uri.host.present? && uri.host =~ /(localhost(:\d+)?|\w+\.(\w+\.)*\w+)/ && uri.path.present?
55
58
  rescue URI::InvalidURIError
56
59
  false
57
60
  end
@@ -20,7 +20,7 @@ class UffizziCore::ContainerService
20
20
  end
21
21
 
22
22
  def continuously_deploy_enabled?(container)
23
- container.aasm(:continuously_deploy).current_state == UffizziCore::Container::STATE_ENABLED
23
+ container.aasm(:continuously_deploy).current_state == UffizziCore::Container::STATE_CD_ENABLED
24
24
  end
25
25
 
26
26
  def valid_memory_limit?(container)
@@ -12,12 +12,13 @@ class UffizziCore::DeploymentService
12
12
  }.freeze
13
13
 
14
14
  class << self
15
- def create_from_compose(compose_file, project, user)
15
+ def create_from_compose(compose_file, project, user, metadata)
16
16
  deployment_attributes = ActionController::Parameters.new(compose_file.template.payload)
17
17
  deployment_form = UffizziCore::Api::Cli::V1::Deployment::CreateForm.new(deployment_attributes)
18
18
  deployment_form.assign_dependences!(project, user)
19
19
  deployment_form.compose_file = compose_file
20
20
  deployment_form.creation_source = UffizziCore::Deployment.creation_source.compose_file_manual
21
+ deployment_form.metadata = metadata || {}
21
22
 
22
23
  if deployment_form.save
23
24
  update_subdomain!(deployment_form)
@@ -28,22 +29,24 @@ class UffizziCore::DeploymentService
28
29
  deployment_form
29
30
  end
30
31
 
31
- def update_from_compose(compose_file, project, user, deployment)
32
+ def update_from_compose(compose_file, project, user, deployment, metadata)
32
33
  deployment_attributes = ActionController::Parameters.new(compose_file.template.payload)
33
34
 
34
35
  deployment_form = UffizziCore::Api::Cli::V1::Deployment::UpdateForm.new(deployment_attributes)
35
36
  deployment_form.assign_dependences!(project, user)
36
37
  deployment_form.compose_file = compose_file
38
+ deployment_form.metadata = metadata || {}
37
39
 
38
40
  ActiveRecord::Base.transaction do
39
41
  deployment.containers.destroy_all
40
42
  deployment.compose_file.destroy! if deployment.compose_file&.kind&.temporary?
41
-
42
- deployment.update!(
43
+ params = {
43
44
  containers: deployment_form.containers,
44
45
  compose_file_id: compose_file.id,
45
46
  creation_source: UffizziCore::Deployment.creation_source.compose_file_manual,
46
- )
47
+ metadata: deployment_form.metadata,
48
+ }
49
+ deployment.update!(params)
47
50
  end
48
51
 
49
52
  deployment
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddMetadataToDeployment < ActiveRecord::Migration[6.1]
4
+ def change
5
+ add_column(:uffizzi_core_deployments, :metadata, :jsonb, default: {})
6
+ end
7
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UffizziCore
4
- VERSION = '0.6.0'
4
+ VERSION = '0.7.1'
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.6.0
4
+ version: 0.7.1
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-08-16 00:00:00.000000000 Z
12
+ date: 2022-08-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aasm
@@ -877,6 +877,8 @@ files:
877
877
  - app/serializers/uffizzi_core/api/cli/v1/projects/deployments/container_serializer.rb
878
878
  - app/serializers/uffizzi_core/api/cli/v1/projects/deployments/container_serializer/container_config_file_serializer.rb
879
879
  - app/serializers/uffizzi_core/api/cli/v1/projects/deployments/container_serializer/container_config_file_serializer/config_file_serializer.rb
880
+ - app/serializers/uffizzi_core/api/cli/v1/projects/deployments_serializer.rb
881
+ - app/serializers/uffizzi_core/api/cli/v1/projects/deployments_serializer/user_serializer.rb
880
882
  - app/serializers/uffizzi_core/api/cli/v1/projects/secret_serializer.rb
881
883
  - app/serializers/uffizzi_core/api/cli/v1/short_project_serializer.rb
882
884
  - app/serializers/uffizzi_core/api/cli/v1/user_serializer.rb
@@ -964,6 +966,7 @@ files:
964
966
  - db/migrate/20220422151523_add_volumes_to_uffizzi_core_containers.rb
965
967
  - db/migrate/20220525113412_rename_name_to_uffizzi_containers.rb
966
968
  - db/migrate/20220704135629_add_disabled_at_to_deployments.rb
969
+ - db/migrate/20220805164628_add_metadata_to_deployment.rb
967
970
  - db/seeds.rb
968
971
  - lib/tasks/uffizzi_core_tasks.rake
969
972
  - lib/uffizzi_core.rb