diff --git a/flake.nix b/flake.nix index 3183899..024ddac 100644 --- 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 index 79aaaba..cc104c7 100644 --- 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 index e240fd9..ad93100 100644 --- 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 =