Use goreleaser to build docker images

Ayman Bagabas created

Change summary

.goreleaser.yml | 154 +++++++++++++++++++++++++++++++++++++++++++++++++-
Dockerfile      |  22 +++++++
2 files changed, 170 insertions(+), 6 deletions(-)

Detailed changes

.goreleaser.yml 🔗

@@ -11,27 +11,169 @@ before:
 builds:
   - id: "soft-serve"
     binary: "soft-serve"
-    ldflags: -s -w -X main.Version={{ .Commit }}-snapshot -X main.CommitSHA={{ .Commit }}
+    ldflags: -s -w -X main.Version=v{{ .Version }} -X main.CommitSHA={{ .Commit }}
     goos:
       - linux
+      # - darwin
+      # - windows
     goarch:
       - amd64
+      - arm64
+      - "386"
+      - arm
+    goarm:
+      - "6"
+      - "7"
 
 dockers:
   - image_templates:
-      - "ghcr.io/charmbracelet/soft-serve-internal:snapshot"
-      - "ghcr.io/charmbracelet/soft-serve-internal:{{ .Commit }}-snapshot"
+      - "charmcli/soft-serve:latest-amd64"
+      - "charmcli/soft-serve:v{{ .Major }}.{{ .Minor }}-amd64"
+      - "charmcli/soft-serve:v{{ .Version }}-amd64"
+      - "ghcr.io/charmbracelet/soft-serve:latest-amd64"
+      - "ghcr.io/charmbracelet/soft-serve:v{{ .Major }}.{{ .Minor }}-amd64"
+      - "ghcr.io/charmbracelet/soft-serve:v{{ .Version }}-amd64"
     ids: [soft-serve]
     goarch: amd64
     build_flag_templates:
       - --platform=linux/amd64
       - --label=org.opencontainers.image.title={{ .ProjectName }}
       - --label=org.opencontainers.image.description={{ .ProjectName }}
-      - --label=org.opencontainers.image.url=https://github.com/charmbracelet/soft-serve-internal
-      - --label=org.opencontainers.image.source=https://github.com/charmbracelet/soft-serve-internal
-      - --label=org.opencontainers.image.version={{ .Commit }}-snapshot
+      - --label=org.opencontainers.image.url=https://github.com/charmbracelet/soft-serve
+      - --label=org.opencontainers.image.source=https://github.com/charmbracelet/soft-serve
+      - --label=org.opencontainers.image.version=v{{ .Version }}
       - --label=org.opencontainers.image.created={{ .Date }}
       - --label=org.opencontainers.image.revision={{ .FullCommit }}
       - --label=org.opencontainers.image.licenses=MIT
     dockerfile: Dockerfile
     use: buildx
