Add ci build for CI tasks

This commit is contained in:
Greg Hellings
2024-07-13 03:31:10 -05:00
parent b716298d3f
commit 66814c4282
2 changed files with 22 additions and 8 deletions
+1
View File
@@ -9,6 +9,7 @@ isolinux.cfg
Vagrantfile Vagrantfile
.direnv .direnv
result result
packer_config/
# Generated distros # Generated distros
distros/fedora/rawhide/*.hcl distros/fedora/rawhide/*.hcl
+16 -3
View File
@@ -31,7 +31,9 @@
distroFile = d: "distros/${d.distro}/${d.version}/${d.arch}.pkrvars.hcl"; distroFile = d: "distros/${d.distro}/${d.version}/${d.arch}.pkrvars.hcl";
cmd = d: '' cmd = d: ''
# This is a workaround for a goofy behavior in CI # This is a workaround for a goofy behavior in CI
if [ -e "''${PACKER_CONFIG_DIR}" ]; then
find "''${PACKER_CONFIG_DIR}" -name '*_linux_amd64' -exec chmod +x '{}' ";" find "''${PACKER_CONFIG_DIR}" -name '*_linux_amd64' -exec chmod +x '{}' ";"
fi
packer init sources packer init sources
version="''${1:-1}" version="''${1:-1}"
packer build -var "build=$version" -only=${d.provider}.${d.arch} -var-file=${distroFile d}''; packer build -var "build=$version" -only=${d.provider}.${d.arch} -var-file=${distroFile d}'';
@@ -83,6 +85,9 @@
env = [{ env = [{
name = "EFI_DIR"; name = "EFI_DIR";
value = "${pkgs.OVMF.fd}/FV/"; value = "${pkgs.OVMF.fd}/FV/";
} {
name = "PACKER_CONFIG_DIR";
value = "./packer_config";
} ]; } ];
}; };
@@ -109,6 +114,13 @@
vagrant box add --provider ${vp d} ./output/${vp d}/${d.distro}-${d.version}.box --name test_box --force vagrant box add --provider ${vp d} ./output/${vp d}/${d.distro}-${d.version}.box --name test_box --force
''; '';
}); });
cibuild = d: pkgs.writeShellApplication (base // {
name = "ci${name d}";
text = ''
set -x
${cmd d} -except=upload sources/
'';
});
upload = d: pkgs.writeShellApplication (base // { upload = d: pkgs.writeShellApplication (base // {
name = "upload${name d}"; name = "upload${name d}";
text = '' text = ''
@@ -118,10 +130,11 @@
}); });
builds = lib.lists.foldr (d: acc: acc // { "build${name d}" = (build d); }) {} withProviders; builds = lib.lists.foldr (d: acc: acc // { "build${name d}" = (build d); }) {} withProviders;
uploads = lib.lists.foldr (d: acc: acc // { "upload${name d}" = (upload d); }) {} withProviders; uploads = lib.lists.foldr (d: acc: acc // { "upload${name d}" = (upload d); }) {} withProviders;
qemu_list = builtins.toJSON (builtins.map (d: { buildcmd = "build${name d}"; }) (builtins.filter (x: x.provider == "qemu") active)); cibuilds = lib.lists.foldr (d: acc: acc // { "ci${name d}" = (cibuild d); }) {} withProviders;
vbox_list = builtins.toJSON (builtins.map (d: { buildcmd = "build${name d}"; }) (builtins.filter (x: x.provider == "virtualbox-iso") active)); qemu_list = builtins.toJSON (builtins.map (d: { buildcmd = "ci${name d}"; }) (builtins.filter (x: x.provider == "qemu") active));
vbox_list = builtins.toJSON (builtins.map (d: { buildcmd = "ci${name d}"; }) (builtins.filter (x: x.provider == "virtualbox-iso") active));
hyperv_list = builtins.toJSON (builtins.map (d: { distro = distroFile d; }) (builtins.filter (x: x.provider == "hyperv-iso") active)); hyperv_list = builtins.toJSON (builtins.map (d: { distro = distroFile d; }) (builtins.filter (x: x.provider == "hyperv-iso") active));
in builds // uploads // { in builds // uploads // cibuilds // {
continue = pkgs.writeText "continue.yml" continue = pkgs.writeText "continue.yml"
(builtins.replaceStrings ["QEMU_MATRIX" "VBOX_MATRIX" "HYPERV_MATRIX"] [qemu_list vbox_list hyperv_list] (builtins.replaceStrings ["QEMU_MATRIX" "VBOX_MATRIX" "HYPERV_MATRIX"] [qemu_list vbox_list hyperv_list]
(builtins.readFile ./.gitlab-ci-build.yml.in) (builtins.readFile ./.gitlab-ci-build.yml.in)