uffizzi_core 2.1.6 → 2.1.7
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 +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
|