+  - image_templates:
+      - "charmcli/soft-serve:latest-i386"
+      - "charmcli/soft-serve:v{{ .Major }}.{{ .Minor }}-i386"
+      - "charmcli/soft-serve:v{{ .Version }}-i386"
+      - "ghcr.io/charmbracelet/soft-serve:latest-i386"
+      - "ghcr.io/charmbracelet/soft-serve:v{{ .Major }}.{{ .Minor }}-i386"
+      - "ghcr.io/charmbracelet/soft-serve:v{{ .Version }}-i386"
+    ids: [soft-serve]
+    goarch: "386"
+    build_flag_templates:
+      - --platform=linux/i386
+      - --label=org.opencontainers.image.title={{ .ProjectName }}
+      - --label=org.opencontainers.image.description={{ .ProjectName }}
+      - --label=org.opencontainers.image.url=https://github.com/charmbracelet/soft-serve
+      - --label=org.opencontainers.image.source=https://github.com/charmbracelet/soft-serve
+      - --label=org.opencontainers.image.version=v{{ .Version }}
+      - --label=org.opencontainers.image.created={{ .Date }}
+      - --label=org.opencontainers.image.revision={{ .FullCommit }}
+      - --label=org.opencontainers.image.licenses=MIT
+    dockerfile: Dockerfile
+    use: buildx
+  - image_templates:
+      - "charmcli/soft-serve:latest-arm64"
+      - "charmcli/soft-serve:v{{ .Major }}.{{ .Minor }}-arm64"
+      - "charmcli/soft-serve:v{{ .Version }}-arm64"
+      - "ghcr.io/charmbracelet/soft-serve:latest-arm64"
+      - "ghcr.io/charmbracelet/soft-serve:v{{ .Major }}.{{ .Minor }}-arm64"
+      - "ghcr.io/charmbracelet/soft-serve:v{{ .Version }}-arm64"
+    ids: [soft-serve]
+    goarch: arm64
+    build_flag_templates:
+      - --platform=linux/arm64
+      - --label=org.opencontainers.image.title={{ .ProjectName }}
+      - --label=org.opencontainers.image.description={{ .ProjectName }}
+      - --label=org.opencontainers.image.url=https://github.com/charmbracelet/soft-serve
+      - --label=org.opencontainers.image.source=https://github.com/charmbracelet/soft-serve
+      - --label=org.opencontainers.image.version=v{{ .Version }}
+      - --label=org.opencontainers.image.created={{ .Date }}
+      - --label=org.opencontainers.image.revision={{ .FullCommit }}
+      - --label=org.opencontainers.image.licenses=MIT
+    dockerfile: Dockerfile
+    use: buildx
+  - image_templates:
+      - "charmcli/soft-serve:latest-armv6"
+      - "charmcli/soft-serve:v{{ .Major }}.{{ .Minor }}-armv6"
+      - "charmcli/soft-serve:v{{ .Version }}-armv6"
+      - "ghcr.io/charmbracelet/soft-serve:latest-armv6"
+      - "ghcr.io/charmbracelet/soft-serve:v{{ .Major }}.{{ .Minor }}-armv6"
+      - "ghcr.io/charmbracelet/soft-serve:v{{ .Version }}-armv6"
+    ids: [soft-serve]
+    goarch: arm
+    goarm: "6"
+    build_flag_templates:
+      - --platform=linux/arm/v6
+      - --label=org.opencontainers.image.title={{ .ProjectName }}
+      - --label=org.opencontainers.image.description={{ .ProjectName }}
+      - --label=org.opencontainers.image.url=https://github.com/charmbracelet/soft-serve
+      - --label=org.opencontainers.image.source=https://github.com/charmbracelet/soft-serve
+      - --label=org.opencontainers.image.version=v{{ .Version }}
+      - --label=org.opencontainers.image.created={{ .Date }}
+      - --label=org.opencontainers.image.revision={{ .FullCommit }}
+      - --label=org.opencontainers.image.licenses=MIT
+    dockerfile: Dockerfile
+    use: buildx
+  - image_templates:
+      - "charmcli/soft-serve:latest-armv7"
+      - "charmcli/soft-serve:v{{ .Major }}.{{ .Minor }}-armv7"
+      - "charmcli/soft-serve:v{{ .Version }}-armv7"
+      - "ghcr.io/charmbracelet/soft-serve:latest-armv7"
+      - "ghcr.io/charmbracelet/soft-serve:v{{ .Major }}.{{ .Minor }}-armv7"
+      - "ghcr.io/charmbracelet/soft-serve:v{{ .Version }}-armv7"
+    ids: [soft-serve]
+    goarch: arm
+    goarm: "7"
+    build_flag_templates:
+      - --platform=linux/arm/v7
+      - --label=org.opencontainers.image.title={{ .ProjectName }}
+      - --label=org.opencontainers.image.description={{ .ProjectName }}
+      - --label=org.opencontainers.image.url=https://github.com/charmbracelet/soft-serve
+      - --label=org.opencontainers.image.source=https://github.com/charmbracelet/soft-serve
+      - --label=org.opencontainers.image.version=v{{ .Version }}
+      - --label=org.opencontainers.image.created={{ .Date }}
+      - --label=org.opencontainers.image.revision={{ .FullCommit }}
+      - --label=org.opencontainers.image.licenses=MIT
+    dockerfile: Dockerfile
+    use: buildx
+
+docker_manifests:
+  - name_template: charmcli/soft-serve:latest
+    image_templates:
+      - charmcli/soft-serve:latest-amd64
+      - charmcli/soft-serve:latest-arm64
+      - charmcli/soft-serve:latest-armv6
+      - charmcli/soft-serve:latest-armv7
+      - charmcli/soft-serve:latest-i386
+  - name_template: ghcr.io/charmbracelet/soft-serve:latest
+    image_templates:
+      - ghcr.io/charmbracelet/soft-serve:latest-amd64
+      - ghcr.io/charmbracelet/soft-serve:latest-arm64
+      - ghcr.io/charmbracelet/soft-serve:latest-armv6
+      - ghcr.io/charmbracelet/soft-serve:latest-armv7
+      - ghcr.io/charmbracelet/soft-serve:latest-i386
+  - name_template: charmcli/soft-serve:v{{ .Major }}
+    image_templates:
+      - charmcli/soft-serve:v{{ .Major }}.{{ .Minor }}-amd64
+      - charmcli/soft-serve:v{{ .Major }}.{{ .Minor }}-arm64
+      - charmcli/soft-serve:v{{ .Major }}.{{ .Minor }}-armv6
+      - charmcli/soft-serve:v{{ .Major }}.{{ .Minor }}-armv7
+      - charmcli/soft-serve:v{{ .Major }}.{{ .Minor }}-i386
+  - name_template: ghcr.io/charmbracelet/soft-serve:v{{ .Major }}.{{ .Minor }}
+    image_templates:
+      - ghcr.io/charmbracelet/soft-serve:v{{ .Major }}.{{ .Minor }}-amd64
+      - ghcr.io/charmbracelet/soft-serve:v{{ .Major }}.{{ .Minor }}-arm64
+      - ghcr.io/charmbracelet/soft-serve:v{{ .Major }}.{{ .Minor }}-armv6
+      - ghcr.io/charmbracelet/soft-serve:v{{ .Major }}.{{ .Minor }}-armv7
+      - ghcr.io/charmbracelet/soft-serve:v{{ .Major }}.{{ .Minor }}-i386
+  - name_template: charmcli/soft-serve:v{{ .Version }}
+    image_templates:
+      - charmcli/soft-serve:v{{ .Version }}-amd64
+      - charmcli/soft-serve:v{{ .Version }}-arm64
+      - charmcli/soft-serve:v{{ .Version }}-armv6
+      - charmcli/soft-serve:v{{ .Version }}-armv7
+      - charmcli/soft-serve:v{{ .Version }}-i386
+  - name_template: ghcr.io/charmbracelet/soft-serve:v{{ .Version }}
+    image_templates:
+      - ghcr.io/charmbracelet/soft-serve:v{{ .Version }}-amd64
+      - ghcr.io/charmbracelet/soft-serve:v{{ .Version }}-arm64
+      - ghcr.io/charmbracelet/soft-serve:v{{ .Version }}-armv6
+      - ghcr.io/charmbracelet/soft-serve:v{{ .Version }}-armv7
+      - ghcr.io/charmbracelet/soft-serve:v{{ .Version }}-i386

Dockerfile 🔗

@@ -0,0 +1,22 @@
+FROM alpine:latest
+
+RUN apk update && apk add --update git && rm -rf /var/cache/apk/*
+
+COPY soft-serve /usr/local/bin/soft-serve
+
+# Create directories
+WORKDIR /soft-serve
+# Expose data volume
+VOLUME /soft-serve
+
+# Environment variables
+ENV SOFT_SERVE_KEY_PATH "/soft-serve/ssh/soft_serve_server_ed25519"
+ENV SOFT_SERVE_INITIAL_ADMIN_KEY ""
+ENV SOFT_SERVE_REPO_PATH "/soft-serve/repos"
+
+# Expose ports
+# SSH
+EXPOSE 23231/tcp
+
+# Set the default command
+ENTRYPOINT [ "/usr/local/bin/soft-serve" ]