refactor: inefficiency in generated Containerfile
This commit is contained in:
parent
7dd3a8f0f9
commit
938ddae891
3 changed files with 42 additions and 8 deletions
|
|
@ -14,6 +14,7 @@ use typed_builder::TypedBuilder;
|
||||||
use crate::module_recipe::Recipe;
|
use crate::module_recipe::Recipe;
|
||||||
|
|
||||||
pub const DEFAULT_CONTAINERFILE: &str = include_str!("../templates/Containerfile.tera");
|
pub const DEFAULT_CONTAINERFILE: &str = include_str!("../templates/Containerfile.tera");
|
||||||
|
pub const EXPORT_SCRIPT: &str = include_str!("../templates/export.sh");
|
||||||
|
|
||||||
#[derive(Debug, Clone, Args, TypedBuilder)]
|
#[derive(Debug, Clone, Args, TypedBuilder)]
|
||||||
pub struct TemplateCommand {
|
pub struct TemplateCommand {
|
||||||
|
|
@ -119,7 +120,9 @@ impl TemplateCommand {
|
||||||
}
|
}
|
||||||
None => Err("Arg containerfile wasn't a string".into()),
|
None => Err("Arg containerfile wasn't a string".into()),
|
||||||
},
|
},
|
||||||
None => Err("Needs the argument 'containerfile'".into()),
|
None => {
|
||||||
|
Err("Needs the argument 'containerfile' for print_containerfile()".into())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
@ -134,7 +137,7 @@ impl TemplateCommand {
|
||||||
Ok(s) => Ok(s.into()),
|
Ok(s) => Ok(s.into()),
|
||||||
Err(e) => Err(format!("Unable to serialize: {e}").into()),
|
Err(e) => Err(format!("Unable to serialize: {e}").into()),
|
||||||
},
|
},
|
||||||
None => Err("Needs the argument 'module'".into()),
|
None => Err("Needs the argument 'module' for print_module_context()".into()),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
@ -162,7 +165,7 @@ impl TemplateCommand {
|
||||||
Err(_) => Err(format!("Unable to deserialize file {file}").into()),
|
Err(_) => Err(format!("Unable to deserialize file {file}").into()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
None => Err("Needs the argument 'file'".into()),
|
None => Err("Needs the argument 'file' for get_module_from_file()".into()),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
@ -177,6 +180,32 @@ impl TemplateCommand {
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
debug!("Registering function `print_script`");
|
||||||
|
tera.register_function(
|
||||||
|
"print_script",
|
||||||
|
|args: &HashMap<String, tera::Value>| -> tera::Result<tera::Value> {
|
||||||
|
trace!("tera fn print_script({args:#?})");
|
||||||
|
|
||||||
|
let escape_script = |script_contents: &str| {
|
||||||
|
format!(
|
||||||
|
"\"{}\"",
|
||||||
|
script_contents
|
||||||
|
.replace('\n', "\\n")
|
||||||
|
.replace('\"', "\\\"")
|
||||||
|
.replace('$', "\\$")
|
||||||
|
)
|
||||||
|
};
|
||||||
|
|
||||||
|
match args.get("script") {
|
||||||
|
Some(x) => match x.as_str().unwrap_or_default() {
|
||||||
|
"export" => Ok(escape_script(EXPORT_SCRIPT).into()),
|
||||||
|
_ => Err(format!("Script {x} doesn't exist").into()),
|
||||||
|
},
|
||||||
|
None => Err("Needs the argument 'script' for 'print_script()'".into()),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
Ok((tera, context))
|
Ok((tera, context))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,9 +29,7 @@ COPY --from=ghcr.io/ublue-os/bling:latest /modules /tmp/modules/
|
||||||
# Custom modules overwrite defaults
|
# Custom modules overwrite defaults
|
||||||
COPY modules /tmp/modules/
|
COPY modules /tmp/modules/
|
||||||
|
|
||||||
RUN echo "#!/usr/bin/env bash" >> /tmp/exports.sh
|
RUN printf {{ print_script(script = "export") }} >> /tmp/exports.sh && chmod +x /tmp/exports.sh
|
||||||
RUN echo 'get_yaml_array() { readarray "$1" < <(echo "$3" | yq -I=0 "$2"); }; export -f get_yaml_array' >> /tmp/exports.sh
|
|
||||||
RUN chmod +x /tmp/exports.sh
|
|
||||||
|
|
||||||
ARG CONFIG_DIRECTORY="/tmp/config"
|
ARG CONFIG_DIRECTORY="/tmp/config"
|
||||||
ARG IMAGE_NAME="{{ name }}"
|
ARG IMAGE_NAME="{{ name }}"
|
||||||
|
|
@ -44,8 +42,7 @@ ARG BASE_IMAGE="{{ base_image }}"
|
||||||
{{ print_containerfile(containerfile = c ) }}
|
{{ print_containerfile(containerfile = c ) }}
|
||||||
{%- endfor %}
|
{%- endfor %}
|
||||||
{%- else %}
|
{%- else %}
|
||||||
RUN chmod +x /tmp/modules/{{ module.type }}/{{ module.type }}.sh
|
RUN chmod +x /tmp/modules/{{ module.type }}/{{ module.type }}.sh && source /tmp/exports.sh && /tmp/modules/{{ module.type }}/{{ module.type }}.sh '{{ print_module_context(module = module) }}'
|
||||||
RUN source /tmp/exports.sh && OS_VERSION="$(grep -Po '(?<=VERSION_ID=)\d+' /usr/lib/os-release)" /tmp/modules/{{ module.type }}/{{ module.type }}.sh '{{ print_module_context(module = module) }}'
|
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
{%- elif module["from-file"] %}
|
{%- elif module["from-file"] %}
|
||||||
{%- set extra_module = get_module_from_file(file = module["from-file"]) %}
|
{%- set extra_module = get_module_from_file(file = module["from-file"]) %}
|
||||||
|
|
|
||||||
8
templates/export.sh
Normal file
8
templates/export.sh
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
get_yaml_array() {
|
||||||
|
readarray "$1" < <(echo "$3" | yq -I=0 "$2")
|
||||||
|
}
|
||||||
|
|
||||||
|
export -f get_yaml_array
|
||||||
|
export OS_VERSION=$(grep -Po '(?<=VERSION_ID=)\d+' /usr/lib/os-release)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue