FROM golang:1.27.0-alpine AS build WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY cmd/ ./cmd/ COPY pkg/ ./pkg/ RUN go test -count=1 ./... ARG GIT_SHA=unknown RUN CGO_ENABLED=0 go build -trimpath \ -ldflags="-s -w -X main.gitSHA=${GIT_SHA}" \ -o /out/flock ./cmd/flock \ && CGO_ENABLED=0 go build -trimpath \ -ldflags="-s -w -X main.gitSHA=${GIT_SHA}" \ -o /out/flock-agent ./cmd/flock-agent \ && CGO_ENABLED=0 go build -trimpath \ -ldflags="-s -w -X main.gitSHA=${GIT_SHA}" \ -o /out/flock-installer ./cmd/flock-installer FROM alpine:3.21 AS bird-build ARG BIRD_VERSION=2.19.1 ARG BIRD_SHA256=e91aedac07da4f2718f269f969f65dbcd12f4b58248a784fd32e587b7b4dd7e4 RUN apk add --no-cache \ bison \ build-base \ curl \ flex \ libssh-dev \ linux-headers \ ncurses-dev \ readline-dev \ && curl -fsSL --proto '=https' --tlsv1.2 \ "https://bird.nic.cz/download/bird-${BIRD_VERSION}.tar.gz" \ -o /tmp/bird.tar.gz \ && echo "${BIRD_SHA256} /tmp/bird.tar.gz" | sha256sum -c - \ && tar -xzf /tmp/bird.tar.gz -C /tmp \ && cd "/tmp/bird-${BIRD_VERSION}" \ && ./configure --prefix=/usr --sysconfdir=/etc/bird --runstatedir=/run/bird \ && make -j"$(nproc)" \ && make DESTDIR=/out install FROM alpine:3.21 RUN apk add --no-cache iproute2 nftables ca-certificates libssh ncurses-libs readline COPY --from=bird-build /out/usr/sbin/bird /usr/sbin/bird COPY --from=bird-build /out/usr/sbin/birdc /usr/sbin/birdc COPY --from=build /out/flock /usr/local/bin/flock COPY --from=build /out/flock-agent /usr/local/bin/flock-agent COPY --from=build /out/flock-installer /usr/local/bin/flock-installer ENTRYPOINT ["/usr/local/bin/flock-agent"]