artefacts-cli 0.8.0__py3-none-any.whl → 0.9.2__py3-none-any.whl
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.
- artefacts/cli/__init__.py +67 -19
- artefacts/cli/app.py +196 -167
- artefacts/cli/app_containers.py +97 -25
- artefacts/cli/app_containers.pyi +3 -0
- artefacts/cli/bagparser.py +4 -0
- artefacts/cli/config.py +62 -0
- artefacts/cli/constants.py +7 -0
- artefacts/cli/containers/__init__.py +5 -5
- artefacts/cli/containers/docker_cm.py +175 -0
- artefacts/cli/containers/docker_utils.py +98 -0
- artefacts/cli/containers/utils.py +20 -8
- artefacts/cli/helpers.py +55 -0
- artefacts/cli/i18n.py +35 -0
- artefacts/cli/locales/art.pot +524 -0
- artefacts/cli/locales/base.pot +995 -0
- artefacts/cli/locales/click.pot +496 -0
- artefacts/cli/other.py +1 -0
- artefacts/cli/ros1.py +21 -6
- artefacts/cli/ros2.py +10 -3
- artefacts/cli/utils.py +8 -4
- artefacts/cli/utils_ros.py +35 -9
- artefacts/cli/version.py +2 -2
- artefacts/copava/__init__.py +1 -0
- {artefacts_cli-0.8.0.dist-info → artefacts_cli-0.9.2.dist-info}/METADATA +10 -3
- artefacts_cli-0.9.2.dist-info/RECORD +33 -0
- {artefacts_cli-0.8.0.dist-info → artefacts_cli-0.9.2.dist-info}/WHEEL +1 -1
- artefacts/cli/containers/docker.py +0 -119
- artefacts_cli-0.8.0.dist-info/RECORD +0 -24
- {artefacts_cli-0.8.0.dist-info → artefacts_cli-0.9.2.dist-info}/entry_points.txt +0 -0
- {artefacts_cli-0.8.0.dist-info → artefacts_cli-0.9.2.dist-info}/top_level.txt +0 -0
@@ -1,9 +1,9 @@
|
|
1
1
|
import sys
|
2
2
|
|
3
|
-
from collections.abc import
|
3
|
+
from collections.abc import Iterator
|
4
4
|
from typing import Any, Tuple
|
5
5
|
|
6
|
-
from artefacts.cli import errors
|
6
|
+
from artefacts.cli import errors, localise
|
7
7
|
from artefacts.cli.containers import CMgr
|
8
8
|
from artefacts.cli.logger import logger
|
9
9
|
|
@@ -19,7 +19,11 @@ class ContainerMgr:
|
|
19
19
|
self.mgr = self._configure()
|
20
20
|
if self.mgr is None:
|
21
21
|
self.logger.error(
|
22
|
-
|
22
|
+
localise(
|
23
|
+
"Failed to find supported container stack. Please install and start one of {engines}, with default settings (custom sockets not supported at this stage)".format(
|
24
|
+
engines=list(self.SUPPORTED_PRIORITISED_ENGINES.values())
|
25
|
+
)
|
26
|
+
)
|
23
27
|
)
|
24
28
|
sys.exit(errors.CONTAINER_ENGINE_NOT_FOUND)
|
25
29
|
|
@@ -32,18 +36,26 @@ class ContainerMgr:
|
|
32
36
|
manager = handler()
|
33
37
|
except AttributeError:
|
34
38
|
self.logger.warning(
|
35
|
-
|
39
|
+
localise(
|
40
|
+
"Tried to detect an unsupported engine: {engine}. WIP? Ignore and continue.".format(
|
41
|
+
engine=engine
|
42
|
+
)
|
43
|
+
)
|
36
44
|
)
|
37
45
|
except Exception as e:
|
38
46
|
self.logger.warning(
|
39
|
-
|
47
|
+
localise(
|
48
|
+
"Problem in detecting {engine} ({message}) Ignore and continue.".format(
|
49
|
+
engine=engine, message=e
|
50
|
+
)
|
51
|
+
)
|
40
52
|
)
|
41
53
|
if manager is not None:
|
42
54
|
break
|
43
55
|
return manager
|
44
56
|
|
45
57
|
def _configure_docker(self):
|
46
|
-
from artefacts.cli.containers.
|
58
|
+
from artefacts.cli.containers.docker_cm import DockerManager
|
47
59
|
|
48
60
|
return DockerManager()
|
49
61
|
|
@@ -51,11 +63,11 @@ class ContainerMgr:
|
|
51
63
|
# from artefacts.cli.containers import podman
|
52
64
|
# return PodmanManager()
|
53
65
|
|
54
|
-
def build(self, **kwargs) -> Tuple[str,
|
66
|
+
def build(self, **kwargs) -> Tuple[str, Iterator]:
|
55
67
|
return self.mgr.build(**kwargs)
|
56
68
|
|
57
69
|
def check(self, image: str) -> bool:
|
58
70
|
return self.mgr.check(image)
|
59
71
|
|
60
|
-
def run(self, **kwargs) -> Tuple[Any,
|
72
|
+
def run(self, **kwargs) -> Tuple[Any, Iterator]:
|
61
73
|
return self.mgr.run(**kwargs)
|
artefacts/cli/helpers.py
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
import configparser
|
2
|
+
import os
|
3
|
+
import subprocess
|
4
|
+
|
5
|
+
from artefacts.cli.constants import CONFIG_PATH, CONFIG_DIR
|
6
|
+
|
7
|
+
|
8
|
+
def get_git_revision_hash() -> str:
|
9
|
+
try:
|
10
|
+
return (
|
11
|
+
subprocess.check_output(["git", "rev-parse", "HEAD"])
|
12
|
+
.decode("ascii")
|
13
|
+
.strip()
|
14
|
+
)
|
15
|
+
except subprocess.CalledProcessError:
|
16
|
+
return ""
|
17
|
+
|
18
|
+
|
19
|
+
def get_git_revision_branch() -> str:
|
20
|
+
try:
|
21
|
+
return (
|
22
|
+
subprocess.check_output(["git", "rev-parse", "--abbrev-ref", "HEAD"])
|
23
|
+
.decode("ascii")
|
24
|
+
.strip()
|
25
|
+
)
|
26
|
+
except subprocess.CalledProcessError:
|
27
|
+
return ""
|
28
|
+
|
29
|
+
|
30
|
+
def get_conf_from_file():
|
31
|
+
config = configparser.ConfigParser()
|
32
|
+
if not os.path.isfile(CONFIG_PATH):
|
33
|
+
os.makedirs(CONFIG_DIR, exist_ok=True)
|
34
|
+
config["DEFAULT"] = {}
|
35
|
+
with open(CONFIG_PATH, "w") as f:
|
36
|
+
config.write(f)
|
37
|
+
config.read(CONFIG_PATH)
|
38
|
+
return config
|
39
|
+
|
40
|
+
|
41
|
+
def get_artefacts_api_url(project_profile):
|
42
|
+
return os.environ.get(
|
43
|
+
"ARTEFACTS_API_URL",
|
44
|
+
project_profile.get(
|
45
|
+
"ApiUrl",
|
46
|
+
"https://app.artefacts.com/api",
|
47
|
+
),
|
48
|
+
)
|
49
|
+
|
50
|
+
|
51
|
+
def add_key_to_conf(project_name, api_key):
|
52
|
+
config = get_conf_from_file()
|
53
|
+
config[project_name] = {"ApiKey": api_key}
|
54
|
+
with open(CONFIG_PATH, "w") as f:
|
55
|
+
config.write(f)
|
artefacts/cli/i18n.py
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
import gettext
|
2
|
+
import importlib.resources
|
3
|
+
import os
|
4
|
+
import locale
|
5
|
+
import sys
|
6
|
+
|
7
|
+
|
8
|
+
# Ensure env var requirements for gettext are fulfilled
|
9
|
+
if sys.platform.startswith("win"):
|
10
|
+
if os.getenv("LANG") is None:
|
11
|
+
lang, _ = locale.getdefaultlocale()
|
12
|
+
os.environ["LANG"] = lang
|
13
|
+
|
14
|
+
|
15
|
+
# Get path to the locale directory
|
16
|
+
try:
|
17
|
+
_localedir = importlib.resources.files("artefacts.cli") / "locales"
|
18
|
+
except FileNotFoundError:
|
19
|
+
#
|
20
|
+
# Encountered in our trials with Python 3.10 and 3.11, so fallback to pkg_resources
|
21
|
+
#
|
22
|
+
# pkg_resources is removed from setuptools in Python 3.12. From there, importlib works.
|
23
|
+
#
|
24
|
+
from pkg_resources import resource_filename
|
25
|
+
|
26
|
+
_localedir = str(resource_filename("artefacts.cli", "locales"))
|
27
|
+
|
28
|
+
|
29
|
+
# Setup the GNU gettext API
|
30
|
+
gettext.bindtextdomain("artefacts", _localedir)
|
31
|
+
gettext.textdomain("artefacts")
|
32
|
+
|
33
|
+
|
34
|
+
# Expose for other modules to import
|
35
|
+
localise = gettext.gettext
|
@@ -0,0 +1,524 @@
|
|
1
|
+
# Translations template for artefacts.
|
2
|
+
# Copyright (C) 2025 Asteria ART
|
3
|
+
# This file is distributed under the same license as the artefacts project.
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, 2025.
|
5
|
+
#
|
6
|
+
#, fuzzy
|
7
|
+
msgid ""
|
8
|
+
msgstr ""
|
9
|
+
"Project-Id-Version: artefacts 0.9.2.dev8\n"
|
10
|
+
"Report-Msgid-Bugs-To: dev@artefacts.com\n"
|
11
|
+
"POT-Creation-Date: 2025-05-12 11:10+0900\n"
|
12
|
+
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
13
|
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
14
|
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
15
|
+
"MIME-Version: 1.0\n"
|
16
|
+
"Content-Type: text/plain; charset=utf-8\n"
|
17
|
+
"Content-Transfer-Encoding: 8bit\n"
|
18
|
+
"Generated-By: Babel 2.17.0\n"
|
19
|
+
|
20
|
+
#: artefacts/cli/__init__.py:28
|
21
|
+
#, python-brace-format
|
22
|
+
msgid "Could not determine package version: {error_message}. Default to 0.0.0"
|
23
|
+
msgstr ""
|
24
|
+
|
25
|
+
#: artefacts/cli/__init__.py:99
|
26
|
+
#, python-brace-format
|
27
|
+
msgid "Error on job creation: {status_code}"
|
28
|
+
msgstr ""
|
29
|
+
|
30
|
+
#: artefacts/cli/__init__.py:179
|
31
|
+
#, python-brace-format
|
32
|
+
msgid "Error on scenario creation: {status_code}"
|
33
|
+
msgstr ""
|
34
|
+
|
35
|
+
#: artefacts/cli/__init__.py:290
|
36
|
+
msgid ""
|
37
|
+
"Files generated by the job are not uploaded to Artefacts, including the "
|
38
|
+
"ones specified in output_dirs"
|
39
|
+
msgstr ""
|
40
|
+
|
41
|
+
#: artefacts/cli/__init__.py:302
|
42
|
+
#, python-brace-format
|
43
|
+
msgid "Uploading {file_name} ({file_size:.2f} MB)"
|
44
|
+
msgstr ""
|
45
|
+
|
46
|
+
#: artefacts/cli/__init__.py:316
|
47
|
+
#, python-brace-format
|
48
|
+
msgid "File too large: {file_name} could not be uploaded"
|
49
|
+
msgstr ""
|
50
|
+
|
51
|
+
#: artefacts/cli/__init__.py:324
|
52
|
+
#, python-brace-format
|
53
|
+
msgid "Error uploading {file_name}: {error_message}, skipping"
|
54
|
+
msgstr ""
|
55
|
+
|
56
|
+
#: artefacts/cli/app.py:57 artefacts/cli/app.py:104 artefacts/cli/app.py:117
|
57
|
+
msgid "PROJECT_NAME"
|
58
|
+
msgstr ""
|
59
|
+
|
60
|
+
#: artefacts/cli/app.py:76
|
61
|
+
#, python-brace-format
|
62
|
+
msgid "Opening the project settings page: {url}"
|
63
|
+
msgstr ""
|
64
|
+
|
65
|
+
#: artefacts/cli/app.py:81
|
66
|
+
#, python-brace-format
|
67
|
+
msgid "Please enter your API KEY for {project}"
|
68
|
+
msgstr ""
|
69
|
+
|
70
|
+
#: artefacts/cli/app.py:88
|
71
|
+
#, python-brace-format
|
72
|
+
msgid "API KEY saved for {project}"
|
73
|
+
msgstr ""
|
74
|
+
|
75
|
+
#: artefacts/cli/app.py:91
|
76
|
+
msgid ""
|
77
|
+
"Would you like to download the generated artefacts.yaml file? This will "
|
78
|
+
"overwrite any existing config file in the current directory."
|
79
|
+
msgstr ""
|
80
|
+
|
81
|
+
#: artefacts/cli/app.py:113
|
82
|
+
#, python-brace-format
|
83
|
+
msgid "{project} config removed"
|
84
|
+
msgstr ""
|
85
|
+
|
86
|
+
#: artefacts/cli/app.py:133 artefacts/cli/app.py:635 artefacts/cli/app.py:641
|
87
|
+
#, python-brace-format
|
88
|
+
msgid "Error getting project info: {message}"
|
89
|
+
msgstr ""
|
90
|
+
|
91
|
+
#: artefacts/cli/app.py:144 artefacts/cli/app.py:518
|
92
|
+
#: artefacts/cli/app_containers.py:187
|
93
|
+
msgid "JOBNAME"
|
94
|
+
msgstr ""
|
95
|
+
|
96
|
+
#: artefacts/cli/app.py:149 artefacts/cli/app.py:502
|
97
|
+
msgid "Artefacts configuration file."
|
98
|
+
msgstr ""
|
99
|
+
|
100
|
+
#: artefacts/cli/app.py:155
|
101
|
+
msgid "Run with no tracking nor test execution"
|
102
|
+
msgstr ""
|
103
|
+
|
104
|
+
#: artefacts/cli/app.py:161
|
105
|
+
msgid "Skip configuring a simulator resource provided by Artefacts"
|
106
|
+
msgstr ""
|
107
|
+
|
108
|
+
#: artefacts/cli/app.py:168
|
109
|
+
msgid "Do not upload to Artefacts files generated during a run (e.g. rosbags)"
|
110
|
+
msgstr ""
|
111
|
+
|
112
|
+
#: artefacts/cli/app.py:176
|
113
|
+
msgid ""
|
114
|
+
"Break the 'middleware network' isolation between the test suite and the "
|
115
|
+
"host (in ROS1: --reuse-master flag; in ROS2: --disable-isolation flag). "
|
116
|
+
"Primarily for debugging"
|
117
|
+
msgstr ""
|
118
|
+
|
119
|
+
#: artefacts/cli/app.py:182 artefacts/cli/app.py:507
|
120
|
+
msgid "Optional description for this run"
|
121
|
+
msgstr ""
|
122
|
+
|
123
|
+
#: artefacts/cli/app.py:190 artefacts/cli/app.py:515
|
124
|
+
msgid ""
|
125
|
+
"Skip configuration validation, so that unsupported settings can be tried "
|
126
|
+
"out, e.g. non-ROS settings or simulators like SAPIEN."
|
127
|
+
msgstr ""
|
128
|
+
|
129
|
+
#: artefacts/cli/app.py:198
|
130
|
+
msgid ""
|
131
|
+
"[Experimental] Run the job inside a package container. The container "
|
132
|
+
"image is build if it does not exist yet, with default name as "
|
133
|
+
"\"artefacts\" (please use --with-image to override the image name). This "
|
134
|
+
"option overrides (for now) --dryrun, --nosim, --noisolation and "
|
135
|
+
"--description."
|
136
|
+
msgstr ""
|
137
|
+
|
138
|
+
#: artefacts/cli/app.py:205
|
139
|
+
msgid ""
|
140
|
+
"[Experimental] Path to a custom Dockerfile. Defaults to Dockerfile in the"
|
141
|
+
" run directory. This flag is only used together with `--in-container`"
|
142
|
+
msgstr ""
|
143
|
+
|
144
|
+
#: artefacts/cli/app.py:212
|
145
|
+
msgid ""
|
146
|
+
"[Deprecated and unused from 0.8.0; Image names are now internally "
|
147
|
+
"managed] Run the job using the image name passed here. Only used when "
|
148
|
+
"running with --in-container set."
|
149
|
+
msgstr ""
|
150
|
+
|
151
|
+
#: artefacts/cli/app.py:220
|
152
|
+
msgid ""
|
153
|
+
"[Experimental] Override the default behaviour to always rebuild the "
|
154
|
+
"container image (as we assume incremental testing)."
|
155
|
+
msgstr ""
|
156
|
+
|
157
|
+
#: artefacts/cli/app.py:228
|
158
|
+
msgid ""
|
159
|
+
"Show any GUI if any is created by the test runs. By default, UI elements "
|
160
|
+
"are run but hidden---only test logs are returned. Please note GUI often "
|
161
|
+
"assume X11 (e.g. ROS), typically with Qt, so this may not work without a "
|
162
|
+
"appropriate environment."
|
163
|
+
msgstr ""
|
164
|
+
|
165
|
+
#: artefacts/cli/app.py:277
|
166
|
+
msgid "Checking container image"
|
167
|
+
msgstr ""
|
168
|
+
|
169
|
+
#: artefacts/cli/app.py:285
|
170
|
+
msgid "Container image ready"
|
171
|
+
msgstr ""
|
172
|
+
|
173
|
+
#: artefacts/cli/app.py:286
|
174
|
+
msgid "Run in container"
|
175
|
+
msgstr ""
|
176
|
+
|
177
|
+
#: artefacts/cli/app.py:296
|
178
|
+
msgid "Starting tests"
|
179
|
+
msgstr ""
|
180
|
+
|
181
|
+
#: artefacts/cli/app.py:299
|
182
|
+
msgid "Error: Job name not defined"
|
183
|
+
msgstr ""
|
184
|
+
|
185
|
+
#: artefacts/cli/app.py:309
|
186
|
+
#, python-brace-format
|
187
|
+
msgid "Job type not supported: {jt}"
|
188
|
+
msgstr ""
|
189
|
+
|
190
|
+
#: artefacts/cli/app.py:321
|
191
|
+
#, python-brace-format
|
192
|
+
msgid "The selected framework '{framework}' is deprecated. Using '{alt}' instead."
|
193
|
+
msgstr ""
|
194
|
+
|
195
|
+
#: artefacts/cli/app.py:330
|
196
|
+
#, python-brace-format
|
197
|
+
msgid ""
|
198
|
+
"WARNING: framework: '{framework}' is not officially supported. Attempting"
|
199
|
+
" run."
|
200
|
+
msgstr ""
|
201
|
+
|
202
|
+
#: artefacts/cli/app.py:339
|
203
|
+
#, python-brace-format
|
204
|
+
msgid "AWS BATCH ARRAY DETECTED, batch_index={index}"
|
205
|
+
msgstr ""
|
206
|
+
|
207
|
+
#: artefacts/cli/app.py:368
|
208
|
+
msgid ""
|
209
|
+
"Unable to authenticate (Stage: Job initialisation), please check your "
|
210
|
+
"project name and API key"
|
211
|
+
msgstr ""
|
212
|
+
|
213
|
+
#: artefacts/cli/app.py:379
|
214
|
+
#, python-brace-format
|
215
|
+
msgid "Starting scenario {sid}/{num}: {name}"
|
216
|
+
msgstr ""
|
217
|
+
|
218
|
+
#: artefacts/cli/app.py:389
|
219
|
+
msgid ""
|
220
|
+
"Unable to authenticate (Stage: Job run), please check your project name "
|
221
|
+
"and API key"
|
222
|
+
msgstr ""
|
223
|
+
|
224
|
+
#: artefacts/cli/app.py:402
|
225
|
+
msgid "Test launch file not specified for ros2 project"
|
226
|
+
msgstr ""
|
227
|
+
|
228
|
+
#: artefacts/cli/app.py:408
|
229
|
+
msgid "launch_test file not specified error"
|
230
|
+
msgstr ""
|
231
|
+
|
232
|
+
#: artefacts/cli/app.py:410
|
233
|
+
msgid ""
|
234
|
+
"Please specify a `ros_testfile` in the artefacts.yaml scenario "
|
235
|
+
"configuration."
|
236
|
+
msgstr ""
|
237
|
+
|
238
|
+
#: artefacts/cli/app.py:416 artefacts/cli/app.py:459 artefacts/cli/app.py:477
|
239
|
+
msgid "Performing dry run"
|
240
|
+
msgstr ""
|
241
|
+
|
242
|
+
#: artefacts/cli/app.py:427
|
243
|
+
msgid "Artefacts failed to execute the tests"
|
244
|
+
msgstr ""
|
245
|
+
|
246
|
+
#: artefacts/cli/app.py:439
|
247
|
+
msgid ""
|
248
|
+
"Not able to execute tests. Make sure that ROS2 is sourced and that your "
|
249
|
+
"launch file syntax is correct."
|
250
|
+
msgstr ""
|
251
|
+
|
252
|
+
#: artefacts/cli/app.py:453
|
253
|
+
msgid "Test launch file not specified for ros1 project"
|
254
|
+
msgstr ""
|
255
|
+
|
256
|
+
#: artefacts/cli/app.py:471
|
257
|
+
msgid "run command not specified for scenario"
|
258
|
+
msgstr ""
|
259
|
+
|
260
|
+
#: artefacts/cli/app.py:491
|
261
|
+
msgid "Done"
|
262
|
+
msgstr ""
|
263
|
+
|
264
|
+
#: artefacts/cli/app.py:530 artefacts/cli/app_containers.py:231
|
265
|
+
#, python-brace-format
|
266
|
+
msgid "Project config file not found: {config}"
|
267
|
+
msgstr ""
|
268
|
+
|
269
|
+
#: artefacts/cli/app.py:542
|
270
|
+
#, python-brace-format
|
271
|
+
msgid "Can't find a job named '{jobname}' in config '{config}'"
|
272
|
+
msgstr ""
|
273
|
+
|
274
|
+
#: artefacts/cli/app.py:562
|
275
|
+
msgid "Packaging source..."
|
276
|
+
msgstr ""
|
277
|
+
|
278
|
+
#: artefacts/cli/app.py:608
|
279
|
+
#, python-brace-format
|
280
|
+
msgid ""
|
281
|
+
"Apologies, problem in interacting with the Artefacts backend: "
|
282
|
+
"{status_code} {reason}. Response text: {detail}."
|
283
|
+
msgstr ""
|
284
|
+
|
285
|
+
#: artefacts/cli/app.py:622
|
286
|
+
#, python-brace-format
|
287
|
+
msgid "Missing access! Please make sure your API key is added at {url}/settings"
|
288
|
+
msgstr ""
|
289
|
+
|
290
|
+
#: artefacts/cli/app.py:629
|
291
|
+
#, python-brace-format
|
292
|
+
msgid "Billing issue, please go to {url}/settings to correct: {error}"
|
293
|
+
msgstr ""
|
294
|
+
|
295
|
+
#: artefacts/cli/app.py:648
|
296
|
+
#, python-brace-format
|
297
|
+
msgid ""
|
298
|
+
"Error getting project info: {status_code} {reason}. Response text: "
|
299
|
+
"{detail}."
|
300
|
+
msgstr ""
|
301
|
+
|
302
|
+
#: artefacts/cli/app.py:664
|
303
|
+
msgid "Testing local source"
|
304
|
+
msgstr ""
|
305
|
+
|
306
|
+
#: artefacts/cli/app.py:713
|
307
|
+
#, python-brace-format
|
308
|
+
msgid "Uploading complete! The new job will show up shortly at {url}"
|
309
|
+
msgstr ""
|
310
|
+
|
311
|
+
#: artefacts/cli/app_containers.py:28
|
312
|
+
msgid ""
|
313
|
+
"[Deprecated since 0.8.0; please see --root] Path to the root of the "
|
314
|
+
"project."
|
315
|
+
msgstr ""
|
316
|
+
|
317
|
+
#: artefacts/cli/app_containers.py:34
|
318
|
+
msgid "Path to the root of the project."
|
319
|
+
msgstr ""
|
320
|
+
|
321
|
+
#: artefacts/cli/app_containers.py:40
|
322
|
+
msgid ""
|
323
|
+
"Path to a custom Dockerfile. Defaults to Dockerfile under `path` (see "
|
324
|
+
"option of the same name)."
|
325
|
+
msgstr ""
|
326
|
+
|
327
|
+
#: artefacts/cli/app_containers.py:47
|
328
|
+
msgid ""
|
329
|
+
"[Deprecated since 0.8.0; not used and will disappear after 0.8.0] Name "
|
330
|
+
"for the generated image"
|
331
|
+
msgstr ""
|
332
|
+
|
333
|
+
#: artefacts/cli/app_containers.py:55 artefacts/cli/app_containers.py:193
|
334
|
+
msgid ""
|
335
|
+
"Path to the Artefacts configuration file. It defaults to "
|
336
|
+
"`./artefacts.yaml`"
|
337
|
+
msgstr ""
|
338
|
+
|
339
|
+
#: artefacts/cli/app_containers.py:64
|
340
|
+
msgid "Optional list of job names to process. The default is to process all jobs."
|
341
|
+
msgstr ""
|
342
|
+
|
343
|
+
#: artefacts/cli/app_containers.py:82
|
344
|
+
#, python-brace-format
|
345
|
+
msgid ""
|
346
|
+
"Project config file not found: {config}. Please provide an Artefacts "
|
347
|
+
"configuration file to proceed (running `artefacts init` allows to "
|
348
|
+
"generate one)."
|
349
|
+
msgstr ""
|
350
|
+
|
351
|
+
#: artefacts/cli/app_containers.py:106
|
352
|
+
#, python-brace-format
|
353
|
+
msgid ""
|
354
|
+
"Dockerfile `{dockerfile}` not found. Please ensure the file exits. "
|
355
|
+
"Automatic Dockerfile generation may also work by dropping the "
|
356
|
+
"--dockerfile option."
|
357
|
+
msgstr ""
|
358
|
+
|
359
|
+
#: artefacts/cli/app_containers.py:123
|
360
|
+
#, python-brace-format
|
361
|
+
msgid ""
|
362
|
+
"No {dockerfile} found here. Let's generate one per scenario based on "
|
363
|
+
"artefacts.yaml. They will be available under the `{dest_root}` folder and"
|
364
|
+
" used from there."
|
365
|
+
msgstr ""
|
366
|
+
|
367
|
+
#: artefacts/cli/app_containers.py:143
|
368
|
+
#, python-brace-format
|
369
|
+
msgid "Using generated Dockerfile at: {dockerfile}"
|
370
|
+
msgstr ""
|
371
|
+
|
372
|
+
#: artefacts/cli/app_containers.py:161
|
373
|
+
msgid "No Dockerfile, nothing to do."
|
374
|
+
msgstr ""
|
375
|
+
|
376
|
+
#: artefacts/cli/app_containers.py:165
|
377
|
+
msgid "IMAGE_NAME"
|
378
|
+
msgstr ""
|
379
|
+
|
380
|
+
#: artefacts/cli/app_containers.py:175
|
381
|
+
#, python-brace-format
|
382
|
+
msgid "Container image {name} exists and ready to use."
|
383
|
+
msgstr ""
|
384
|
+
|
385
|
+
#: artefacts/cli/app_containers.py:201
|
386
|
+
msgid ""
|
387
|
+
"Show any GUI if any is created by the test runs. By default, UI elements "
|
388
|
+
"are run but hidden---only test logs are returned. Please note GUI often "
|
389
|
+
"assume an X11 environment, typically with Qt, so this may not work "
|
390
|
+
"without a appropriate environment."
|
391
|
+
msgstr ""
|
392
|
+
|
393
|
+
#: artefacts/cli/app_containers.py:249
|
394
|
+
#, python-brace-format
|
395
|
+
msgid "Container run complete: Container Id for inspection: {container_id}"
|
396
|
+
msgstr ""
|
397
|
+
|
398
|
+
#: artefacts/cli/app_containers.py:255
|
399
|
+
msgid "Package run failed:"
|
400
|
+
msgstr ""
|
401
|
+
|
402
|
+
#: artefacts/cli/config.py:31
|
403
|
+
#, python-brace-format
|
404
|
+
msgid "No API KEY set. Please run `artefacts config add {project_name}`"
|
405
|
+
msgstr ""
|
406
|
+
|
407
|
+
#: artefacts/cli/config.py:50 artefacts/cli/config.py:58
|
408
|
+
#, python-brace-format
|
409
|
+
msgid "Connecting to {api_url} using {auth_type}"
|
410
|
+
msgstr ""
|
411
|
+
|
412
|
+
#: artefacts/cli/ros1.py:55
|
413
|
+
msgid ""
|
414
|
+
"[warning in generate_rosbag_args] rosbag_record asks for 'subscriptions' "
|
415
|
+
"but they are not specified. Falling back to default: no rosbag will be "
|
416
|
+
"recorded"
|
417
|
+
msgstr ""
|
418
|
+
|
419
|
+
#: artefacts/cli/ros1.py:108
|
420
|
+
#, python-brace-format
|
421
|
+
msgid "[Exception in get_result_path()] {message}"
|
422
|
+
msgstr ""
|
423
|
+
|
424
|
+
#: artefacts/cli/ros1.py:112
|
425
|
+
#, python-brace-format
|
426
|
+
msgid ""
|
427
|
+
"Unable to parse the ros1 .launch specified ({testfile}) and the <test> "
|
428
|
+
"tag within to find the unittest test method's name."
|
429
|
+
msgstr ""
|
430
|
+
|
431
|
+
#: artefacts/cli/ros1.py:119
|
432
|
+
msgid ""
|
433
|
+
"Please ensure all ROS and unittest naming conventions are respected. "
|
434
|
+
"Exiting.."
|
435
|
+
msgstr ""
|
436
|
+
|
437
|
+
#: artefacts/cli/ros1.py:227
|
438
|
+
#, python-brace-format
|
439
|
+
msgid "New rosbag found: {file_name}"
|
440
|
+
msgstr ""
|
441
|
+
|
442
|
+
#: artefacts/cli/ros1.py:233
|
443
|
+
msgid "starting rosbag postprocess"
|
444
|
+
msgstr ""
|
445
|
+
|
446
|
+
#: artefacts/cli/ros2.py:73
|
447
|
+
msgid ""
|
448
|
+
"Problem with parameter name. Please ensure params are in the format "
|
449
|
+
"`node/param`"
|
450
|
+
msgstr ""
|
451
|
+
|
452
|
+
#: artefacts/cli/utils.py:81
|
453
|
+
#, python-brace-format
|
454
|
+
msgid "Project config file {file_name} not found."
|
455
|
+
msgstr ""
|
456
|
+
|
457
|
+
#: artefacts/cli/utils_ros.py:70
|
458
|
+
#, python-brace-format
|
459
|
+
msgid "[Exception in parse_tests_results] {message}"
|
460
|
+
msgstr ""
|
461
|
+
|
462
|
+
#: artefacts/cli/utils_ros.py:72
|
463
|
+
msgid "Test result xml could not be loaded, marking success as False"
|
464
|
+
msgstr ""
|
465
|
+
|
466
|
+
#: artefacts/cli/containers/docker_cm.py:82
|
467
|
+
#, python-brace-format
|
468
|
+
msgid ""
|
469
|
+
"Missing API key for the project. Does `{path}/config` exist and contain "
|
470
|
+
"your key? Alternatively ARTEFACTS_KEY can be set with the key."
|
471
|
+
msgstr ""
|
472
|
+
|
473
|
+
#: artefacts/cli/containers/docker_cm.py:160
|
474
|
+
#, python-brace-format
|
475
|
+
msgid "Image {image} not found by Docker. Perhaps need to build first?"
|
476
|
+
msgstr ""
|
477
|
+
|
478
|
+
#: artefacts/cli/containers/docker_cm.py:170
|
479
|
+
#, python-brace-format
|
480
|
+
msgid "Failed to run from {image}. All we know: {message}"
|
481
|
+
msgstr ""
|
482
|
+
|
483
|
+
#: artefacts/cli/containers/docker_utils.py:28
|
484
|
+
#, python-brace-format
|
485
|
+
msgid ""
|
486
|
+
"Invalid GPU device for Docker: {g} ({e}). Accepted device formats are "
|
487
|
+
"all, device=1 and \"device=1,2\" (with a list of devices, quotes must be "
|
488
|
+
"included"
|
489
|
+
msgstr ""
|
490
|
+
|
491
|
+
#: artefacts/cli/containers/docker_utils.py:38
|
492
|
+
#, python-brace-format
|
493
|
+
msgid ""
|
494
|
+
"Invalid GPU device for Docker: {g}. List of devices must be double-"
|
495
|
+
"quoted. Accepted device formats are all, device=1 and \"device=1,2\" "
|
496
|
+
"(with a list of devices, quotes must be included"
|
497
|
+
msgstr ""
|
498
|
+
|
499
|
+
#: artefacts/cli/containers/docker_utils.py:49
|
500
|
+
#, python-brace-format
|
501
|
+
msgid ""
|
502
|
+
"Invalid GPU device for Docker: {g}. Accepted device formats are all, "
|
503
|
+
"device=1 and \"device=1,2\" (with a list of devices, quotes must be "
|
504
|
+
"included"
|
505
|
+
msgstr ""
|
506
|
+
|
507
|
+
#: artefacts/cli/containers/utils.py:23
|
508
|
+
#, python-brace-format
|
509
|
+
msgid ""
|
510
|
+
"Failed to find supported container stack. Please install and start one of"
|
511
|
+
" {engines}, with default settings (custom sockets not supported at this "
|
512
|
+
"stage)"
|
513
|
+
msgstr ""
|
514
|
+
|
515
|
+
#: artefacts/cli/containers/utils.py:40
|
516
|
+
#, python-brace-format
|
517
|
+
msgid "Tried to detect an unsupported engine: {engine}. WIP? Ignore and continue."
|
518
|
+
msgstr ""
|
519
|
+
|
520
|
+
#: artefacts/cli/containers/utils.py:48
|
521
|
+
#, python-brace-format
|
522
|
+
msgid "Problem in detecting {engine} ({message}) Ignore and continue."
|
523
|
+
msgstr ""
|
524
|
+
|