convert build context path to absolute during final normalisation

Signed-off-by: Sergei Biriukov <svbiriukov@gmail.com>
This commit is contained in:
Sergei Biriukov
2023-04-30 13:37:23 +10:00
committed by Muayyad Alsadi
parent 0164c1db56
commit d1f5ac9edc
2 changed files with 303 additions and 1 deletions

View File

@ -1,4 +1,4 @@
#! /usr/bin/python3
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# https://docs.docker.com/compose/compose-file/#service-configuration-reference
@ -24,6 +24,7 @@ import json
import glob
from threading import Thread
from pathlib import Path
import shlex
@ -1297,6 +1298,28 @@ def normalize(compose):
return compose
def normalize_service_final(service: dict, project_dir: str) -> dict:
if "build" in service:
build = service["build"]
context = build if is_str(build) else build.get("context", ".")
context = str((Path(project_dir) / context).resolve())
dockerfile = "Dockerfile"
if "dockerfile" in service["build"]:
dockerfile = service["build"]["dockerfile"]
if not is_dict(service["build"]):
service["build"] = {}
service["build"]["dockerfile"] = dockerfile
service["build"]["context"] = context
return service
def normalize_final(compose: dict, project_dir: str) -> dict:
services = compose.get("services", None) or {}
for service in services.values():
normalize_service_final(service, project_dir)
return compose
def clone(value):
return value.copy() if is_list(value) or is_dict(value) else value
@ -1603,6 +1626,7 @@ class PodmanCompose:
compose.get("services", {}), set(args.profile)
)
compose["services"] = resolved_services
compose = normalize_final(compose, self.dirname)
self.merged_yaml = yaml.safe_dump(compose)
merged_json_b = json.dumps(compose, separators=(",", ":")).encode("utf-8")
self.yaml_hash = hashlib.sha256(merged_json_b).hexdigest()