diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore index c44f89a..3ed7348 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ babashka-pod-docker /.cpcache/ /.lsp/ /.nrepl-port +/vendor/ +/result +/.direnv/ diff --git a/README.md b/README.md index 0eda90b..1e0b294 100644 --- a/README.md +++ b/README.md @@ -9,12 +9,12 @@ This is a [babashka pod](https://github.com/babashka/pods) that binds some golan ```clojure (require '[babashka.pods :as pods]) -(pods/load-pod 'docker/docker-tools "0.1.0") +(pods/load-pod 'docker/tools "0.1.0") ; OR use a locally built pod binary #_(pods/load-pod "./babashka-pod-docker") ;; load-pod will create this namespace with two vars -(require '[docker.babashka-pod-docker :as docker]) +(require '[docker.tools :as docker]) ;; parse image names using github.com/docker/distribution ;; turns golang structs into clojure maps @@ -79,11 +79,11 @@ Here is an example of bindings that will resolve at compile-time and go through ;; statically define dispatch functions - this is synchronous (defn parse [s] - (impl/invoke-public "docker.docker-tools" "docker.babashka-pod-docker/parse-dockerfile" [s] {})) + (impl/invoke-public "docker.tools" "docker.tools/parse-dockerfile" [s] {})) ;; async example (defn generate-sbom [s] - (impl/invoke-public "docker.docker-tools" "docker.babashka-pod-docker/generate-sbom" + (impl/invoke-public "docker.tools" "docker.tools/generate-sbom" [s cb] {:handlers {:done (fn []) :success cb @@ -99,3 +99,4 @@ This method of dispatch does not require any dynamic namespace generation. ## Contributing You can find information about contributing to this project in the CONTRIBUTING.md + diff --git a/dev/user.clj b/dev/user.clj index a48353b..9d09397 100644 --- a/dev/user.clj +++ b/dev/user.clj @@ -23,9 +23,9 @@ {:pod/id (:pod-id pod)}))) (comment - (pods/load-pod 'docker.docker-tools "0.1.0") + (pods/load-pod 'docker.tools "0.1.0") - (require '[docker.babashka-pod-docker :as docker]) + (require '[docker.tools :as docker]) ;; parse image names using github.com/docker/distribution @@ -55,8 +55,8 @@ (defn generate-sbom [image] (impl/invoke-public - "docker.docker-tools" - "docker.babashka-pod-docker/generate-sbom" + "docker.tools" + "docker.tools/generate-sbom" [image "" ""] {:handlers {:done (fn [] (println "Done")) :success (fn [msg] (println "msg: " msg)) @@ -65,8 +65,8 @@ (comment (println (load-pod "./babashka-pod-docker")) (impl/invoke-public - "docker.docker-tools" - "docker.babashka-pod-docker/generate-sbom" + "docker.tools" + "docker.tools/generate-sbom" ["ubuntu:latest" "" ""] {}) (generate-sbom "alpine") diff --git a/docker/ops.go b/docker/ops.go index 9ca00f6..9ae49d5 100644 --- a/docker/ops.go +++ b/docker/ops.go @@ -13,7 +13,7 @@ import ( "fmt" "strings" - "dockerfileparse/user/parser/babashka" + "babashka-pod-docker/babashka" ) type Reference struct { @@ -111,7 +111,7 @@ func ProcessMessage(message *babashka.Message) (any, error) { Namespaces: []babashka.Namespace{ { // this is the pod-id - Name: "docker.docker-tools", + Name: "docker.tools", Vars: []babashka.Var{ { Name: "parse-image-name", @@ -127,8 +127,8 @@ func ProcessMessage(message *babashka.Message) (any, error) { (sbom image cb {})) ([image cb opts] (babashka.pods/invoke - "docker.docker-tools" - 'docker.babashka-pod-docker/generate-sbom + "docker.tools" + 'docker.tools/generate-sbom [image] {:handlers {:success (fn [event] (cb event)) @@ -145,8 +145,8 @@ func ProcessMessage(message *babashka.Message) (any, error) { (hashes image cb {})) ([image cb opts] (babashka.pods/invoke - "docker.docker-tools" - 'docker.babashka-pod-docker/generate-hashes + "docker.tools" + 'docker.tools/generate-hashes [image] {:handlers {:success (fn [event] (cb event)) @@ -161,21 +161,21 @@ func ProcessMessage(message *babashka.Message) (any, error) { }, nil case "invoke": switch message.Var { - case "docker.babashka-pod-docker/parse-image-name": + case "docker.tools/parse-image-name": args := []string{} if err := json.Unmarshal([]byte(message.Args), &args); err != nil { return nil, err } return parse_uri(args[0]) - case "docker.babashka-pod-docker/parse-dockerfile": + case "docker.tools/parse-dockerfile": args := []string{} if err := json.Unmarshal([]byte(message.Args), &args); err != nil { return nil, err } reader := strings.NewReader(args[0]) return parser.Parse(reader) - case "docker.babashka-pod-docker/generate-sbom": + case "docker.tools/generate-sbom": args := []string{} if err := json.Unmarshal([]byte(message.Args), &args); err != nil { @@ -194,7 +194,7 @@ func ProcessMessage(message *babashka.Message) (any, error) { } return "done", nil - case "docker.babashka-pod-docker/generate-hashes": + case "docker.tools/generate-hashes": args := []string{} if err := json.Unmarshal([]byte(message.Args), &args); err != nil { return nil, err diff --git a/flake.nix b/flake.nix index 1ad6656..d2a7fd2 100644 --- a/flake.nix +++ b/flake.nix @@ -11,22 +11,41 @@ flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; + in { devShells.default = pkgs.mkShell { packages = with pkgs; [ go gotools golangci-lint gopls gopkgs go-outline ]; }; - packages = { + packages = rec { default = pkgs.buildGoModule { pname = "babashka-pod-docker"; version = "0.0.1"; src = ./.; - vendorSha256 = "sha256-KUWqddPcv+hLStd7JEzQBUiGLPLYwfmyVoG1BtaHWXY="; - postInstall = '' - mv $out/bin/parser $out/bin/babashka-pod-docker - ''; - + # uncomment this and re-run to find the new vendor sha when module deps change + # note that you'll get inconsistent vendor deps if this gets out of sync because + # this sha defines the input for the mod deps derivation + # vendorSha256 = nixpkgs.lib.fakeSha256; + vendorSha256 = "sha256-jCjNhi0eqEBNPts/xmbwugs0T6HUw1ESip/li4/J6YY="; + CGO_ENABLED = 0; }; + + docker = pkgs.dockerTools.buildImage { + name = "docker-pod"; + tag = "latest"; + config = { + Cmd = ["${default}/bin/babashka-pod-docker"]; + }; + }; + + default-linux = default.overrideAttrs (old: old // {GOOS = "linux"; GOARCH = "arm64";}); + docker-arm64 = pkgs.dockerTools.buildImage { + name = "docker-pod"; + tag = "latest"; + config = { + Cmd = ["${default-linux}/bin/linux_arm64/babashka-pod-docker"]; + }; + }; }; }); } diff --git a/go.mod b/go.mod index 460b8f0..8bc731a 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module dockerfileparse/user/parser +module babashka-pod-docker go 1.19 diff --git a/main.go b/main.go index 46898b0..9f4da6b 100644 --- a/main.go +++ b/main.go @@ -1,8 +1,8 @@ package main import ( - "dockerfileparse/user/parser/babashka" - "dockerfileparse/user/parser/docker" + "babashka-pod-docker/babashka" + "babashka-pod-docker/docker" "github.com/atomist-skills/go-skill" "github.com/sirupsen/logrus"