diff --git a/.github/workflows/publish-images.yaml b/.github/workflows/publish-images.yaml new file mode 100644 index 000000000..ffee8caa9 --- /dev/null +++ b/.github/workflows/publish-images.yaml @@ -0,0 +1,70 @@ +name: Publish Kraken Images + +on: + push: + tags: + - '*' + +permissions: + contents: read + packages: write + +jobs: + build-and-push: + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + include: + - component: kraken-agent + dockerfile: docker/agent/Dockerfile + - component: kraken-build-index + dockerfile: docker/build-index/Dockerfile + - component: kraken-origin + dockerfile: docker/origin/Dockerfile + - component: kraken-proxy + dockerfile: docker/proxy/Dockerfile + - component: kraken-testfs + dockerfile: docker/testfs/Dockerfile + - component: kraken-tracker + dockerfile: docker/tracker/Dockerfile + - component: kraken-herd + dockerfile: docker/herd/Dockerfile + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: amd64,arm64 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Generate image metadata (${{ matrix.component }}) + id: meta + uses: docker/metadata-action@v5 + with: + images: ghcr.io/${{ github.repository_owner }}/${{ matrix.component }} + tags: | + type=ref,event=tag + type=ref,event=branch + type=sha,format=short + + - name: Build and push ${{ matrix.component }} + uses: docker/build-push-action@v5 + with: + context: . + file: ${{ matrix.dockerfile }} + push: true + platforms: linux/amd64,linux/arm64 + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/docker/agent/Dockerfile b/docker/agent/Dockerfile index dc3695125..e692166dc 100644 --- a/docker/agent/Dockerfile +++ b/docker/agent/Dockerfile @@ -1,3 +1,23 @@ +# syntax=docker/dockerfile:1.6 + +FROM golang:1.23.11 AS builder + + +ENV CGO_ENABLED=1 GO111MODULE=on + +WORKDIR /src + +RUN apt-get update && \ + apt-get install -y --no-install-recommends build-essential pkg-config sqlite3 libsqlite3-dev && \ + rm -rf /var/lib/apt/lists/* + +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . +RUN mkdir -p /out && \ + go build -buildvcs=false -o /out/kraken-agent ./agent + FROM debian:12 RUN echo 'Acquire::Check-Valid-Until "false";' > /etc/apt/apt.conf.d/99no-check-valid-until && \ @@ -32,7 +52,7 @@ RUN if [ ${USERID} != "0" ]; then useradd --uid ${USERID} ${USERNAME}; fi COPY ./docker/setup_nginx.sh /tmp/setup_nginx.sh RUN /tmp/setup_nginx.sh ${USERNAME} -COPY ./agent/agent /usr/bin/kraken-agent +COPY --from=builder /out/kraken-agent /usr/bin/kraken-agent COPY ./config /etc/kraken/config COPY ./nginx/config /etc/kraken/nginx/config COPY ./test/tls /etc/kraken/tls diff --git a/docker/build-index/Dockerfile b/docker/build-index/Dockerfile index 463f3868f..e59d6b4fc 100644 --- a/docker/build-index/Dockerfile +++ b/docker/build-index/Dockerfile @@ -1,3 +1,23 @@ +# syntax=docker/dockerfile:1.6 + +FROM golang:1.23.11 AS builder + + +ENV CGO_ENABLED=1 GO111MODULE=on + +WORKDIR /src + +RUN apt-get update && \ + apt-get install -y --no-install-recommends build-essential pkg-config sqlite3 libsqlite3-dev && \ + rm -rf /var/lib/apt/lists/* + +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . +RUN mkdir -p /out && \ + go build -buildvcs=false -o /out/kraken-build-index ./build-index + FROM debian:12 # Fix repository configuration for Debian 12 (bookworm) with multiple mirrors and better retry logic @@ -33,7 +53,7 @@ RUN if [ ${USERID} != "0" ]; then useradd --uid ${USERID} ${USERNAME}; fi COPY ./docker/setup_nginx.sh /tmp/setup_nginx.sh RUN /tmp/setup_nginx.sh ${USERNAME} -COPY ./build-index/build-index /usr/bin/kraken-build-index +COPY --from=builder /out/kraken-build-index /usr/bin/kraken-build-index COPY ./config /etc/kraken/config COPY ./nginx/config /etc/kraken-build-index/nginx/config COPY ./localdb/migrations /etc/kraken-build-index/localdb/migrations diff --git a/docker/herd/Dockerfile b/docker/herd/Dockerfile index 3d5cc1db8..1cad664e7 100644 --- a/docker/herd/Dockerfile +++ b/docker/herd/Dockerfile @@ -1,5 +1,29 @@ +# syntax=docker/dockerfile:1.6 + # This image combines all central components into one container, for easier # deployment and management. +FROM golang:1.23.11 AS builder + + +ENV CGO_ENABLED=1 GO111MODULE=on + +WORKDIR /src + +RUN apt-get update && \ + apt-get install -y --no-install-recommends build-essential pkg-config sqlite3 libsqlite3-dev && \ + rm -rf /var/lib/apt/lists/* + +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . +RUN mkdir -p /out && \ + go build -buildvcs=false -o /out/kraken-build-index ./build-index && \ + go build -buildvcs=false -o /out/kraken-origin ./origin && \ + go build -buildvcs=false -o /out/kraken-proxy ./proxy && \ + go build -buildvcs=false -o /out/kraken-testfs ./tools/bin/testfs && \ + go build -buildvcs=false -o /out/kraken-tracker ./tracker + FROM debian:12 # Fix repository configuration for Debian 12 (bookworm) with multiple mirrors and better retry logic @@ -58,11 +82,11 @@ RUN if [ ${USERID} != "0" ]; then mkdir -p /etc/sudoers.d/ && \ COPY ./docker/setup_nginx.sh /tmp/setup_nginx.sh RUN /tmp/setup_nginx.sh ${USERNAME} -COPY ./build-index/build-index /usr/bin/kraken-build-index -COPY ./origin/origin /usr/bin/kraken-origin -COPY ./proxy/proxy /usr/bin/kraken-proxy -COPY ./tools/bin/testfs/testfs /usr/bin/kraken-testfs -COPY ./tracker/tracker /usr/bin/kraken-tracker +COPY --from=builder /out/kraken-build-index /usr/bin/kraken-build-index +COPY --from=builder /out/kraken-origin /usr/bin/kraken-origin +COPY --from=builder /out/kraken-proxy /usr/bin/kraken-proxy +COPY --from=builder /out/kraken-testfs /usr/bin/kraken-testfs +COPY --from=builder /out/kraken-tracker /usr/bin/kraken-tracker RUN chmod +x /usr/bin/kraken-build-index && \ chmod +x /usr/bin/kraken-origin && \ diff --git a/docker/origin/Dockerfile b/docker/origin/Dockerfile index cdc65af3f..4b4d0bf14 100644 --- a/docker/origin/Dockerfile +++ b/docker/origin/Dockerfile @@ -1,3 +1,23 @@ +# syntax=docker/dockerfile:1.6 + +FROM golang:1.23.11 AS builder + + +ENV CGO_ENABLED=1 GO111MODULE=on + +WORKDIR /src + +RUN apt-get update && \ + apt-get install -y --no-install-recommends build-essential pkg-config sqlite3 libsqlite3-dev && \ + rm -rf /var/lib/apt/lists/* + +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . +RUN mkdir -p /out && \ + go build -buildvcs=false -o /out/kraken-origin ./origin + FROM debian:12 # Fix repository configuration for Debian 12 (bookworm) with multiple mirrors and better retry logic @@ -34,7 +54,7 @@ RUN if [ ${USERID} != "0" ]; then useradd --uid ${USERID} ${USERNAME}; fi COPY ./docker/setup_nginx.sh /tmp/setup_nginx.sh RUN /tmp/setup_nginx.sh ${USERNAME} -COPY ./origin/origin /usr/bin/kraken-origin +COPY --from=builder /out/kraken-origin /usr/bin/kraken-origin COPY ./config /etc/kraken/config COPY ./nginx/config /etc/kraken/nginx/config COPY ./localdb/migrations /etc/kraken/localdb/migrations diff --git a/docker/proxy/Dockerfile b/docker/proxy/Dockerfile index 7e9048580..e92bfc97f 100644 --- a/docker/proxy/Dockerfile +++ b/docker/proxy/Dockerfile @@ -1,3 +1,23 @@ +# syntax=docker/dockerfile:1.6 + +FROM golang:1.23.11 AS builder + + +ENV CGO_ENABLED=1 GO111MODULE=on + +WORKDIR /src + +RUN apt-get update && \ + apt-get install -y --no-install-recommends build-essential pkg-config sqlite3 libsqlite3-dev && \ + rm -rf /var/lib/apt/lists/* + +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . +RUN mkdir -p /out && \ + go build -buildvcs=false -o /out/kraken-proxy ./proxy + FROM debian:12 # Fix repository configuration for Debian 12 (bookworm) with multiple mirrors and better retry logic @@ -33,7 +53,7 @@ RUN if [ ${USERID} != "0" ]; then useradd --uid ${USERID} ${USERNAME}; fi COPY ./docker/setup_nginx.sh /tmp/setup_nginx.sh RUN /tmp/setup_nginx.sh ${USERNAME} -COPY ./proxy/proxy /usr/bin/kraken-proxy +COPY --from=builder /out/kraken-proxy /usr/bin/kraken-proxy COPY ./config /etc/kraken/config COPY ./nginx/config /etc/kraken/nginx/config COPY ./test/tls /etc/kraken/tls diff --git a/docker/testfs/Dockerfile b/docker/testfs/Dockerfile index ef0230d06..4a30e846c 100644 --- a/docker/testfs/Dockerfile +++ b/docker/testfs/Dockerfile @@ -1,3 +1,23 @@ +# syntax=docker/dockerfile:1.6 + +FROM golang:1.23.11 AS builder + + +ENV CGO_ENABLED=1 GO111MODULE=on + +WORKDIR /src + +RUN apt-get update && \ + apt-get install -y --no-install-recommends build-essential pkg-config sqlite3 libsqlite3-dev && \ + rm -rf /var/lib/apt/lists/* + +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . +RUN mkdir -p /out && \ + go build -buildvcs=false -o /out/kraken-testfs ./tools/bin/testfs + FROM debian:12 # Fix repository configuration for Debian 12 (bookworm) with CDN mirror for better stability @@ -28,7 +48,7 @@ ARG USERNAME="root" ARG USERID="0" RUN if [ ${USERID} != "0" ]; then useradd --uid ${USERID} ${USERNAME}; fi -COPY tools/bin/testfs/testfs /usr/bin/kraken-testfs +COPY --from=builder /out/kraken-testfs /usr/bin/kraken-testfs RUN chmod +x /usr/bin/kraken-testfs USER ${USERNAME} diff --git a/docker/tracker/Dockerfile b/docker/tracker/Dockerfile index 212ef648d..f4ea9e04d 100644 --- a/docker/tracker/Dockerfile +++ b/docker/tracker/Dockerfile @@ -1,3 +1,23 @@ +# syntax=docker/dockerfile:1.6 + +FROM golang:1.23.11 AS builder + + +ENV CGO_ENABLED=1 GO111MODULE=on + +WORKDIR /src + +RUN apt-get update && \ + apt-get install -y --no-install-recommends build-essential pkg-config sqlite3 libsqlite3-dev && \ + rm -rf /var/lib/apt/lists/* + +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . +RUN mkdir -p /out && \ + go build -buildvcs=false -o /out/kraken-tracker ./tracker + FROM debian:12 # Fix repository configuration for Debian 12 (bookworm) with multiple mirrors and better retry logic @@ -33,7 +53,7 @@ RUN if [ ${USERID} != "0" ]; then useradd --uid ${USERID} ${USERNAME}; fi COPY ./docker/setup_nginx.sh /tmp/setup_nginx.sh RUN /tmp/setup_nginx.sh ${USERNAME} -COPY ./tracker/tracker /usr/bin/kraken-tracker +COPY --from=builder /out/kraken-tracker /usr/bin/kraken-tracker COPY ./config /etc/kraken/config COPY ./nginx/config /etc/kraken/nginx/config COPY ./test/tls /etc/kraken/tls