feat!: Remove legacy code"

This commit is contained in:
Gerald Pinder 2023-12-16 20:46:29 -05:00
parent 006966bb35
commit 785fc2f762
4 changed files with 3 additions and 157 deletions

View file

@ -20,9 +20,7 @@ serde_yaml = "0.9.25"
tera = "1.19.1"
[features]
default = ["modules"]
default = []
nightly = ["init", "build"]
init = []
build = []
modules = []
legacy = []

View file

@ -8,16 +8,9 @@
//! to use both features at the same time. For now the 'legacy' feature
//! is the default feature until modules works 1-1 with ublue starting point.
#[cfg(all(feature = "legacy", feature = "modules"))]
compile_error!("Both 'legacy' and 'modules' features cannot be used at the same time.");
#[cfg(feature = "init")]
pub mod init;
#[cfg(feature = "legacy")]
pub mod recipe;
#[cfg(feature = "modules")]
pub mod module_recipe;
use std::{
@ -27,27 +20,15 @@ use std::{
};
use anyhow::Result;
use cfg_if;
use module_recipe::Recipe;
use tera::{Context, Tera};
cfg_if::cfg_if! {
if #[cfg(feature = "legacy")] {
use recipe::Recipe;
use std::fs::read_dir;
pub const DEFAULT_CONTAINERFILE: &str = include_str!("../templates/Containerfile.legacy");
} else if #[cfg(feature = "modules")] {
use module_recipe::Recipe;
pub const DEFAULT_CONTAINERFILE: &str = include_str!("../templates/Containerfile.modules");
}
}
pub const DEFAULT_CONTAINERFILE: &str = include_str!("../templates/Containerfile.tera");
pub fn setup_tera(recipe: String, containerfile: Option<PathBuf>) -> Result<(Tera, Context)> {
let recipe_de =
serde_yaml::from_str::<Recipe>(fs::read_to_string(PathBuf::from(&recipe))?.as_str())?;
#[cfg(feature = "legacy")]
let recipe_de = recipe_de.process_repos();
let mut context = Context::from_serialize(recipe_de)?;
context.insert("recipe", &recipe);
@ -65,12 +46,6 @@ pub fn setup_tera(recipe: String, containerfile: Option<PathBuf>) -> Result<(Ter
|args: &HashMap<String, tera::Value>| -> tera::Result<tera::Value> {
match args.get("containerfile") {
Some(v) => match v.as_str() {
#[cfg(feature = "legacy")]
Some(containerfile) => Ok(read_to_string(format!(
"containerfiles/{containerfile}/Containerfile"
))?
.into()),
#[cfg(feature = "modules")]
Some(containerfile) => Ok(read_to_string(format!(
"config/containerfiles/{containerfile}/Containerfile"
))?
@ -82,7 +57,6 @@ pub fn setup_tera(recipe: String, containerfile: Option<PathBuf>) -> Result<(Ter
},
);
#[cfg(feature = "modules")]
tera.register_function(
"print_module_context",
|args: &HashMap<String, tera::Value>| -> tera::Result<tera::Value> {
@ -97,7 +71,6 @@ pub fn setup_tera(recipe: String, containerfile: Option<PathBuf>) -> Result<(Ter
},
);
#[cfg(feature = "modules")]
tera.register_function(
"get_module_from_file",
|args: &HashMap<String, tera::Value>| -> tera::Result<tera::Value> {
@ -119,37 +92,5 @@ pub fn setup_tera(recipe: String, containerfile: Option<PathBuf>) -> Result<(Ter
},
);
#[cfg(feature = "legacy")]
tera.register_function(
"print_autorun_scripts",
|args: &HashMap<String, tera::Value>| -> tera::Result<tera::Value> {
match args.get("mode") {
Some(v) => match from_value::<String>(v.clone()) {
Ok(mode) if mode == "pre" || mode == "post" => {
Ok(read_dir(format!("scripts/{mode}"))?
.fold(String::from(""), |mut acc: String, script| match script {
Ok(entry) => {
let file_name = entry.file_name();
if let Some(file_name) = file_name.to_str() {
if file_name.ends_with(".sh") {
acc += format!(
"RUN /tmp/scripts/{mode}/{file_name} {mode}\n"
)
.as_str();
}
}
acc
}
Err(_) => acc,
})
.into())
}
_ => Err("Mode must be pre/post".into()),
},
None => Err("Need arg 'mode' set with 'pre' or 'post'".into()),
}
},
);
Ok((tera, context))
}

View file

@ -1,93 +0,0 @@
FROM {{ base_image }}:{{ fedora_version }}
ARG RECIPE={{ recipe }}
COPY usr/ /usr
{% if usr_dir_overlays %}
{% for usr_dir in usr_dir_overlays %}
COPY {{ usr_dir }}/ /usr
{% endfor %}
{% endif %}
COPY ${RECIPE} /usr/share/ublue-os/recipe.yml
COPY --from=ghcr.io/ublue-os/bling:latest /rpms/ublue-os-wallpapers-0.1-1.fc38.noarch.rpm /tmp/ublue-os-wallpapers-0.1-1.fc38.noarch.rpm
COPY --from=ghcr.io/ublue-os/bling:latest /files/usr/share/ublue-os/just /usr/share/ublue-os/just
COPY --from=ghcr.io/ublue-os/bling:latest /files/usr/bin/ublue-nix* /usr/bin
COPY --from=docker.io/mikefarah/yq /usr/bin/yq /usr/bin/yq
COPY --from=gcr.io/projectsigstore/cosign /ko-app/cosign /usr/bin/cosign
COPY scripts /tmp/scripts
RUN find /tmp/scripts -type f -exec chmod +x {} \;
{% if containerfiles and containerfiles.pre %}
# Pre: Containerfiles
{% for containerfile in containerfiles.pre %}
{{ print_containerfile(containerfile = containerfile) }}
{% endfor %}
{% endif %}
{{ print_autorun_scripts(mode = "pre") }}
{% if scripts and scripts.pre %}
{% for script in scripts.pre %}
RUN /bin/bash -c '/tmp/scripts/{{ script }} pre'
{% endfor %}
{% endif %}
{% if rpm and rpm.repos %}
{% for repo in rpm.repos %}
RUN wget "{{ repo }}" -P "/etc/yum.repos.d/"
{% endfor %}
{% endif %}
{% if rpm and rpm.remove %}
RUN rpm-ostree override remove {% for app in rpm.remove %}{{ app }} {% endfor %}
{% endif %}
ARG FIRSTBOOT_DATA="/usr/share/ublue-os/firstboot"
ARG FIRSTBOOT_LINK="/usr/etc/profile.d/ublue-firstboot.sh"
{% if firstboot.yafti -%}
RUN echo "-- firstboot: Installing and enabling \"yafti\" --"; \
pip install --prefix=/usr yafti; \
mkdir -p "$(dirname "${FIRSTBOOT_LINK}")"; \
ln -s "${FIRSTBOOT_DATA}/launcher/login-profile.sh" "${FIRSTBOOT_LINK}"
ARG YAFTI_FILE="${FIRSTBOOT_DATA}/yafti.yml"
RUN echo "-- yafti: Adding Flatpaks defined in recipe.yml --"; \
yq -i '.screens.applications.values.groups.Custom.description = "Flatpaks suggested by the image maintainer."' "${YAFTI_FILE}"; \
yq -i '.screens.applications.values.groups.Custom.default = true' "${YAFTI_FILE}"; \
{%- for pkg in firstboot.flatpaks %}
echo "Adding to yafti: {{ pkg }}"; \
yq -i ".screens.applications.values.groups.Custom.packages += [{\"{{ pkg }}\": \"{{ pkg }}\"}]" "${YAFTI_FILE}"; \
{%- endfor %}
echo "Done setting up Yafti"
{% else %}
RUN echo "-- firstboot: Removing all \"firstboot\" components --"; \
rm -f "${FIRSTBOOT_LINK}"; \
rm -rf "${FIRSTBOOT_DATA}"
{% endif %}
{% if rpm and rpm.install %}
RUN rpm-ostree install {% for app in rpm.install %}{{ app }} {% endfor %}
{% endif %}
{{ print_autorun_scripts(mode = "post") }}
{% if scripts and scripts.pre %}
{% for script in scripts.post -%}
RUN /bin/bash -c '/tmp/scripts/{{ script }} post'
{% endfor -%}
{% endif %}
{% if containerfiles and containerfiles.post %}
{% for containerfile in containerfiles.post %}
{{ print_containerfile(containerfile = containerfile) }}
{% endfor %}
{% endif %}
RUN rm -rf /tmp/* /var/* && ostree container commit