@regulaforensics/face-sdk 6.3.3-beta → 6.3.4-beta
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.
- package/examples/capacitor/package.json +1 -1
- package/examples/cordova/package.json +1 -1
- package/examples/ionic/package.json +1 -1
- package/examples/react-native/package.json +1 -1
- package/package.json +1 -1
- package/plugin.xml +1 -1
- package/ios-ci/.gitlab-ci.yml +0 -41
- package/ios-ci/.sample-env +0 -22
- package/ios-ci/README.md +0 -97
- package/ios-ci/RegulaDanger/Package.swift +0 -34
- package/ios-ci/RegulaDanger/Sources/RegulaDanger/RegulaDanger.swift +0 -44
- package/ios-ci/RegulaDanger/Tests/LinuxMain.swift +0 -7
- package/ios-ci/RegulaDanger/Tests/RegulaDangerTests/RegulaDangerTests.swift +0 -15
- package/ios-ci/RegulaDanger/Tests/RegulaDangerTests/XCTestManifests.swift +0 -9
- package/ios-ci/install.sh +0 -9
- package/ios-ci/ios_ci/__init__.py +0 -8
- package/ios-ci/ios_ci/cli.py +0 -408
- package/ios-ci/ios_ci/common/__init__.py +0 -0
- package/ios-ci/ios_ci/common/build_index.py +0 -70
- package/ios-ci/ios_ci/common/clean_cocoapod.sh +0 -13
- package/ios-ci/ios_ci/common/dependency.py +0 -466
- package/ios-ci/ios_ci/common/ftp.py +0 -314
- package/ios-ci/ios_ci/common/searchpod.sh +0 -6
- package/ios-ci/ios_ci/common/wait_for_cocopod.sh +0 -21
- package/ios-ci/ios_ci/inject.py +0 -145
- package/ios-ci/ios_ci/podspec/__init__.py +0 -0
- package/ios-ci/ios_ci/podspec/podspec.py +0 -88
- package/ios-ci/ios_ci/podspec/templates/BTDevice.podspec +0 -17
- package/ios-ci/ios_ci/podspec/templates/Core.podspec +0 -17
- package/ios-ci/ios_ci/podspec/templates/DocumentReader.podspec +0 -19
- package/ios-ci/ios_ci/podspec/templates/FaceCore.podspec +0 -17
- package/ios-ci/ios_ci/podspec/templates/FaceSDK.podspec +0 -18
- package/ios-ci/ios_ci/podspec/templates/IRS.podspec +0 -17
- package/ios-ci/ios_ci/podspec/templates/RegulaCommon.podspec +0 -17
- package/ios-ci/ios_ci/resolve_podfile_common.py +0 -76
- package/ios-ci/ios_ci/spm/AppleRootCA-G3.cer +0 -0
- package/ios-ci/ios_ci/spm/AppleWWDRCAG3.cer +0 -0
- package/ios-ci/ios_ci/spm/SwiftPackageGenerator+Common.sh +0 -48
- package/ios-ci/ios_ci/spm/SwiftPackageGenerator.sh +0 -33
- package/ios-ci/ios_ci/spm/XcodeSPMCollection.json +0 -29
- package/ios-ci/ios_ci/spm/__init__.py +0 -0
- package/ios-ci/ios_ci/spm/askpass.py +0 -19
- package/ios-ci/ios_ci/spm/spm.py +0 -227
- package/ios-ci/ios_ci/upload_build.py +0 -158
- package/ios-ci/ios_ci/version.py +0 -14
- package/ios-ci/poetry.lock +0 -342
- package/ios-ci/pyproject.toml +0 -26
- package/ios-ci/scripts.py +0 -9
- package/ios-ci/tests/__init__.py +0 -0
- package/ios-ci/tests/podspec/fixtures/BTDevice.podspec +0 -17
- package/ios-ci/tests/podspec/fixtures/BTDeviceBeta.podspec +0 -17
- package/ios-ci/tests/podspec/fixtures/DocumentReaderBeta_RegulaCommon_Beta.podspec +0 -19
- package/ios-ci/tests/podspec/fixtures/DocumentReaderBeta_RegulaCommon_Release.podspec +0 -19
- package/ios-ci/tests/podspec/fixtures/DocumentReaderFullRFID.podspec +0 -17
- package/ios-ci/tests/podspec/fixtures/DocumentReaderFullRFIDBeta.podspec +0 -17
- package/ios-ci/tests/podspec/fixtures/DocumentReader_RegulaCommon_Beta.podspec +0 -19
- package/ios-ci/tests/podspec/fixtures/DocumentReader_RegulaCommon_Release.podspec +0 -19
- package/ios-ci/tests/podspec/fixtures/FaceSDK.podspec +0 -18
- package/ios-ci/tests/podspec/fixtures/FaceSDKBeta.podspec +0 -18
- package/ios-ci/tests/podspec/fixtures/IRS.podspec +0 -17
- package/ios-ci/tests/podspec/fixtures/IRSBeta.podspec +0 -17
- package/ios-ci/tests/podspec/fixtures/RegulaCommon.podspec +0 -17
- package/ios-ci/tests/podspec/fixtures/RegulaCommonBeta.podspec +0 -17
- package/ios-ci/tests/podspec/test_podspec.py +0 -188
- package/ios-ci/tests/test_build_index.py +0 -117
- package/ios-ci/tests/test_dependency.py +0 -139
- package/ios-ci/tests/test_ios_ci.py +0 -5
- package/www/capacitor/internal/webpack.config.js +0 -11
|
@@ -1,314 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import datetime
|
|
3
|
-
from typing import Tuple
|
|
4
|
-
from typing import Optional
|
|
5
|
-
|
|
6
|
-
from urllib.parse import urlparse
|
|
7
|
-
from getpass import getpass
|
|
8
|
-
from ftplib import FTP
|
|
9
|
-
from dateutil import parser
|
|
10
|
-
|
|
11
|
-
from ios_ci.common.dependency import DependencyBuildType
|
|
12
|
-
from ios_ci.common.dependency import Dependency
|
|
13
|
-
from ios_ci.common.build_index import BuildIndex
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def connect(ftp_host: str):
|
|
17
|
-
is_public_ftp = ftp_host == "pods.regulaforensics.com"
|
|
18
|
-
|
|
19
|
-
if is_public_ftp:
|
|
20
|
-
username_env_key = "PUBLIC_UPLOAD_FTP_USERNAME"
|
|
21
|
-
password_env_key = "PUBLIC_UPLOAD_FTP_PASSWORD"
|
|
22
|
-
else:
|
|
23
|
-
username_env_key = "PRIVATE_UPLOAD_FTP_USERNAME"
|
|
24
|
-
password_env_key = "PRIVATE_UPLOAD_FTP_PASSWORD"
|
|
25
|
-
|
|
26
|
-
ftp_username = os.environ.get(username_env_key)
|
|
27
|
-
if ftp_username is None:
|
|
28
|
-
ftp_username = input(f"{username_env_key}: ")
|
|
29
|
-
ftp_password = os.environ.get(password_env_key)
|
|
30
|
-
if ftp_password is None:
|
|
31
|
-
ftp_password = getpass(f"{password_env_key}: ")
|
|
32
|
-
|
|
33
|
-
print(
|
|
34
|
-
f"[log] establishing conection with ftp_host: {ftp_host} using ftp_username: {ftp_username}"
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
session = FTP(host=ftp_host, user=ftp_username, passwd=ftp_password)
|
|
38
|
-
return session
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def upload_build(upload_url: str, build_version: str, the_archive_filepath: str):
|
|
42
|
-
uplaod_url_components = urlparse(upload_url)
|
|
43
|
-
ftp_host = _fix_host_name(uplaod_url_components.hostname)
|
|
44
|
-
|
|
45
|
-
session = connect(ftp_host=ftp_host)
|
|
46
|
-
|
|
47
|
-
ftp_path_components = uplaod_url_components.path.split("/")
|
|
48
|
-
ftp_path_components.remove("")
|
|
49
|
-
ftp_zip_file_name = ftp_path_components.pop()
|
|
50
|
-
for component in ftp_path_components:
|
|
51
|
-
if component == build_version and component in session.nlst():
|
|
52
|
-
print(f"[log] version already exits at {upload_url}")
|
|
53
|
-
try:
|
|
54
|
-
if component in session.nlst():
|
|
55
|
-
print(f"[log] directory: {component} exists. opening.")
|
|
56
|
-
session.cwd(component)
|
|
57
|
-
else:
|
|
58
|
-
print(f"[log] directory: {component} does not exits. creating.")
|
|
59
|
-
session.mkd(component)
|
|
60
|
-
session.cwd(component)
|
|
61
|
-
except Exception as e:
|
|
62
|
-
print(f"[error] ftp error: {e}")
|
|
63
|
-
raise
|
|
64
|
-
|
|
65
|
-
the_archive_file = open(the_archive_filepath, "rb")
|
|
66
|
-
session.storbinary(f"STOR {ftp_zip_file_name}", the_archive_file)
|
|
67
|
-
|
|
68
|
-
session.quit()
|
|
69
|
-
the_archive_file.close()
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
def _local_build_index_filepath() -> Tuple[str, str]:
|
|
73
|
-
filename = "index.toml"
|
|
74
|
-
this_script_path = os.path.dirname(os.path.realpath(__file__))
|
|
75
|
-
local_filepath = f"{this_script_path}/{filename}"
|
|
76
|
-
return (local_filepath, filename)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
def _guard_only_local_ftp_host(project_url: str):
|
|
80
|
-
components = urlparse(project_url)
|
|
81
|
-
ftp_host = components.hostname
|
|
82
|
-
if ftp_host != "ftp" and ftp_host != "ftp.regula.local":
|
|
83
|
-
print(
|
|
84
|
-
f"[error] Build index is only supported for private ftp usage. Double check the project_url: {project_url}"
|
|
85
|
-
)
|
|
86
|
-
raise ValueError(
|
|
87
|
-
"Build index is only supported for private ftp usage. Double check the project_url.",
|
|
88
|
-
project_url,
|
|
89
|
-
)
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
def _fix_host_name(host_name: str) -> str:
|
|
93
|
-
fix_name = os.environ.get("LOCAL_FTP_RENAME")
|
|
94
|
-
if fix_name:
|
|
95
|
-
return fix_name
|
|
96
|
-
return host_name
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
def fetch_build_index(project_url: str) -> Optional[BuildIndex]:
|
|
100
|
-
_guard_only_local_ftp_host(project_url)
|
|
101
|
-
|
|
102
|
-
components = urlparse(project_url)
|
|
103
|
-
ftp_host = _fix_host_name(components.hostname)
|
|
104
|
-
session = connect(ftp_host=ftp_host)
|
|
105
|
-
|
|
106
|
-
try:
|
|
107
|
-
session.cwd(components.path)
|
|
108
|
-
except Exception as e:
|
|
109
|
-
print(f"[error] ftp error: {e}")
|
|
110
|
-
raise
|
|
111
|
-
|
|
112
|
-
filepath, filename = _local_build_index_filepath()
|
|
113
|
-
if filename not in session.nlst():
|
|
114
|
-
return None
|
|
115
|
-
|
|
116
|
-
with open(filepath, "wb") as file:
|
|
117
|
-
session.retrbinary(f"RETR {filename}", file.write)
|
|
118
|
-
|
|
119
|
-
import toml
|
|
120
|
-
|
|
121
|
-
index_dict = toml.load(filepath)
|
|
122
|
-
index = BuildIndex.from_json(index_dict)
|
|
123
|
-
return index
|
|
124
|
-
|
|
125
|
-
def upload_collection_json(project_url: str):
|
|
126
|
-
components = urlparse(project_url)
|
|
127
|
-
ftp_host = _fix_host_name(components.hostname)
|
|
128
|
-
|
|
129
|
-
session = connect(ftp_host=ftp_host)
|
|
130
|
-
|
|
131
|
-
try:
|
|
132
|
-
session.cwd(components.path)
|
|
133
|
-
except Exception as e:
|
|
134
|
-
print(f"[error] ftp error: {e}")
|
|
135
|
-
raise
|
|
136
|
-
|
|
137
|
-
filepath = "/Users/administratorregula/workspace/iOS_SPM_Upload_Pipeline/iOS_Common/ios-ci/swift-package-collection-generator/PodsCollection-signed.json"
|
|
138
|
-
filename = "PodsCollection-signed.json"
|
|
139
|
-
|
|
140
|
-
the_json_file = open(filepath, "rb")
|
|
141
|
-
session.storbinary(f"STOR {filename}", the_json_file)
|
|
142
|
-
|
|
143
|
-
session.quit()
|
|
144
|
-
the_json_file.close()
|
|
145
|
-
|
|
146
|
-
def upload_build_index(index: BuildIndex, project_url: str):
|
|
147
|
-
_guard_only_local_ftp_host(project_url)
|
|
148
|
-
|
|
149
|
-
components = urlparse(project_url)
|
|
150
|
-
ftp_host = _fix_host_name(components.hostname)
|
|
151
|
-
session = connect(ftp_host=ftp_host)
|
|
152
|
-
try:
|
|
153
|
-
session.cwd(components.path)
|
|
154
|
-
except Exception as e:
|
|
155
|
-
print(f"[error] ftp error: {e}")
|
|
156
|
-
raise
|
|
157
|
-
|
|
158
|
-
import toml
|
|
159
|
-
|
|
160
|
-
filepath, filename = _local_build_index_filepath()
|
|
161
|
-
|
|
162
|
-
prefix = (
|
|
163
|
-
"# This is an autogenerated file created by ios-ci.\n"
|
|
164
|
-
"# The file is used for indexing build versions by branch names.\n"
|
|
165
|
-
"# Please do not modify it manually.\n\n"
|
|
166
|
-
)
|
|
167
|
-
toml_str = toml.dumps(index.to_json())
|
|
168
|
-
toml_str = prefix + toml_str
|
|
169
|
-
|
|
170
|
-
with open(filepath, "wt") as file:
|
|
171
|
-
file.write(toml_str)
|
|
172
|
-
|
|
173
|
-
the_index_file = open(filepath, "rb")
|
|
174
|
-
session.storbinary(f"STOR {filename}", the_index_file)
|
|
175
|
-
|
|
176
|
-
session.quit()
|
|
177
|
-
the_index_file.close()
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
def _ftp_url_for_build_type(build_type: DependencyBuildType, is_temp_specs: bool = False) -> str:
|
|
181
|
-
scheme_type_switch = {
|
|
182
|
-
DependencyBuildType.TEMP: "https" if is_temp_specs else "http",
|
|
183
|
-
DependencyBuildType.BETA: "https",
|
|
184
|
-
DependencyBuildType.NIGHTLY: "https",
|
|
185
|
-
DependencyBuildType.STAGE: "https",
|
|
186
|
-
DependencyBuildType.RELEASE: "https",
|
|
187
|
-
}
|
|
188
|
-
scheme = scheme_type_switch.get(build_type)
|
|
189
|
-
host_type_switch = {
|
|
190
|
-
DependencyBuildType.TEMP: "ftp.regula.local",
|
|
191
|
-
DependencyBuildType.BETA: "pods.regulaforensics.com",
|
|
192
|
-
DependencyBuildType.NIGHTLY: "pods.regulaforensics.com/Nightly",
|
|
193
|
-
DependencyBuildType.STAGE: "pods.regulaforensics.com/Stage",
|
|
194
|
-
DependencyBuildType.RELEASE: "pods.regulaforensics.com",
|
|
195
|
-
}
|
|
196
|
-
host_name = host_type_switch.get(build_type)
|
|
197
|
-
host_name = _fix_host_name(host_name)
|
|
198
|
-
return f"{scheme}://{host_name}"
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
def make_ftp_build_archive_url(dependency: Dependency, version: str, is_temp_specs: bool = False) -> str:
|
|
202
|
-
build_type = dependency.build_type
|
|
203
|
-
resource_path = dependency.ftp_project_path
|
|
204
|
-
archive_name = dependency.ftp_archive_name(version=version)
|
|
205
|
-
resource_path = f"{resource_path}/{version}/{archive_name}"
|
|
206
|
-
base = _ftp_url_for_build_type(build_type=build_type, is_temp_specs=is_temp_specs)
|
|
207
|
-
return f"{base}/{resource_path}.zip"
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
def make_ftp_project_url(dependency: Dependency) -> str:
|
|
211
|
-
build_type = dependency.build_type
|
|
212
|
-
resource_path = dependency.ftp_project_path
|
|
213
|
-
base = _ftp_url_for_build_type(build_type=build_type)
|
|
214
|
-
return f"{base}/{resource_path}"
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
def upload_latest_version(version: str, project_url: str):
|
|
218
|
-
components = urlparse(project_url)
|
|
219
|
-
ftp_host = _fix_host_name(components.hostname)
|
|
220
|
-
session = connect(ftp_host=ftp_host)
|
|
221
|
-
ftp_path_components = components.path.split("/")
|
|
222
|
-
ftp_path_components.remove("")
|
|
223
|
-
for component in ftp_path_components:
|
|
224
|
-
try:
|
|
225
|
-
if component in session.nlst():
|
|
226
|
-
print(f"[log] directory: {component} exists. opening.")
|
|
227
|
-
session.cwd(component)
|
|
228
|
-
else:
|
|
229
|
-
print(f"[log] directory: {component} does not exits. creating.")
|
|
230
|
-
session.mkd(component)
|
|
231
|
-
session.cwd(component)
|
|
232
|
-
except Exception as e:
|
|
233
|
-
print(f"[error] ftp error: {e}")
|
|
234
|
-
raise
|
|
235
|
-
|
|
236
|
-
filename = "latest_version.txt"
|
|
237
|
-
this_script_path = os.path.dirname(os.path.realpath(__file__))
|
|
238
|
-
filepath = f"{this_script_path}/{filename}"
|
|
239
|
-
|
|
240
|
-
with open(filepath, "wt") as file:
|
|
241
|
-
file.write(version)
|
|
242
|
-
|
|
243
|
-
the_version_file = open(filepath, "rb")
|
|
244
|
-
session.storbinary(f"STOR {filename}", the_version_file)
|
|
245
|
-
|
|
246
|
-
session.quit()
|
|
247
|
-
the_version_file.close()
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
def clean_old_data(url: str):
|
|
251
|
-
url_components = urlparse(url)
|
|
252
|
-
ftp_host = _fix_host_name(url_components.hostname)
|
|
253
|
-
ftp_path_components = url_components.path.split("/")
|
|
254
|
-
ftp_path_components.remove("")
|
|
255
|
-
session = connect(ftp_host=ftp_host)
|
|
256
|
-
session.cwd(ftp_path_components[0])
|
|
257
|
-
lines = session.nlst()
|
|
258
|
-
session.dir("", lines.append)
|
|
259
|
-
|
|
260
|
-
for line in lines:
|
|
261
|
-
tokens = line.split(maxsplit=9)
|
|
262
|
-
if tokens.__len__() > 7:
|
|
263
|
-
time_str = tokens[5] + " " + tokens[6] + " " + tokens[7]
|
|
264
|
-
time = parser.parse(time_str)
|
|
265
|
-
if time < datetime.datetime.now() - datetime.timedelta(days=60):
|
|
266
|
-
delete_dir(f"{url}/{tokens[8]}")
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
def delete_dir(dir_url: str):
|
|
270
|
-
upload_url_components = urlparse(dir_url)
|
|
271
|
-
ftp_host = _fix_host_name(upload_url_components.hostname)
|
|
272
|
-
session = connect(ftp_host=ftp_host)
|
|
273
|
-
|
|
274
|
-
ftp_path_components = upload_url_components.path.split("/")
|
|
275
|
-
ftp_path_components.remove("")
|
|
276
|
-
target_dir = ftp_path_components.pop()
|
|
277
|
-
for component in ftp_path_components:
|
|
278
|
-
try:
|
|
279
|
-
if component in session.nlst():
|
|
280
|
-
print(f"[log] directory: {component} exists. opening.")
|
|
281
|
-
session.cwd(component)
|
|
282
|
-
else:
|
|
283
|
-
ValueError(f"[log] delete_dir error: parent directory '{component}' does not exits.")
|
|
284
|
-
except Exception as e:
|
|
285
|
-
print(f"[error] ftp error: {e}")
|
|
286
|
-
raise
|
|
287
|
-
|
|
288
|
-
ftp_rm_tree(session, target_dir)
|
|
289
|
-
session.quit()
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
def ftp_rm_tree(ftp, path):
|
|
293
|
-
wd = ftp.pwd()
|
|
294
|
-
|
|
295
|
-
try:
|
|
296
|
-
names = ftp.nlst(path)
|
|
297
|
-
except:
|
|
298
|
-
return
|
|
299
|
-
|
|
300
|
-
for name in names:
|
|
301
|
-
if os.path.split(name)[1] in ('.', '..'): continue
|
|
302
|
-
try:
|
|
303
|
-
ftp.cwd(name) # if we can cwd to it, it's a folder
|
|
304
|
-
ftp.cwd(wd) # don't try a nuke a folder we're in
|
|
305
|
-
ftp_rm_tree(ftp, name)
|
|
306
|
-
except:
|
|
307
|
-
print(f"[ftp_rm_tree] deleting file {name}")
|
|
308
|
-
ftp.delete(name)
|
|
309
|
-
|
|
310
|
-
try:
|
|
311
|
-
print(f"[ftp_rm_tree] deleting directory {path}")
|
|
312
|
-
ftp.rmd(path)
|
|
313
|
-
except Exception as e:
|
|
314
|
-
print(f"[error] ftp_rm_tree: Could not remove {0}: {1}".format(path, e))
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#!/bin/bash -l
|
|
2
|
-
|
|
3
|
-
PODNAME=$1
|
|
4
|
-
VERSION=$2
|
|
5
|
-
isCocoapodUpdated=0
|
|
6
|
-
|
|
7
|
-
echo "PODNAME: ${PODNAME}"
|
|
8
|
-
echo "VERSION: ${VERSION}"
|
|
9
|
-
|
|
10
|
-
isCocoapodUpdated=0
|
|
11
|
-
while [ ${isCocoapodUpdated} -ne 1 ]
|
|
12
|
-
do
|
|
13
|
-
pod repo update
|
|
14
|
-
RESULT=$(pod search ${PODNAME} --no-pager --simple)
|
|
15
|
-
echo "COCOAPOD VERSION: ${RESULT}"
|
|
16
|
-
if [[ "${RESULT}" == *"- ${VERSION}"* ]]; then
|
|
17
|
-
isCocoapodUpdated=1
|
|
18
|
-
else
|
|
19
|
-
sleep 180
|
|
20
|
-
fi
|
|
21
|
-
done
|
package/ios-ci/ios_ci/inject.py
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import subprocess
|
|
3
|
-
import shutil
|
|
4
|
-
|
|
5
|
-
from ios_ci.common.dependency import DependencyBuildType
|
|
6
|
-
from ios_ci.common.dependency import VersionResolver
|
|
7
|
-
from ios_ci.common.dependency import make_dependency
|
|
8
|
-
from ios_ci.common.dependency import inject_destination_path
|
|
9
|
-
from ios_ci.common import ftp
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def inject_dependency(
|
|
13
|
-
name: str,
|
|
14
|
-
version_selector: str,
|
|
15
|
-
dependency_type: str,
|
|
16
|
-
branch="default",
|
|
17
|
-
destination: str = None,
|
|
18
|
-
):
|
|
19
|
-
branch = branch.replace("/", "_")
|
|
20
|
-
|
|
21
|
-
resolver = VersionResolver()
|
|
22
|
-
build_type = DependencyBuildType(dependency_type)
|
|
23
|
-
dependency = make_dependency(name, build_type)
|
|
24
|
-
resolved_version = resolver.resolve_dependency_version(
|
|
25
|
-
dependency=dependency, version_selector=version_selector, branch=branch
|
|
26
|
-
)
|
|
27
|
-
|
|
28
|
-
destination_dependency = dependency
|
|
29
|
-
source_dependency = dependency
|
|
30
|
-
if resolved_version.build_type is not None:
|
|
31
|
-
if (
|
|
32
|
-
dependency.build_type is DependencyBuildType.BETA
|
|
33
|
-
and resolved_version.build_type is not DependencyBuildType.BETA
|
|
34
|
-
):
|
|
35
|
-
print(
|
|
36
|
-
f"[warning] {dependency.name}: dependency resolved by cocoapods has a different type: {resolved_version.build_type}. Overriding dependency.type: {dependency.build_type} to the cocoapods type: {resolved_version.build_type}"
|
|
37
|
-
)
|
|
38
|
-
destination_dependency = make_dependency(name, resolved_version.build_type)
|
|
39
|
-
|
|
40
|
-
pod_name = dependency.pod_name
|
|
41
|
-
print(f"[log] {pod_name}: {version_selector}, {dependency.build_type}, {branch}")
|
|
42
|
-
|
|
43
|
-
version = resolved_version.version
|
|
44
|
-
if version is None:
|
|
45
|
-
print(
|
|
46
|
-
f"[error] unable to fetch version for {pod_name}, {version_selector}, {dependency.build_type}, {branch}"
|
|
47
|
-
)
|
|
48
|
-
exit(1)
|
|
49
|
-
|
|
50
|
-
if destination is None:
|
|
51
|
-
destination = inject_destination_path(destination_dependency)
|
|
52
|
-
|
|
53
|
-
print(f"[log] {pod_name}: destinaton: {destination}")
|
|
54
|
-
source_url = ftp.make_ftp_build_archive_url(source_dependency, version)
|
|
55
|
-
print(f"[log] {pod_name}: source_url: {source_url}")
|
|
56
|
-
|
|
57
|
-
print(f"[log] {pod_name}: check if folder exists {destination}")
|
|
58
|
-
if not os.path.exists(destination):
|
|
59
|
-
print(f"[warning] {pod_name}: destinaton does not exist. Creating a folder.")
|
|
60
|
-
try:
|
|
61
|
-
os.makedirs(destination)
|
|
62
|
-
except OSError as error:
|
|
63
|
-
print(error)
|
|
64
|
-
print(
|
|
65
|
-
f"[error] {pod_name}: Error: {error}. failed to create a folder at {destination}"
|
|
66
|
-
)
|
|
67
|
-
|
|
68
|
-
framework_name = dependency.framework_name
|
|
69
|
-
framework_filepath = f"{destination}/{framework_name}"
|
|
70
|
-
print(f"[log] {pod_name}: framework_filepath: {framework_filepath}")
|
|
71
|
-
if os.path.exists(framework_filepath):
|
|
72
|
-
print(f"[log] {pod_name}: framework already exists. overriding.")
|
|
73
|
-
shutil.rmtree(framework_filepath)
|
|
74
|
-
|
|
75
|
-
download_attempts: int = os.environ.get("IOS_CI_DEPENDENCY_DOWNLOAD_ATTEMPTS", 3)
|
|
76
|
-
|
|
77
|
-
injected = False
|
|
78
|
-
for attempt in range(download_attempts):
|
|
79
|
-
print(
|
|
80
|
-
f"[log] {pod_name}: Attempt {attempt + 1} of {download_attempts} to download and unzip dependency from url: {source_url}"
|
|
81
|
-
)
|
|
82
|
-
success = _attempt_download_and_unzip(
|
|
83
|
-
source_url=source_url,
|
|
84
|
-
destination=destination,
|
|
85
|
-
expected_framework_name=framework_name,
|
|
86
|
-
log_prefix=pod_name,
|
|
87
|
-
)
|
|
88
|
-
if success:
|
|
89
|
-
injected = True
|
|
90
|
-
break
|
|
91
|
-
|
|
92
|
-
if not injected:
|
|
93
|
-
print(
|
|
94
|
-
f"[error] {pod_name}: failed all attempts to download and unzip dependency from url: {source_url}"
|
|
95
|
-
)
|
|
96
|
-
exit(1)
|
|
97
|
-
|
|
98
|
-
print(f"[log] injected dependency successfully")
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
def _attempt_download_and_unzip(
|
|
102
|
-
source_url: str, destination: str, expected_framework_name: str, log_prefix: str
|
|
103
|
-
) -> bool:
|
|
104
|
-
zip_filepath = f"{destination}/_temp_dependency_archive.zip"
|
|
105
|
-
print(f"[log] {log_prefix}: zip_filepath: {zip_filepath}")
|
|
106
|
-
if os.path.exists(zip_filepath):
|
|
107
|
-
print(
|
|
108
|
-
f"[log] {log_prefix}: removing previous download at zip_filepath: {zip_filepath}"
|
|
109
|
-
)
|
|
110
|
-
os.remove(zip_filepath)
|
|
111
|
-
|
|
112
|
-
print(f"[log] {log_prefix}: downloading fresh dependency from url: {source_url}")
|
|
113
|
-
subprocess.run(
|
|
114
|
-
["curl", "-s", source_url, "--output", zip_filepath], check=True, text=True
|
|
115
|
-
)
|
|
116
|
-
if not os.path.exists(zip_filepath):
|
|
117
|
-
print(f"[error] {log_prefix}: download failed. zip does NOT exist.")
|
|
118
|
-
return False
|
|
119
|
-
print(f"[log] {log_prefix}: download is successful")
|
|
120
|
-
|
|
121
|
-
print(
|
|
122
|
-
f"[log] {log_prefix}: unzip zipfile: {zip_filepath} to location: {destination}"
|
|
123
|
-
)
|
|
124
|
-
try:
|
|
125
|
-
subprocess.run(
|
|
126
|
-
["unzip", "-q", "-ao", zip_filepath, "-d", destination],
|
|
127
|
-
check=True,
|
|
128
|
-
text=True,
|
|
129
|
-
)
|
|
130
|
-
except subprocess.CalledProcessError as error:
|
|
131
|
-
print(error)
|
|
132
|
-
return False
|
|
133
|
-
|
|
134
|
-
framework_filepath = f"{destination}/{expected_framework_name}"
|
|
135
|
-
if not os.path.exists(framework_filepath):
|
|
136
|
-
print(f"[error] {log_prefix}: unzip failure. Framework does not exist.")
|
|
137
|
-
return False
|
|
138
|
-
|
|
139
|
-
print(f"[log] {log_prefix}: unzip success.")
|
|
140
|
-
|
|
141
|
-
if os.path.exists(zip_filepath):
|
|
142
|
-
print(f"[log] {log_prefix}: cleanup downloaded archive: {zip_filepath}")
|
|
143
|
-
os.remove(zip_filepath)
|
|
144
|
-
|
|
145
|
-
return True
|
|
File without changes
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
import json
|
|
3
|
-
import os
|
|
4
|
-
import datetime
|
|
5
|
-
|
|
6
|
-
from ios_ci.common.dependency import Dependency
|
|
7
|
-
from ios_ci.common.dependency import DependencyBuildType
|
|
8
|
-
from ios_ci.common.dependency import CoreDependency
|
|
9
|
-
from ios_ci.common.dependency import make_dependency
|
|
10
|
-
|
|
11
|
-
from ios_ci.common import ftp
|
|
12
|
-
|
|
13
|
-
_this_filepath = Path(os.path.dirname(os.path.abspath(__file__)))
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
def make_podspec(
|
|
17
|
-
name: str,
|
|
18
|
-
version: str,
|
|
19
|
-
type: str,
|
|
20
|
-
dependency_name: str = None,
|
|
21
|
-
dependency_version: str = None,
|
|
22
|
-
dependency_type: str = None,
|
|
23
|
-
output_location_directory: str = None,
|
|
24
|
-
) -> str:
|
|
25
|
-
build_type = DependencyBuildType(type)
|
|
26
|
-
package = make_dependency(name=name, build_type=build_type)
|
|
27
|
-
|
|
28
|
-
dependency_build_type = None
|
|
29
|
-
dependency = None
|
|
30
|
-
|
|
31
|
-
if dependency_type is not None:
|
|
32
|
-
dependency_build_type = DependencyBuildType(dependency_type)
|
|
33
|
-
if dependency_name is not None and dependency_build_type is not None:
|
|
34
|
-
dependency = make_dependency(
|
|
35
|
-
name=dependency_name, build_type=dependency_build_type
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
output_filepath = _make_podspec(
|
|
39
|
-
package=package,
|
|
40
|
-
package_version=version,
|
|
41
|
-
dependency=dependency,
|
|
42
|
-
dependency_version=dependency_version,
|
|
43
|
-
output_location_directory=output_location_directory,
|
|
44
|
-
)
|
|
45
|
-
return output_filepath
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
def _make_podspec(
|
|
49
|
-
package: Dependency,
|
|
50
|
-
package_version: str,
|
|
51
|
-
dependency: Dependency = None,
|
|
52
|
-
dependency_version: str = None,
|
|
53
|
-
output_location_directory: str = None,
|
|
54
|
-
) -> str:
|
|
55
|
-
if output_location_directory is None:
|
|
56
|
-
output_location_directory = str(_this_filepath)
|
|
57
|
-
|
|
58
|
-
token_value_map = {
|
|
59
|
-
"<VERSION>": package_version,
|
|
60
|
-
"<POD_NAME>": package.pod_name_temp,
|
|
61
|
-
"<YEAR>": str(datetime.datetime.now().year),
|
|
62
|
-
"<FTP_SOURCE_URL>": ftp.make_ftp_build_archive_url(
|
|
63
|
-
dependency=package, version=package_version, is_temp_specs=True
|
|
64
|
-
),
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if dependency is not None:
|
|
68
|
-
token_value_map.update(
|
|
69
|
-
{
|
|
70
|
-
"<DEPENDENCY_NAME>": dependency.pod_name_temp,
|
|
71
|
-
"<DEPENDENCY_VERSION>": dependency_version,
|
|
72
|
-
}
|
|
73
|
-
)
|
|
74
|
-
print(f"[log] token_value_map: {json.dumps(token_value_map, indent=4)}")
|
|
75
|
-
|
|
76
|
-
is_core = isinstance(package, CoreDependency)
|
|
77
|
-
package_name = "Core" if is_core else package.name
|
|
78
|
-
package_name = "FaceCore" if package.name[0:8] == "FaceCore" else package_name
|
|
79
|
-
template_filepath = _this_filepath / "templates" / f"{package_name}.podspec"
|
|
80
|
-
output_filepath = f"{output_location_directory}/{package.pod_name_temp}.podspec"
|
|
81
|
-
with open(template_filepath, "rt") as fin, open(output_filepath, "wt") as fout:
|
|
82
|
-
for line in fin:
|
|
83
|
-
for token, value in token_value_map.items():
|
|
84
|
-
line = line.replace(token, value)
|
|
85
|
-
fout.write(line)
|
|
86
|
-
|
|
87
|
-
print(f"[log] {package.pod_name_temp}.podspec created at: {output_filepath}")
|
|
88
|
-
return output_filepath
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
Pod::Spec.new do |s|
|
|
2
|
-
s.name = '<POD_NAME>'
|
|
3
|
-
s.version = '<VERSION>'
|
|
4
|
-
s.summary = 'Framework for reading and authenticity verification of identity documents using the Regula mobile document authenticator'
|
|
5
|
-
s.license = {
|
|
6
|
-
type: 'commercial',
|
|
7
|
-
text: <<-LICENSE
|
|
8
|
-
© <YEAR> RegulaForensics. All rights reserved.
|
|
9
|
-
LICENSE
|
|
10
|
-
}
|
|
11
|
-
s.homepage = 'https://mobile.regulaforensics.com'
|
|
12
|
-
s.author = { 'RegulaForensics' => 'support@regulaforensics.com' }
|
|
13
|
-
s.source = { http: '<FTP_SOURCE_URL>' }
|
|
14
|
-
s.platform = :ios
|
|
15
|
-
s.ios.deployment_target = '11.0.0'
|
|
16
|
-
s.ios.vendored_frameworks = 'BTDevice.xcframework'
|
|
17
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
Pod::Spec.new do |s|
|
|
2
|
-
s.name = '<POD_NAME>'
|
|
3
|
-
s.version = '<VERSION>'
|
|
4
|
-
s.summary = 'Document Reader Core framework for fast and accurate data extraction from identity documents'
|
|
5
|
-
s.license = {
|
|
6
|
-
type: 'commercial',
|
|
7
|
-
text: <<-LICENSE
|
|
8
|
-
© <YEAR> RegulaForensics. All rights reserved.
|
|
9
|
-
LICENSE
|
|
10
|
-
}
|
|
11
|
-
s.homepage = 'https://mobile.regulaforensics.com'
|
|
12
|
-
s.author = { 'RegulaForensics' => 'support@regulaforensics.com' }
|
|
13
|
-
s.source = { http: '<FTP_SOURCE_URL>' }
|
|
14
|
-
s.platform = :ios
|
|
15
|
-
s.ios.deployment_target = '11.0.0'
|
|
16
|
-
s.ios.vendored_frameworks = 'DocumentReaderCore.xcframework'
|
|
17
|
-
end
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
Pod::Spec.new do |s|
|
|
2
|
-
s.name = '<POD_NAME>'
|
|
3
|
-
s.version = '<VERSION>'
|
|
4
|
-
s.summary = 'Document Reader API framework for fast and accurate data extraction from identity documents'
|
|
5
|
-
s.license = {
|
|
6
|
-
type: 'commercial',
|
|
7
|
-
text: <<-LICENSE
|
|
8
|
-
© <YEAR> RegulaForensics. All rights reserved.
|
|
9
|
-
LICENSE
|
|
10
|
-
}
|
|
11
|
-
s.homepage = 'https://mobile.regulaforensics.com'
|
|
12
|
-
s.author = { 'RegulaForensics' => 'support@regulaforensics.com' }
|
|
13
|
-
s.source = { http: '<FTP_SOURCE_URL>' }
|
|
14
|
-
s.platform = :ios
|
|
15
|
-
s.weak_frameworks = 'CoreNFC'
|
|
16
|
-
s.ios.deployment_target = '11.0.0'
|
|
17
|
-
s.ios.vendored_frameworks = 'DocumentReader.xcframework'
|
|
18
|
-
s.dependency '<DEPENDENCY_NAME>', '<DEPENDENCY_VERSION>'
|
|
19
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
Pod::Spec.new do |s|
|
|
2
|
-
s.name = '<POD_NAME>'
|
|
3
|
-
s.version = '<VERSION>'
|
|
4
|
-
s.summary = 'Face Core framework for face matching, face recognition, and liveness detection'
|
|
5
|
-
s.license = {
|
|
6
|
-
type: 'commercial',
|
|
7
|
-
text: <<-LICENSE
|
|
8
|
-
© <YEAR> RegulaForensics. All rights reserved.
|
|
9
|
-
LICENSE
|
|
10
|
-
}
|
|
11
|
-
s.homepage = 'https://mobile.regulaforensics.com'
|
|
12
|
-
s.author = { 'RegulaForensics' => 'support@regulaforensics.com' }
|
|
13
|
-
s.source = { http: '<FTP_SOURCE_URL>' }
|
|
14
|
-
s.platform = :ios
|
|
15
|
-
s.ios.deployment_target = '11.0.0'
|
|
16
|
-
s.ios.vendored_frameworks = 'Liveness.xcframework'
|
|
17
|
-
end
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
Pod::Spec.new do |s|
|
|
2
|
-
s.name = '<POD_NAME>'
|
|
3
|
-
s.version = '<VERSION>'
|
|
4
|
-
s.summary = 'Framework for face matching, face recognition, and liveness detection'
|
|
5
|
-
s.license = {
|
|
6
|
-
type: 'commercial',
|
|
7
|
-
text: <<-LICENSE
|
|
8
|
-
© <YEAR> RegulaForensics. All rights reserved.
|
|
9
|
-
LICENSE
|
|
10
|
-
}
|
|
11
|
-
s.homepage = 'https://mobile.regulaforensics.com'
|
|
12
|
-
s.author = { 'RegulaForensics' => 'support@regulaforensics.com' }
|
|
13
|
-
s.source = { http: '<FTP_SOURCE_URL>' }
|
|
14
|
-
s.platform = :ios
|
|
15
|
-
s.ios.deployment_target = '11.0.0'
|
|
16
|
-
s.ios.vendored_frameworks = 'FaceSDK.xcframework'
|
|
17
|
-
s.dependency '<DEPENDENCY_NAME>', '<DEPENDENCY_VERSION>'
|
|
18
|
-
end
|