Skip to content

Commit

Permalink
Add container image build workflow (#132)
Browse files Browse the repository at this point in the history
  • Loading branch information
afritzler authored Sep 2, 2024
1 parent c9206c9 commit 08c260c
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 9 deletions.
93 changes: 93 additions & 0 deletions .github/workflows/publish-docker.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
name: Build and Publish Docker Image

on:
release:
types:
- published
push:
branches:
- master
tags:
- v*
paths-ignore:
- 'docs/**'
- '**/*.md'
pull_request:
types:
- labeled
paths-ignore:
- 'docs/**'
- '**/*.md'

jobs:
buildAndPush:
permissions:
contents: read
packages: write
if: ${{ github.event.label.name == 'ok-to-image' }} || ${{ github.event.label.name == 'ok-to-🐳' }} || ${{ github.ref == 'refs/heads/main' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: docker/metadata-action@v5
id: meta
with:
images: |
ghcr.io/${{ github.repository_owner }}/metalbond
tags: |
type=semver,pattern={{version}}
type=schedule
type=ref,event=branch
type=ref,event=tag
type=ref,event=pr
type=sha
flavor: |
latest=${{ github.ref == 'refs/heads/main' }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: all
# workaround for self-hosted runner
# https://github.com/mumoshu/actions-runner-controller-ci/commit/e91c8c0f6ca82aa7618010c6d2f417aa46c4a4bf

- name: Set up Docker Context for Buildx
id: buildx-context
run: |
docker context create builders
- name: Set up Docker Buildx
timeout-minutes: 5
uses: docker/setup-buildx-action@v3
with:
version: latest
endpoint: builders # self-hosted

- name: Login to GHCR
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Determine version
id: vars
run: |
if [ "${{ github.ref }}" == "refs/heads/main" ]; then
METALBOND_VERSION=$(echo "${{ github.sha }}" | cut -c1-7)
else
METALBOND_VERSION=${GITHUB_REF##*/}
fi
echo "METALBOND_VERSION=$METALBOND_VERSION" >> $GITHUB_ENV
- name: Build and push
timeout-minutes: 40
uses: docker/build-push-action@v6
with:
context: .
build-args: |
METALBOND_VERSION=${{ env.METALBOND_VERSION }}
platforms: linux/amd64,linux/arm64
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
33 changes: 25 additions & 8 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,21 +1,38 @@
FROM golang:1.22-bullseye AS builder
FROM --platform=$BUILDPLATFORM golang:1.22-bullseye AS builder

ARG DEBIAN_FRONTEND=noninteractive
ARG GOARCH=''

WORKDIR /workspace

# Copy the Go Modules manifests
COPY go.mod go.mod
COPY go.sum go.sum

# cache deps before building and copying source so that we don't need to re-download as much
# and so that source changes don't invalidate our downloaded layer
RUN --mount=type=cache,target=/root/.cache/go-build \
--mount=type=cache,target=/go/pkg \
go mod download

COPY cmd cmd
COPY html html
COPY pb pb
COPY .git .git
COPY Makefile .
COPY go.mod .
COPY go.sum .
COPY *.go ./

RUN make amd64
ARG TARGETOS
ARG TARGETARCH

# Build
ARG METALBOND_VERSION
RUN --mount=type=cache,target=/root/.cache/go-build \
--mount=type=cache,target=/go/pkg \
CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH go build -buildvcs=false -ldflags "-X github.com/ironcore-dev/metalbond.METALBOND_VERSION=$METALBOND_VERSION" -o metalbond cmd/cmd.go

FROM debian:bullseye-slim

RUN apt-get update && apt-get install -y iproute2 ethtool wget adduser inetutils-ping && rm -rf /var/lib/apt/lists/*
COPY --from=builder /workspace/target/metalbond_amd64 /usr/sbin/metalbond
COPY --from=builder /workspace/target/html /usr/share/metalbond/html
COPY --from=builder /workspace/metalbond /usr/sbin/metalbond
COPY --from=builder /workspace/html /usr/share/metalbond/html

RUN echo -e "254\tmetalbond" >> "/etc/iproute2/rt_protos"
5 changes: 4 additions & 1 deletion cmd/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,10 @@ var CLI struct {
}

func main() {
log.Infof("MetalBond %s", metalbond.METALBOND_VERSION)
if metalbond.METALBOND_VERSION == "" {
metalbond.METALBOND_VERSION = "development" // Fallback for when version is not set
}
log.Infof("MetalBond Version: %s", metalbond.METALBOND_VERSION)

go func() {
for {
Expand Down

0 comments on commit 08c260c

Please sign in to comment.