commit 29477c3dbe623df004ebdab31140086010723a51
parent d5088b114ec5e2bbd0b5bfa7ff28332ccf16b5ab
Author: James Eversole <james@eversole.co>
Date: Wed, 6 May 2026 14:40:33 -0500
Drop slopdashes and add container build
Diffstat:
3 files changed, 35 insertions(+), 6 deletions(-)
diff --git a/flake.nix b/flake.nix
@@ -11,10 +11,13 @@
let
pkgs = nixpkgs.legacyPackages.${system};
packageName = "tricu";
+ containerPackageName = "${packageName}-container";
haskellPackages = pkgs.haskellPackages;
hsLib = pkgs.haskell.lib;
+ tricuStatic = hsLib.justStaticExecutables self.packages.${system}.default;
+
tricuPackage =
haskellPackages.callCabal2nix packageName self {};
@@ -60,5 +63,31 @@
tricuPackage
];
};
+ devShell = self.devShells.${system}.default;
+
+ packages.${containerPackageName} = pkgs.dockerTools.buildImage {
+ name = "tricu";
+
+ copyToRoot = pkgs.buildEnv {
+ name = "image-root";
+ paths = [ tricuStatic ];
+ pathsToLink = [ "/bin" ];
+ };
+ tag = "latest";
+ config = {
+ Cmd = [
+ "/bin/tricu"
+ "server"
+ "-h" "0.0.0.0"
+ "-p" "8787"
+ ];
+ WorkingDir = "/app";
+ ExposedPorts = {
+ "8787/tcp" = {};
+ };
+ extraCommands = ''
+ '';
+ };
+ };
});
}
diff --git a/src/Main.hs b/src/Main.hs
@@ -171,8 +171,8 @@ main = do
in compileFile compileInputFile compileOutFile bundleExportName
Serve { host = hostStr, port = portNum } -> do
putStrLn $ "Starting Arborix bundle server on " ++ hostStr ++ ":" ++ show portNum
- putStrLn $ " GET /bundle/hash/:hash — primary endpoint"
- putStrLn $ " GET /bundle/name/:name — convenience endpoint"
+ putStrLn $ " GET /bundle/hash/:hash -- primary endpoint"
+ putStrLn $ " GET /bundle/name/:name -- convenience endpoint"
putStrLn $ " Content-Type: application/vnd.arborix.bundle"
runServer hostStr portNum
diff --git a/src/Server.hs b/src/Server.hs
@@ -30,10 +30,10 @@ import qualified Data.Text as T
--
-- Endpoints
-- ---------
--- GET /health — 200 "ok"
--- GET /bundle/name/:name — export by stored term name
--- GET /bundle/hash/:hash — export by full Merkle hash
--- GET /terms — plain-text listing (debug)
+-- GET /health - 200 "ok"
+-- GET /bundle/name/:name - export by stored term name
+-- GET /bundle/hash/:hash - export by full Merkle hash
+-- GET /terms - plain-text listing (debug)
--
runServer :: String -> Int -> IO ()
runServer hostStr port =