From 7f372c46db4afa4c01588efcb491ebc7689e6652 Mon Sep 17 00:00:00 2001 From: henrygd Date: Sat, 25 Oct 2025 11:59:57 -0400 Subject: [PATCH] add alpine image + add smartmontools to intel / nvidia images --- .github/workflows/docker-images.yml | 99 ++++++++++++++++++++++++----- internal/dockerfile_agent_alpine | 28 ++++++++ internal/dockerfile_agent_intel | 2 +- internal/dockerfile_agent_nvidia | 2 + 4 files changed, 114 insertions(+), 17 deletions(-) create mode 100644 internal/dockerfile_agent_alpine diff --git a/.github/workflows/docker-images.yml b/.github/workflows/docker-images.yml index f886fef0..f1960b43 100644 --- a/.github/workflows/docker-images.yml +++ b/.github/workflows/docker-images.yml @@ -12,65 +12,137 @@ jobs: fail-fast: false matrix: include: + # henrygd/beszel - image: henrygd/beszel - context: ./ dockerfile: ./internal/dockerfile_hub registry: docker.io username_secret: DOCKERHUB_USERNAME password_secret: DOCKERHUB_TOKEN + tags: | + type=raw,value=edge + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=raw,value={{sha}},enable=${{ github.ref_type != 'tag' }} + # henrygd/beszel-agent - image: henrygd/beszel-agent - context: ./ dockerfile: ./internal/dockerfile_agent registry: docker.io username_secret: DOCKERHUB_USERNAME password_secret: DOCKERHUB_TOKEN + tags: | + type=raw,value=edge + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=raw,value={{sha}},enable=${{ github.ref_type != 'tag' }} + # henrygd/beszel-agent-nvidia - image: henrygd/beszel-agent-nvidia - context: ./ dockerfile: ./internal/dockerfile_agent_nvidia platforms: linux/amd64 registry: docker.io username_secret: DOCKERHUB_USERNAME password_secret: DOCKERHUB_TOKEN - + tags: | + type=raw,value=edge + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=raw,value={{sha}},enable=${{ github.ref_type != 'tag' }} + + # henrygd/beszel-agent-intel - image: henrygd/beszel-agent-intel - context: ./ dockerfile: ./internal/dockerfile_agent_intel platforms: linux/amd64 registry: docker.io username_secret: DOCKERHUB_USERNAME password_secret: DOCKERHUB_TOKEN + tags: | + type=raw,value=edge + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=raw,value={{sha}},enable=${{ github.ref_type != 'tag' }} + # henrygd/beszel-agent:alpine + - image: henrygd/beszel-agent + dockerfile: ./internal/dockerfile_agent_alpine + registry: docker.io + username_secret: DOCKERHUB_USERNAME + password_secret: DOCKERHUB_TOKEN + tags: | + type=raw,value=alpine + type=semver,pattern={{version}}-alpine + type=semver,pattern={{major}}.{{minor}}-alpine + type=semver,pattern={{major}}-alpine + + # ghcr.io/henrygd/beszel - image: ghcr.io/${{ github.repository }}/beszel - context: ./ dockerfile: ./internal/dockerfile_hub registry: ghcr.io username: ${{ github.actor }} password_secret: GITHUB_TOKEN + tags: | + type=raw,value=edge + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=raw,value={{sha}},enable=${{ github.ref_type != 'tag' }} + # ghcr.io/henrygd/beszel-agent - image: ghcr.io/${{ github.repository }}/beszel-agent - context: ./ dockerfile: ./internal/dockerfile_agent registry: ghcr.io username: ${{ github.actor }} password_secret: GITHUB_TOKEN + tags: | + type=raw,value=edge + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=raw,value={{sha}},enable=${{ github.ref_type != 'tag' }} + # ghcr.io/henrygd/beszel-agent-nvidia - image: ghcr.io/${{ github.repository }}/beszel-agent-nvidia - context: ./ dockerfile: ./internal/dockerfile_agent_nvidia platforms: linux/amd64 registry: ghcr.io username: ${{ github.actor }} password_secret: GITHUB_TOKEN + tags: | + type=raw,value=edge + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=raw,value={{sha}},enable=${{ github.ref_type != 'tag' }} + # ghcr.io/henrygd/beszel-agent-intel - image: ghcr.io/${{ github.repository }}/beszel-agent-intel - context: ./ dockerfile: ./internal/dockerfile_agent_intel platforms: linux/amd64 registry: ghcr.io username: ${{ github.actor }} password_secret: GITHUB_TOKEN + tags: | + type=raw,value=edge + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=raw,value={{sha}},enable=${{ github.ref_type != 'tag' }} + + # ghcr.io/henrygd/beszel-agent:alpine + - image: ghcr.io/${{ github.repository }}/beszel-agent + dockerfile: ./internal/dockerfile_agent_alpine + registry: ghcr.io + username: ${{ github.actor }} + password_secret: GITHUB_TOKEN + tags: | + type=raw,value=alpine + type=semver,pattern={{version}}-alpine + type=semver,pattern={{major}}.{{minor}}-alpine + type=semver,pattern={{major}}-alpine permissions: contents: read @@ -100,12 +172,7 @@ jobs: uses: docker/metadata-action@v5 with: images: ${{ matrix.image }} - tags: | - type=raw,value=edge - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} - type=raw,value={{sha}},enable=${{ github.ref_type != 'tag' }} + tags: ${{ matrix.tags }} # https://github.com/docker/login-action - name: Login to Docker Hub @@ -123,7 +190,7 @@ jobs: - name: Build and push Docker image uses: docker/build-push-action@v5 with: - context: "${{ matrix.context }}" + context: ./ file: ${{ matrix.dockerfile }} platforms: ${{ matrix.platforms || 'linux/amd64,linux/arm64,linux/arm/v7' }} push: ${{ github.ref_type == 'tag' && secrets[matrix.password_secret] != '' }} diff --git a/internal/dockerfile_agent_alpine b/internal/dockerfile_agent_alpine new file mode 100644 index 00000000..bee25b38 --- /dev/null +++ b/internal/dockerfile_agent_alpine @@ -0,0 +1,28 @@ +FROM --platform=$BUILDPLATFORM golang:alpine AS builder + +WORKDIR /app + +COPY ../go.mod ../go.sum ./ +RUN go mod download + +# Copy source files +COPY . ./ + +# Build +ARG TARGETOS TARGETARCH +RUN CGO_ENABLED=0 GOGC=75 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -ldflags "-w -s" -o /agent ./internal/cmd/agent + +RUN rm -rf /tmp/* + +# -------------------------- +# Final image: default scratch-based agent +# -------------------------- +FROM alpine:latest +COPY --from=builder /agent /agent + +RUN apk add --no-cache smartmontools + +# Ensure data persistence across container recreations +VOLUME ["/var/lib/beszel-agent"] + +ENTRYPOINT ["/agent"] \ No newline at end of file diff --git a/internal/dockerfile_agent_intel b/internal/dockerfile_agent_intel index d3c07683..e56c358d 100644 --- a/internal/dockerfile_agent_intel +++ b/internal/dockerfile_agent_intel @@ -20,7 +20,7 @@ FROM alpine:edge COPY --from=builder /agent /agent -RUN apk add --no-cache -X https://dl-cdn.alpinelinux.org/alpine/edge/testing igt-gpu-tools +RUN apk add --no-cache -X https://dl-cdn.alpinelinux.org/alpine/edge/testing igt-gpu-tools smartmontools # Ensure data persistence across container recreations VOLUME ["/var/lib/beszel-agent"] diff --git a/internal/dockerfile_agent_nvidia b/internal/dockerfile_agent_nvidia index 0afbd061..e6341732 100644 --- a/internal/dockerfile_agent_nvidia +++ b/internal/dockerfile_agent_nvidia @@ -24,6 +24,8 @@ COPY --from=builder /agent /agent # this is so we don't need to create the /tmp directory in the scratch container COPY --from=builder /tmp /tmp +RUN apt-get update && apt-get install -y smartmontools && rm -rf /var/lib/apt/lists/* + # Ensure data persistence across container recreations VOLUME ["/var/lib/beszel-agent"]