- Notifications
You must be signed in to change notification settings - Fork 84
Expand file tree
/
Copy pathdockerfiles.py
More file actions
Latest commit
46 lines (31 loc) · 1.46 KB
/
Copy pathdockerfiles.py
File metadata and controls
46 lines (31 loc) · 1.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
importdataclasses
importdatetime
importjson
importlogging
fromtypingimportAny
fromjinja2importEnvironment, FileSystemLoader, select_autoescape
from .settingsimportDEFAULT_DISTRO, DOCKERFILES_PATH
from .versionsimportBuildVersion
logger=logging.getLogger("dpn")
env=Environment(loader=FileSystemLoader("./templates"), autoescape=select_autoescape())
def_render_template(template_name: str, context: dict[str, Any]) ->str:
template=env.get_template(template_name)
returntemplate.render(context)
defrender_dockerfile(version: BuildVersion) ->str:
distro="debian"ifversion.distro!="alpine"elseversion.distro
context=dataclasses.asdict(version) | {
"now": datetime.datetime.now(datetime.UTC).isoformat()[:-7],
"distro": DEFAULT_DISTROifversion.distro=="slim"elseversion.distro, # slim is an image variant
"distro_variant": "slim"ifversion.distro=="slim"else"full",
}
return_render_template(f"{distro}.Dockerfile", context)
defrender_dockerfile_with_context(config_json: str, dry_run: bool=False) ->None:
version=BuildVersion(**json.loads(config_json))
dockerfile=render_dockerfile(version)
filename=f"{version.key}.Dockerfile"
logger.debug(f"Writing {filename}")
ifnotdry_run:
ifnotDOCKERFILES_PATH.exists():
DOCKERFILES_PATH.mkdir()
dockerfile_path=DOCKERFILES_PATH/filename
dockerfile_path.write_text(dockerfile)