mirror of
https://github.com/containers/podman-compose.git
synced 2025-05-29 22:49:09 +02:00
Merge pull request #763 from otto-liljalaakso-nt/additional_contexts
Support additional_contexts
This commit is contained in:
commit
8f618b6fab
@ -1464,6 +1464,12 @@ def normalize_service(service, sub_dir=""):
|
|||||||
if not context:
|
if not context:
|
||||||
context = "."
|
context = "."
|
||||||
service["build"]["context"] = context
|
service["build"]["context"] = context
|
||||||
|
if "build" in service and "additional_contexts" in service["build"]:
|
||||||
|
if is_dict(build["additional_contexts"]):
|
||||||
|
new_additional_contexts = []
|
||||||
|
for k, v in build["additional_contexts"].items():
|
||||||
|
new_additional_contexts.append(f"{k}={v}")
|
||||||
|
build["additional_contexts"] = new_additional_contexts
|
||||||
for key in ("command", "entrypoint"):
|
for key in ("command", "entrypoint"):
|
||||||
if key in service:
|
if key in service:
|
||||||
if is_str(service[key]):
|
if is_str(service[key]):
|
||||||
@ -2330,6 +2336,8 @@ async def build_one(compose, args, cnt):
|
|||||||
build_args.extend(get_secret_args(compose, cnt, secret, podman_is_building=True))
|
build_args.extend(get_secret_args(compose, cnt, secret, podman_is_building=True))
|
||||||
for tag in build_desc.get("tags", []):
|
for tag in build_desc.get("tags", []):
|
||||||
build_args.extend(["-t", tag])
|
build_args.extend(["-t", tag])
|
||||||
|
for additional_ctx in build_desc.get("additional_contexts", {}):
|
||||||
|
build_args.extend([f"--build-context={additional_ctx}"])
|
||||||
if "target" in build_desc:
|
if "target" in build_desc:
|
||||||
build_args.extend(["--target", build_desc["target"]])
|
build_args.extend(["--target", build_desc["target"]])
|
||||||
container_to_ulimit_build_args(cnt, build_args)
|
container_to_ulimit_build_args(cnt, build_args)
|
||||||
|
@ -20,6 +20,14 @@ class TestNormalizeService(unittest.TestCase):
|
|||||||
{"build": {"context": "./dir-1", "dockerfile": "dockerfile-1"}},
|
{"build": {"context": "./dir-1", "dockerfile": "dockerfile-1"}},
|
||||||
{"build": {"context": "./dir-1", "dockerfile": "dockerfile-1"}},
|
{"build": {"context": "./dir-1", "dockerfile": "dockerfile-1"}},
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
{"build": {"additional_contexts": ["ctx=../ctx", "ctx2=../ctx2"]}},
|
||||||
|
{"build": {"additional_contexts": ["ctx=../ctx", "ctx2=../ctx2"]}},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{"build": {"additional_contexts": {"ctx": "../ctx", "ctx2": "../ctx2"}}},
|
||||||
|
{"build": {"additional_contexts": ["ctx=../ctx", "ctx2=../ctx2"]}},
|
||||||
|
),
|
||||||
])
|
])
|
||||||
def test_simple(self, input, expected):
|
def test_simple(self, input, expected):
|
||||||
self.assertEqual(normalize_service(input), expected)
|
self.assertEqual(normalize_service(input), expected)
|
||||||
|
14
tests/additional_contexts/README.md
Normal file
14
tests/additional_contexts/README.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# Test podman-compose with build.additional_contexts
|
||||||
|
|
||||||
|
```
|
||||||
|
podman-compose build
|
||||||
|
podman-compose up
|
||||||
|
podman-compose down
|
||||||
|
```
|
||||||
|
|
||||||
|
expected output would be
|
||||||
|
|
||||||
|
```
|
||||||
|
[dict] | Data for dict
|
||||||
|
[list] | Data for list
|
||||||
|
```
|
1
tests/additional_contexts/data_for_dict/data.txt
Normal file
1
tests/additional_contexts/data_for_dict/data.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Data for dict
|
1
tests/additional_contexts/data_for_list/data.txt
Normal file
1
tests/additional_contexts/data_for_list/data.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Data for list
|
3
tests/additional_contexts/project/Dockerfile
Normal file
3
tests/additional_contexts/project/Dockerfile
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
FROM busybox
|
||||||
|
COPY --from=data data.txt /data/data.txt
|
||||||
|
CMD ["busybox", "cat", "/data/data.txt"]
|
12
tests/additional_contexts/project/docker-compose.yml
Normal file
12
tests/additional_contexts/project/docker-compose.yml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
version: "3.7"
|
||||||
|
services:
|
||||||
|
dict:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
additional_contexts:
|
||||||
|
data: ../data_for_dict
|
||||||
|
list:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
additional_contexts:
|
||||||
|
- data=../data_for_list
|
44
tests/test_podman_compose_additional_contexts.py
Normal file
44
tests/test_podman_compose_additional_contexts.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
|
|
||||||
|
|
||||||
|
"""Test how additional contexts are passed to podman."""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from .test_podman_compose import podman_compose_path
|
||||||
|
from .test_podman_compose import test_path
|
||||||
|
|
||||||
|
|
||||||
|
def compose_yaml_path():
|
||||||
|
""" "Returns the path to the compose file used for this test module"""
|
||||||
|
return os.path.join(test_path(), "additional_contexts", "project")
|
||||||
|
|
||||||
|
|
||||||
|
class TestComposeBuildAdditionalContexts(unittest.TestCase):
|
||||||
|
def test_build_additional_context(self):
|
||||||
|
"""podman build should receive additional contexts as --build-context
|
||||||
|
|
||||||
|
See additional_context/project/docker-compose.yaml for context paths
|
||||||
|
"""
|
||||||
|
cmd = (
|
||||||
|
"coverage",
|
||||||
|
"run",
|
||||||
|
podman_compose_path(),
|
||||||
|
"--dry-run",
|
||||||
|
"--verbose",
|
||||||
|
"-f",
|
||||||
|
os.path.join(compose_yaml_path(), "docker-compose.yml"),
|
||||||
|
"build",
|
||||||
|
)
|
||||||
|
p = subprocess.run(
|
||||||
|
cmd,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
check=False,
|
||||||
|
stderr=subprocess.STDOUT,
|
||||||
|
text=True,
|
||||||
|
)
|
||||||
|
self.assertEqual(p.returncode, 0)
|
||||||
|
self.assertIn("--build-context=data=../data_for_dict", p.stdout)
|
||||||
|
self.assertIn("--build-context=data=../data_for_list", p.stdout)
|
Loading…
x
Reference in New Issue
Block a user