Files
snitch/nix/containers.nix
Karol Broda df15770a94
Some checks failed
release / release-linux (push) Failing after 1m23s
release / release-darwin (push) Has been skipped
release / release-containers (false, debian) (push) Failing after 1m45s
release / release-containers (false, ubuntu) (push) Failing after 21s
release / release-containers (true, alpine) (push) Failing after 22s
release / release-containers (false, scratch) (push) Failing after 1m51s
feat: add oci container definitions build with nix (#18)
2025-12-29 20:30:02 +01:00

122 lines
3.5 KiB
Nix

# oci container definitions for snitch
# builds containers based on different base images: alpine, debian trixie, ubuntu
#
# base images are pinned by imageDigest (immutable content hash), not by tag.
# even if the upstream tag gets a new image, builds remain reproducible.
#
# to update base image hashes, run:
# nix-prefetch-docker --image-name alpine --image-tag 3.21
# nix-prefetch-docker --image-name debian --image-tag trixie-slim
# nix-prefetch-docker --image-name ubuntu --image-tag 24.04
#
# this outputs both imageDigest and sha256 values needed below
{ pkgs, snitch }:
let
commonConfig = {
name = "snitch";
tag = snitch.version;
config = {
Entrypoint = [ "${snitch}/bin/snitch" ];
Env = [ "PATH=/bin" ];
Labels = {
"org.opencontainers.image.title" = "snitch";
"org.opencontainers.image.description" = "a friendlier ss/netstat for humans";
"org.opencontainers.image.source" = "https://github.com/karol-broda/snitch";
"org.opencontainers.image.licenses" = "MIT";
};
};
};
# alpine-based container
alpine = pkgs.dockerTools.pullImage {
imageName = "alpine";
imageDigest = "sha256:a8560b36e8b8210634f77d9f7f9efd7ffa463e380b75e2e74aff4511df3ef88c";
sha256 = "sha256-WNbRh44zld3lZtKARhdeWFte9JKgD2bgCuKzETWgGr8=";
finalImageName = "alpine";
finalImageTag = "3.21";
};
# debian trixie (testing) based container
debianTrixie = pkgs.dockerTools.pullImage {
imageName = "debian";
imageDigest = "sha256:e711a7b30ec1261130d0a121050b4ed81d7fb28aeabcf4ea0c7876d4e9f5aca2";
sha256 = "sha256-W/9A7aaPXFCmmg+NTSrFYL+QylsAgfnvkLldyI18tqU=";
finalImageName = "debian";
finalImageTag = "trixie-slim";
};
# ubuntu based container
ubuntu = pkgs.dockerTools.pullImage {
imageName = "ubuntu";
imageDigest = "sha256:c35e29c9450151419d9448b0fd75374fec4fff364a27f176fb458d472dfc9e54";
sha256 = "sha256-0j8xM+mECrBBHv7ZqofiRaeSoOXFBtLYjgnKivQztS0=";
finalImageName = "ubuntu";
finalImageTag = "24.04";
};
# scratch container (minimal, just the snitch binary)
scratch = pkgs.dockerTools.buildImage {
name = "snitch";
tag = "${snitch.version}-scratch";
copyToRoot = pkgs.buildEnv {
name = "snitch-root";
paths = [ snitch ];
pathsToLink = [ "/bin" ];
};
config = commonConfig.config;
};
in
{
snitch-alpine = pkgs.dockerTools.buildImage {
name = "snitch";
tag = "${snitch.version}-alpine";
fromImage = alpine;
copyToRoot = pkgs.buildEnv {
name = "snitch-root";
paths = [ snitch ];
pathsToLink = [ "/bin" ];
};
config = commonConfig.config;
};
snitch-debian = pkgs.dockerTools.buildImage {
name = "snitch";
tag = "${snitch.version}-debian";
fromImage = debianTrixie;
copyToRoot = pkgs.buildEnv {
name = "snitch-root";
paths = [ snitch ];
pathsToLink = [ "/bin" ];
};
config = commonConfig.config;
};
snitch-ubuntu = pkgs.dockerTools.buildImage {
name = "snitch";
tag = "${snitch.version}-ubuntu";
fromImage = ubuntu;
copyToRoot = pkgs.buildEnv {
name = "snitch-root";
paths = [ snitch ];
pathsToLink = [ "/bin" ];
};
config = commonConfig.config;
};
snitch-scratch = scratch;
oci-default = pkgs.dockerTools.buildImage {
name = "snitch";
tag = snitch.version;
fromImage = alpine;
copyToRoot = pkgs.buildEnv {
name = "snitch-root";
paths = [ snitch ];
pathsToLink = [ "/bin" ];
};
config = commonConfig.config;
};
}