From 1e692d6117a36506cd4be8df138887215530876b Mon Sep 17 00:00:00 2001 From: Xe Date: Sun, 27 Feb 2022 18:37:44 +0000 Subject: [PATCH] commit for the blog Signed-off-by: Xe --- flake.lock | 17 ++++++++++++++ flake.nix | 43 +++++++++++++++++++++++++++++++---- main.go | 3 ++- systemd/web-server.service.in | 9 ++++++++ 4 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 systemd/web-server.service.in diff --git a/flake.lock b/flake.lock index 7062b5d..44b476c 100644 --- a/flake.lock +++ b/flake.lock @@ -15,9 +15,26 @@ "type": "indirect" } }, + "portable-svc": { + "locked": { + "lastModified": 1645960986, + "narHash": "sha256-XuapDz2dkUAgKaj3L2EUgzXApn6IXGtQVg/TEfhr0w8=", + "ref": "main", + "rev": "138c25c1c3ee4f7945059e05259d3fe03678e843", + "revCount": 5, + "type": "git", + "url": "https://tulpa.dev/cadey/portable-svc.git" + }, + "original": { + "ref": "main", + "type": "git", + "url": "https://tulpa.dev/cadey/portable-svc.git" + } + }, "root": { "inputs": { "nixpkgs": "nixpkgs", + "portable-svc": "portable-svc", "utils": "utils" } }, diff --git a/flake.nix b/flake.nix index 23f5358..3001154 100644 --- a/flake.nix +++ b/flake.nix @@ -4,9 +4,10 @@ inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; utils.url = "github:numtide/flake-utils"; + portable-svc.url = "git+https://tulpa.dev/cadey/portable-svc.git?ref=main"; }; - outputs = { self, nixpkgs, utils }: + outputs = { self, nixpkgs, utils, portable-svc }: utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" @@ -14,11 +15,14 @@ "aarch64-darwin" ] (system: let - pkgs = nixpkgs.legacyPackages.${system}; + pkgs = import nixpkgs { + overlays = [ portable-svc.overlay ]; + inherit system; + }; version = builtins.substring 0 8 self.lastModifiedDate; in { defaultPackage = pkgs.buildGoModule { - pname = "go-hello"; + pname = "web-server"; inherit version; src = ./.; @@ -34,9 +38,38 @@ vendorSha256 = "sha256-pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo="; }; - packages = {}; + packages = { + docker = let + web = self.defaultPackage.${system}; + in pkgs.dockerTools.buildLayeredImage { + name = web.pname; + tag = web.version; + contents = [ web ]; - defaultApp = self.defaultPackage.${system}; + config = { + Cmd = [ "/bin/web-server" ]; + WorkingDir = "/"; + }; + }; + + web-service = pkgs.substituteAll { + name = "web-server.service"; + src = ./systemd/web-server.service.in; + web = self.defaultPackage.${system}; + }; + portable = let + web = self.defaultPackage.${system}; + in pkgs.portableService { + inherit (web) version; + name = web.pname; + description = "A web server"; + units = [ self.packages.${system}.web-service ]; + }; + }; + + defaultApp = utils.lib.mkApp { + drv = self.defaultPackage.${system}; + }; devShell = pkgs.mkShell { buildInputs = with pkgs; [ go gopls goimports go-tools ]; diff --git a/main.go b/main.go index 0f942a1..3121b88 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "net/http" + "os" ) var ( @@ -15,7 +16,7 @@ func main() { flag.Parse() http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, "hello from nix!") + fmt.Fprintf(w, "PORTABLE=%s\n", os.Getenv("PORTABLE")) }) log.Printf("listening for HTTP on %s", *bindhost) diff --git a/systemd/web-server.service.in b/systemd/web-server.service.in new file mode 100644 index 0000000..a936b87 --- /dev/null +++ b/systemd/web-server.service.in @@ -0,0 +1,9 @@ +[Unit] +Description=A web service + +[Service] +DynamicUser=yes +ExecStart=@web@/bin/web-server + +[Install] +WantedBy=multi-user.target \ No newline at end of file