target: let pkgs = target.crossPkgs; rustVersion = pkgs.rust-bin.stable.latest.default.override { targets = [target.triple]; }; rustPlatform = target.crossPkgs.makeRustPlatform { cargo = rustVersion; rustc = rustVersion; }; cargoToml = fromTOML (builtins.readFile ../backend/Cargo.toml); inherit (cargoToml.package) name version; rustBuild = rustPlatform.buildRustPackage { pname = name; inherit version; src = pkgs.lib.cleanSource ../.; cargoLock.lockFile = ../Cargo.lock; # cargoVendorDir = "vendor"; useNextest = true; meta = { inherit (cargoToml.package) description homepage; }; }; settingsDir = pkgs.runCommand "settings" {} '' mkdir -p $out/settings cp ${../backend/settings}/*.yaml $out/settings/ ''; makeDockerImage = tag: pkgs.dockerTools.buildLayeredImage { name = "phundrak/${name}"; contents = [rustBuild pkgs.cacert settingsDir]; config = { name = "phundrak/${name}"; inherit tag; created = "now"; }; config = { Entrypoint = ["${rustBuild}/bin/${name}"]; WorkingDir = "/"; Env = [ "SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" ]; ExposedPorts = { "3100/tcp" = {}; }; Labels = { "org.opencontainers.image.title" = name; "org.opencontainers.image.version" = version; "org.opencontainers.image.description" = "REST API backend for STA"; "org.opencontainers.image.authors" = "Lucien Cartier-Tilet "; "org.opencontainers.image.licenses" = "AGPL-3.0-only"; "org.opencontainers.image.source" = "https://labs.phundrak.com/phundrak/sta"; "org.opencontainers.image.url" = "https://labs.phundrak.com/phundrak/sta"; "org.opencontainers.image.documentation" = "https://labs.phundrak.com/phundrak/sta"; "org.opencontainers.image.vendor" = "Phundrak"; }; }; }; in { backend = rustBuild; docker = { default = makeDockerImage version; latest = makeDockerImage "latest"; }; }