Skip to content

Commit 1eed895

Browse files
committed
added "--add" command line option to add tar files as docker layers.
not currently supported with singularity.
1 parent f90b77f commit 1eed895

File tree

3 files changed

+69
-1
lines changed

3 files changed

+69
-1
lines changed

neurodocker/cli/generate.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,14 @@ def _get_common_renderer_params() -> list[click.Parameter]:
218218
" The last path is always the destination path in the container."
219219
),
220220
),
221+
OptionEatAll(
222+
["--add"],
223+
multiple=True,
224+
type=tuple,
225+
help=(
226+
"Extract a tar file as a layer in the container. Provide a source and destination path."
227+
),
228+
),
221229
OptionEatAll(
222230
["--env"],
223231
multiple=True,
@@ -340,6 +348,14 @@ def _get_instruction_for_param(ctx: click.Context, param: click.Parameter, value
340348
raise click.ClickException("expected at least two values for --copy")
341349
source, destination = list(value[:-1]), value[-1]
342350
d = {"name": param.name, "kwds": {"source": source, "destination": destination}}
351+
# add
352+
elif param.name == "add":
353+
if not isinstance(value, tuple):
354+
raise ValueError("expected this value to be a tuple (contact developers)")
355+
if len(value) < 2:
356+
raise click.ClickException("expected at least two values for --add")
357+
source, destination = value
358+
d = {"name": param.name, "kwds": {"source": source, "destination": destination}}
343359
# env
344360
elif param.name == "env":
345361
value = dict(value)

neurodocker/reproenv/renderers.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,13 @@ def copy(
373373
destination: PathType | list[PathType],
374374
) -> _Renderer:
375375
raise NotImplementedError()
376+
377+
def add(
378+
self,
379+
source: PathType,
380+
destination: PathType,
381+
) -> _Renderer:
382+
raise NotImplementedError()
376383

377384
def env(self, **kwds: str) -> _Renderer:
378385
raise NotImplementedError()
@@ -484,6 +491,17 @@ def copy(
484491
self._parts.append(s)
485492
return self
486493

494+
@_log_instruction
495+
def add(
496+
self,
497+
source: PathType,
498+
destination: PathType,
499+
) -> DockerRenderer:
500+
"""Add a Dockerfile `ADD` instruction."""
501+
s = f"ADD {source} {destination}"
502+
self._parts.append(s)
503+
return self
504+
487505
@_log_instruction
488506
def env(self, **kwds: str) -> DockerRenderer:
489507
"""Add a Dockerfile `ENV` instruction."""

neurodocker/reproenv/schemas/renderer.json

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@
5050
{
5151
"$ref": "#/definitions/copy"
5252
},
53+
{
54+
"$ref": "#/definitions/add"
55+
},
5356
{
5457
"$ref": "#/definitions/env"
5558
},
@@ -169,6 +172,37 @@
169172
"examples": [],
170173
"additionalProperties": false
171174
},
175+
"add": {
176+
"required": [
177+
"name",
178+
"kwds"
179+
],
180+
"properties": {
181+
"name": {
182+
"enum": [
183+
"add"
184+
]
185+
},
186+
"kwds": {
187+
"type": "object",
188+
"required": [
189+
"source",
190+
"destination"
191+
],
192+
"properties": {
193+
"source": {
194+
"type": "string"
195+
},
196+
"destination": {
197+
"type": "string"
198+
}
199+
},
200+
"additionalProperties": false
201+
}
202+
},
203+
"examples": [],
204+
"additionalProperties": false
205+
},
172206
"env": {
173207
"required": [
174208
"name",
@@ -394,4 +428,4 @@
394428
"additionalProperties": false
395429
}
396430
}
397-
}
431+
}

0 commit comments

Comments
 (0)