uffizzi_core 2.1.6 → 2.1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/concerns/uffizzi_core/dependency_injection_concern.rb +3 -3
- data/app/lib/uffizzi_core/concerns/models/deployment.rb +0 -12
- data/app/services/uffizzi_core/deployment/domain_service.rb +62 -0
- data/app/services/uffizzi_core/deployment_service.rb +3 -93
- data/lib/uffizzi_core/version.rb +1 -1
- metadata +3 -3
- data/app/errors/uffizzi_core/deployment/labels_not_found_error.rb +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d1187785a105e2f2d00f7b04e987a2340e7678215329613ca5795c44a3f790e
|
4
|
+
data.tar.gz: d77dfcbdb2a1a49bac3cc8a408d2c025a97fd5699bdc3fdfdf4812e46b708f10
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0229c075de1275071dccdfce43f54b9a37c556d6d704aea3f84ee1dc4351f41dd05f0f5a8c1c4b342abd4fd8ca2c4f054f9930a5702f01609eddf40f0b16cf54'
|
7
|
+
data.tar.gz: 2d3733720b7b39e24e96fe5f9ff993eb99c327e1fd5bcd30a8de65c733989b78f7a1d325408a95a0be0c81ed902ab9fa74c6c35a5436b169c190acb2a6b53ce3
|
@@ -37,10 +37,10 @@ module UffizziCore::DependencyInjectionConcern
|
|
37
37
|
module_class(:notification_module)
|
38
38
|
end
|
39
39
|
|
40
|
-
def
|
41
|
-
return unless module_exists?(:
|
40
|
+
def domain_module
|
41
|
+
return unless module_exists?(:domain_module)
|
42
42
|
|
43
|
-
module_class(:
|
43
|
+
module_class(:domain_module)
|
44
44
|
end
|
45
45
|
|
46
46
|
private
|
@@ -73,18 +73,6 @@ module UffizziCore::Concerns::Models::Deployment
|
|
73
73
|
def preview_url
|
74
74
|
"#{subdomain}.#{Settings.app.managed_dns_zone}"
|
75
75
|
end
|
76
|
-
|
77
|
-
def from_actions?
|
78
|
-
from_github_actions? || from_gitlab_actions?
|
79
|
-
end
|
80
|
-
|
81
|
-
def from_github_actions?
|
82
|
-
metadata.dig('labels', 'github', 'repository').present?
|
83
|
-
end
|
84
|
-
|
85
|
-
def from_gitlab_actions?
|
86
|
-
metadata.dig('labels', 'gitlab', 'repo').present?
|
87
|
-
end
|
88
76
|
end
|
89
77
|
# rubocop:enable Metrics/BlockLength
|
90
78
|
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class UffizziCore::Deployment::DomainService
|
4
|
+
class << self
|
5
|
+
include UffizziCore::DependencyInjectionConcern
|
6
|
+
|
7
|
+
def build_subdomain(deployment)
|
8
|
+
return domain_module.build_subdomain(deployment) if domain_module.present?
|
9
|
+
return build_docker_continuous_preview_subdomain(deployment) if deployment&.continuous_preview_payload&.fetch('docker', nil).present?
|
10
|
+
|
11
|
+
build_default_subdomain(deployment)
|
12
|
+
end
|
13
|
+
|
14
|
+
def update_subdomain!(deployment)
|
15
|
+
deployment.subdomain = build_subdomain(deployment)
|
16
|
+
deployment.save!
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def build_docker_continuous_preview_subdomain(deployment)
|
22
|
+
project = deployment.project
|
23
|
+
continuous_preview_payload = deployment.continuous_preview_payload
|
24
|
+
docker_payload = continuous_preview_payload['docker']
|
25
|
+
repo_name = docker_payload['image'].split('/').last
|
26
|
+
image_tag = docker_payload['tag']
|
27
|
+
deployment_name = name(deployment)
|
28
|
+
subdomain = "#{image_tag}-#{deployment_name}-#{repo_name}-#{project.slug}"
|
29
|
+
|
30
|
+
format_subdomain(subdomain)
|
31
|
+
end
|
32
|
+
|
33
|
+
def build_default_subdomain(deployment)
|
34
|
+
deployment_name = name(deployment)
|
35
|
+
slug = deployment.project.slug.to_s
|
36
|
+
subdomain = "#{deployment_name}-#{slug}"
|
37
|
+
|
38
|
+
format_subdomain(subdomain)
|
39
|
+
end
|
40
|
+
|
41
|
+
def name(deployment)
|
42
|
+
"deployment-#{deployment.id}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def format_subdomain(full_subdomain_name)
|
46
|
+
# Replace _ to - because RFC 1123 subdomain must consist of lower case alphanumeric characters,
|
47
|
+
# '-' or '.', and must start and end with an alphanumeric character
|
48
|
+
rfc_subdomain = full_subdomain_name.gsub('_', '-')
|
49
|
+
subdomain_length_limit = Settings.deployment.subdomain.length_limit
|
50
|
+
return rfc_subdomain if rfc_subdomain.length <= subdomain_length_limit
|
51
|
+
|
52
|
+
sliced_subdomain = rfc_subdomain.slice(0, subdomain_length_limit)
|
53
|
+
return sliced_subdomain.chop if sliced_subdomain.end_with?('-')
|
54
|
+
|
55
|
+
sliced_subdomain
|
56
|
+
end
|
57
|
+
|
58
|
+
def format_url_safe(name)
|
59
|
+
name.gsub(/ /, '-').gsub(/[^\w-]+/, '-')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -88,57 +88,6 @@ class UffizziCore::DeploymentService
|
|
88
88
|
compose_file.destroy!
|
89
89
|
end
|
90
90
|
|
91
|
-
def build_subdomain(deployment)
|
92
|
-
return build_docker_continuous_preview_subdomain(deployment) if deployment&.continuous_preview_payload&.fetch('docker', nil).present?
|
93
|
-
return build_pull_request_subdomain(deployment) if deployment.from_actions?
|
94
|
-
|
95
|
-
build_default_subdomain(deployment)
|
96
|
-
rescue UffizziCore::Deployment::LabelsNotFoundError
|
97
|
-
build_default_subdomain(deployment)
|
98
|
-
end
|
99
|
-
|
100
|
-
def build_pull_request_subdomain(deployment)
|
101
|
-
_, repo_name, pull_request_number = pull_request_data(deployment)
|
102
|
-
raise UffizziCore::Deployment::LabelsNotFoundError if repo_name.nil? || pull_request_number.nil?
|
103
|
-
|
104
|
-
formatted_repo_name = format_url_safe(repo_name.split('/').last.downcase)
|
105
|
-
subdomain = "pr-#{pull_request_number}-#{name(deployment)}-#{formatted_repo_name}"
|
106
|
-
format_subdomain(subdomain)
|
107
|
-
end
|
108
|
-
|
109
|
-
def update_subdomain!(deployment)
|
110
|
-
deployment.subdomain = build_subdomain(deployment)
|
111
|
-
deployment.save!
|
112
|
-
end
|
113
|
-
|
114
|
-
def build_docker_continuous_preview_subdomain(deployment)
|
115
|
-
project = deployment.project
|
116
|
-
continuous_preview_payload = deployment.continuous_preview_payload
|
117
|
-
docker_payload = continuous_preview_payload['docker']
|
118
|
-
repo_name = docker_payload['image'].split('/').last
|
119
|
-
image_tag = docker_payload['tag']
|
120
|
-
deployment_name = name(deployment)
|
121
|
-
subdomain = "#{image_tag}-#{deployment_name}-#{repo_name}-#{project.slug}"
|
122
|
-
|
123
|
-
format_subdomain(subdomain)
|
124
|
-
end
|
125
|
-
|
126
|
-
def build_default_subdomain(deployment)
|
127
|
-
deployment_name = name(deployment)
|
128
|
-
slug = deployment.project.slug.to_s
|
129
|
-
subdomain = "#{deployment_name}-#{slug}"
|
130
|
-
|
131
|
-
format_subdomain(subdomain)
|
132
|
-
end
|
133
|
-
|
134
|
-
def build_preview_url(deployment)
|
135
|
-
"#{deployment.subdomain}.#{Settings.app.managed_dns_zone}"
|
136
|
-
end
|
137
|
-
|
138
|
-
def build_deployment_url(deployment)
|
139
|
-
"#{Settings.app.host}/projects/#{deployment.project_id}/deployments"
|
140
|
-
end
|
141
|
-
|
142
91
|
def all_containers_have_unique_ports?(containers)
|
143
92
|
ports = containers.map(&:port).compact
|
144
93
|
containers.empty? || ports.size == ports.uniq.size
|
@@ -190,7 +139,7 @@ class UffizziCore::DeploymentService
|
|
190
139
|
|
191
140
|
deployment.reload
|
192
141
|
|
193
|
-
new_deployment_subdomain = build_subdomain(deployment)
|
142
|
+
new_deployment_subdomain = DomainService.build_subdomain(deployment)
|
194
143
|
|
195
144
|
if new_deployment_subdomain != old_deployment_subdomain
|
196
145
|
deployment.update(subdomain: new_deployment_subdomain)
|
@@ -199,10 +148,6 @@ class UffizziCore::DeploymentService
|
|
199
148
|
UffizziCore::Deployment::DeployContainersJob.perform_async(deployment.id)
|
200
149
|
end
|
201
150
|
|
202
|
-
def name(deployment)
|
203
|
-
"deployment-#{deployment.id}"
|
204
|
-
end
|
205
|
-
|
206
151
|
def pull_request_payload_present?(deployment)
|
207
152
|
deployment.continuous_preview_payload.present? && deployment.continuous_preview_payload['pull_request'].present?
|
208
153
|
end
|
@@ -216,7 +161,7 @@ class UffizziCore::DeploymentService
|
|
216
161
|
private
|
217
162
|
|
218
163
|
def run_deployment_creation_tasks(deployment)
|
219
|
-
update_subdomain!(deployment)
|
164
|
+
UffizziCore::Deployment::DomainService.update_subdomain!(deployment)
|
220
165
|
|
221
166
|
UffizziCore::Deployment::CreateJob.perform_async(deployment.id)
|
222
167
|
end
|
@@ -275,7 +220,7 @@ class UffizziCore::DeploymentService
|
|
275
220
|
envs.push('name' => 'UFFIZZI_URL', 'value' => "https://#{deployment.preview_url}")
|
276
221
|
envs.push('name' => 'UFFIZZI_DOMAIN', 'value' => deployment.preview_url)
|
277
222
|
|
278
|
-
preview_url = "https://#{
|
223
|
+
preview_url = "https://#{domain_module.build_preview_url(deployment)}" if domain_module.present?
|
279
224
|
envs.push('name' => 'UFFIZZI_PREDICTABLE_URL', 'value' => preview_url || '')
|
280
225
|
|
281
226
|
container.variables = [] if container.variables.nil?
|
@@ -283,40 +228,5 @@ class UffizziCore::DeploymentService
|
|
283
228
|
container.variables.push(*envs)
|
284
229
|
end
|
285
230
|
end
|
286
|
-
|
287
|
-
def format_subdomain(full_subdomain_name)
|
288
|
-
# Replace _ to - because RFC 1123 subdomain must consist of lower case alphanumeric characters,
|
289
|
-
# '-' or '.', and must start and end with an alphanumeric character
|
290
|
-
rfc_subdomain = full_subdomain_name.gsub('_', '-')
|
291
|
-
subdomain_length_limit = Settings.deployment.subdomain.length_limit
|
292
|
-
return rfc_subdomain if rfc_subdomain.length <= subdomain_length_limit
|
293
|
-
|
294
|
-
sliced_subdomain = rfc_subdomain.slice(0, subdomain_length_limit)
|
295
|
-
return sliced_subdomain.chop if sliced_subdomain.end_with?('-')
|
296
|
-
|
297
|
-
sliced_subdomain
|
298
|
-
end
|
299
|
-
|
300
|
-
def pull_request_data(deployment)
|
301
|
-
return github_pull_request_data(deployment) if deployment.from_github_actions?
|
302
|
-
|
303
|
-
gitlab_merge_request_data(deployment)
|
304
|
-
end
|
305
|
-
|
306
|
-
def github_pull_request_data(deployment)
|
307
|
-
github_data = deployment.metadata.dig('labels', 'github')
|
308
|
-
|
309
|
-
[:github, github_data['repository'], github_data.dig('event', 'number')]
|
310
|
-
end
|
311
|
-
|
312
|
-
def gitlab_merge_request_data(deployment)
|
313
|
-
gitlab_data = deployment.metadata.dig('labels', 'gitlab')
|
314
|
-
|
315
|
-
[:gitlab, gitlab_data['repo'], gitlab_data.dig('merge_request', 'number')]
|
316
|
-
end
|
317
|
-
|
318
|
-
def format_url_safe(name)
|
319
|
-
name.gsub(/ /, '-').gsub(/[^\w-]+/, '-')
|
320
|
-
end
|
321
231
|
end
|
322
232
|
end
|
data/lib/uffizzi_core/version.rb
CHANGED
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: 2.1.
|
4
|
+
version: 2.1.7
|
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: 2023-03-
|
12
|
+
date: 2023-03-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aasm
|
@@ -779,7 +779,6 @@ files:
|
|
779
779
|
- app/errors/uffizzi_core/compose_file_error.rb
|
780
780
|
- app/errors/uffizzi_core/container_registry_error.rb
|
781
781
|
- app/errors/uffizzi_core/deployment/image_pull_error.rb
|
782
|
-
- app/errors/uffizzi_core/deployment/labels_not_found_error.rb
|
783
782
|
- app/errors/uffizzi_core/deployment_not_found_error.rb
|
784
783
|
- app/errors/uffizzi_core/registry_not_supported_error.rb
|
785
784
|
- app/forms/uffizzi_core/api/cli/v1/account/credential/check_credential_form.rb
|
@@ -993,6 +992,7 @@ files:
|
|
993
992
|
- app/services/uffizzi_core/container_registry_service.rb
|
994
993
|
- app/services/uffizzi_core/container_service.rb
|
995
994
|
- app/services/uffizzi_core/controller_service.rb
|
995
|
+
- app/services/uffizzi_core/deployment/domain_service.rb
|
996
996
|
- app/services/uffizzi_core/deployment_service.rb
|
997
997
|
- app/services/uffizzi_core/logs_service.rb
|
998
998
|
- app/services/uffizzi_core/manage_activity_items_service.rb
|