Packaging: Fully static Haskell builds and webapp
This commit is contained in:
53
flake.nix
53
flake.nix
@@ -16,7 +16,29 @@
|
||||
haskellPackages = pkgs.haskellPackages;
|
||||
hsLib = pkgs.haskell.lib;
|
||||
|
||||
tricuStatic = hsLib.justStaticExecutables self.packages.${system}.default;
|
||||
staticPkgs = pkgs.pkgsStatic;
|
||||
staticHaskellPackages = staticPkgs.haskellPackages;
|
||||
staticHsLib = staticPkgs.haskell.lib;
|
||||
|
||||
tricuMuslStatic =
|
||||
staticHsLib.justStaticExecutables (
|
||||
staticHsLib.dontCheck (
|
||||
staticHaskellPackages.callCabal2nix packageName self {}
|
||||
)
|
||||
);
|
||||
|
||||
tricuStatic = pkgs.runCommand "${packageName}-static-upx" {
|
||||
nativeBuildInputs = [ pkgs.upx ];
|
||||
} ''
|
||||
mkdir -p $out/bin
|
||||
cp ${tricuMuslStatic}/bin/tricu $out/bin/tricu
|
||||
chmod +w $out/bin/tricu
|
||||
|
||||
# Good compression, slower build.
|
||||
upx --best --lzma $out/bin/tricu
|
||||
|
||||
chmod 755 $out/bin/tricu
|
||||
'';
|
||||
|
||||
tricuPackageTests =
|
||||
haskellPackages.callCabal2nix packageName self {};
|
||||
@@ -221,6 +243,8 @@
|
||||
in {
|
||||
packages.${packageName} = tricuPackage;
|
||||
packages.default = tricuPackage;
|
||||
packages.tricu-static = tricuMuslStatic;
|
||||
packages.tricu-static-upx = tricuStatic;
|
||||
packages.tricu-bench = tricuBench;
|
||||
packages.tricu-zig = tricuZig;
|
||||
packages.tricu-zig-tests = tricuZigTests;
|
||||
@@ -252,20 +276,35 @@
|
||||
|
||||
packages.${containerPackageName} = pkgs.dockerTools.buildImage {
|
||||
name = "tricu";
|
||||
tag = "latest";
|
||||
|
||||
copyToRoot = pkgs.buildEnv {
|
||||
name = "image-root";
|
||||
paths = [ tricuStatic ];
|
||||
pathsToLink = [ "/bin" ];
|
||||
};
|
||||
tag = "latest";
|
||||
|
||||
config = {
|
||||
Cmd = [
|
||||
"/bin/tricu"
|
||||
];
|
||||
Cmd = [ "/bin/tricu" ];
|
||||
WorkingDir = "/app";
|
||||
extraCommands = ''
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
packages.arboricxServer = pkgs.dockerTools.buildImage {
|
||||
name = "arboricxServer";
|
||||
tag = "latest";
|
||||
|
||||
copyToRoot = pkgs.runCommand "arboricxServer" {} ''
|
||||
mkdir -p $out/app/bin $out/app/lib $out/app/tricu-apps $out/app/store
|
||||
cp ${tricuStatic}/bin/tricu $out/app/bin/
|
||||
cp -r ${./lib}/* $out/app/lib/
|
||||
cp ${./tricu-apps/arboricxServer.tri} $out/app/tricu-apps/arboricxServer.tri
|
||||
'';
|
||||
|
||||
config = {
|
||||
Entrypoint = [ "/app/bin/tricu" "eval" "tricu-apps/arboricxServer.tri" "--io" "--allow-read" "./store" "--allow-write" "./store" "-f" "decode" ];
|
||||
WorkingDir = "/app";
|
||||
ExposedPorts = { "8080/tcp" = {}; };
|
||||
};
|
||||
};
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user