flake plus docker cli metadata
This commit is contained in:
43
Dockerfile
43
Dockerfile
@@ -1,20 +1,29 @@
|
||||
FROM golang:1.19-alpine AS build
|
||||
# syntax = docker/dockerfile:1.4
|
||||
FROM nixos/nix:latest AS builder
|
||||
|
||||
WORKDIR /tmp/build
|
||||
RUN mkdir /tmp/nix-store-closure
|
||||
|
||||
RUN \
|
||||
--mount=type=cache,target=/nix,from=nixos/nix:latest,source=/nix \
|
||||
--mount=type=cache,target=/root/.cache \
|
||||
--mount=type=bind,target=/tmp/build \
|
||||
<<EOF
|
||||
ls -l /nix/store | wc
|
||||
nix \
|
||||
--extra-experimental-features "nix-command flakes" \
|
||||
--extra-substituters "http://host.docker.internal?priority=10" \
|
||||
--option filter-syscalls false \
|
||||
--show-trace \
|
||||
--log-format raw \
|
||||
build . --out-link /tmp/output/result
|
||||
cp -R $(nix-store -qR /tmp/output/result) /tmp/nix-store-closure
|
||||
EOF
|
||||
|
||||
FROM scratch
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY go.mod ./
|
||||
COPY go.sum ./
|
||||
|
||||
RUN go mod download
|
||||
|
||||
COPY main.go ./
|
||||
COPY docker/ ./docker/
|
||||
COPY babashka/ ./babashka/
|
||||
|
||||
RUN CGO_ENABLED=0 go build -ldflags "-s -w" -o babashka-pod-docker
|
||||
|
||||
FROM alpine:3.17
|
||||
ARG version
|
||||
COPY repository/ /root/.babashka/pods/repository
|
||||
COPY --from=build /app/babashka-pod-docker /root/.babashka/pods/repository/docker/babashka-pod-docker/0.1.0
|
||||
RUN chmod 755 /root/.babashka/pods/repository/docker/babashka-pod-docker/0.1.0/babashka-pod-docker
|
||||
COPY --from=builder /tmp/nix-store-closure /nix/store
|
||||
COPY --from=builder /tmp/output/ /app/
|
||||
ENTRYPOINT ["/app/result/bin/babashka-pod-docker"]
|
||||
|
||||
16
dev/user.clj
16
dev/user.clj
@@ -24,9 +24,11 @@
|
||||
|
||||
(comment
|
||||
(pods/load-pod 'docker.tools "0.1.0")
|
||||
(pods/load-pod "result/bin/babashka-pod-docker")
|
||||
|
||||
(require '[docker.tools :as docker])
|
||||
|
||||
(pods/unload-pod {:pod/id "docker.tools"})
|
||||
|
||||
;; parse image names using github.com/docker/distribution
|
||||
;; turns golang structs into clojure maps
|
||||
@@ -39,18 +41,17 @@
|
||||
;; invalid reference format
|
||||
(println (.getMessage e))))
|
||||
|
||||
|
||||
;; parse dockerfiles using github.com/moby/buildkit
|
||||
;; returns the Result struct transformed to a clojure map
|
||||
(docker/parse-dockerfile "FROM \\\n gcr.io/whatever:tag\nCMD [\"run\"]")
|
||||
|
||||
|
||||
;; run sbom generation on local image
|
||||
(docker/sbom "vonwig/clojure-base:jdk17" (fn [event] (println event)))
|
||||
(docker/sbom "mongo@sha256:9c8a0a019671ed7d402768d4df6dddcc898828e21e9f7b90a34b55fe8ca676ac"
|
||||
(fn [event]
|
||||
(println "event " event)))
|
||||
|
||||
|
||||
(docker/hashes "vonwig/malware1:latest" (fn [event] (println event)))
|
||||
)
|
||||
(docker/hashes "vonwig/malware1:latest"
|
||||
(fn [event] (println event))))
|
||||
|
||||
(defn generate-sbom
|
||||
[image]
|
||||
@@ -69,5 +70,4 @@
|
||||
"docker.tools/generate-sbom"
|
||||
["ubuntu:latest" "" ""]
|
||||
{})
|
||||
(generate-sbom "alpine")
|
||||
)
|
||||
(generate-sbom "alpine"))
|
||||
|
||||
@@ -24,7 +24,9 @@
|
||||
in
|
||||
{
|
||||
devShells.default = pkgs.devshell.mkShell {
|
||||
packages = with pkgs; [ go gotools golangci-lint gopls gopkgs go-outline gomod2nix.packages.${system}.default clojure clojure-lsp temurin-bin neovim];
|
||||
packages = with pkgs; [ go gotools golangci-lint gopls gopkgs go-outline gomod2nix.packages.${system}.default
|
||||
(clojure.override { jdk = temurin-bin; })
|
||||
clojure-lsp temurin-bin neovim];
|
||||
commands = [
|
||||
{
|
||||
name = "update-gomod2nix";
|
||||
|
||||
53
main.go
53
main.go
@@ -3,6 +3,8 @@ package main
|
||||
import (
|
||||
"babashka-pod-docker/babashka"
|
||||
"babashka-pod-docker/docker"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/atomist-skills/go-skill"
|
||||
"github.com/sirupsen/logrus"
|
||||
@@ -10,27 +12,42 @@ import (
|
||||
|
||||
func main() {
|
||||
skill.Log.SetLevel(logrus.ErrorLevel)
|
||||
for {
|
||||
message, err := babashka.ReadMessage()
|
||||
if err != nil {
|
||||
babashka.WriteErrorResponse(message, err)
|
||||
continue
|
||||
}
|
||||
|
||||
res, err := docker.ProcessMessage(message)
|
||||
if err != nil {
|
||||
babashka.WriteErrorResponse(message, err)
|
||||
continue
|
||||
}
|
||||
args := os.Args
|
||||
|
||||
describeres, ok := res.(*babashka.DescribeResponse)
|
||||
if ok {
|
||||
babashka.WriteDescribeResponse(describeres)
|
||||
continue
|
||||
}
|
||||
if len(args) < 2 {
|
||||
args = append(os.Args, "pod")
|
||||
}
|
||||
|
||||
if res != "running" {
|
||||
babashka.WriteInvokeResponse(message, res)
|
||||
switch args[1] {
|
||||
|
||||
case "docker-cli-plugin-metadata":
|
||||
metadata := `{"SchemaVersion": "0.1.0", "Vendor": "Docker Inc.", "Version": "v0.0.1", "ShortDescription": "Docker Pod"}`
|
||||
fmt.Println(metadata)
|
||||
|
||||
case "pod":
|
||||
for {
|
||||
message, err := babashka.ReadMessage()
|
||||
if err != nil {
|
||||
babashka.WriteErrorResponse(message, err)
|
||||
continue
|
||||
}
|
||||
|
||||
res, err := docker.ProcessMessage(message)
|
||||
if err != nil {
|
||||
babashka.WriteErrorResponse(message, err)
|
||||
continue
|
||||
}
|
||||
|
||||
describeres, ok := res.(*babashka.DescribeResponse)
|
||||
if ok {
|
||||
babashka.WriteDescribeResponse(describeres)
|
||||
continue
|
||||
}
|
||||
|
||||
if res != "running" {
|
||||
babashka.WriteInvokeResponse(message, res)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user