Skip to content

Commit

Permalink
support arch images (#332)
Browse files Browse the repository at this point in the history
Signed-off-by: chentanjun <tanjunchen20@gmail.com>
  • Loading branch information
tanjunchen committed Apr 12, 2023
1 parent 482647f commit 2e743ea
Show file tree
Hide file tree
Showing 3 changed files with 100 additions and 7 deletions.
13 changes: 10 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ IMAGE_E2E?=$(IMAGE_REPO)/$(IMAGE_NAME):$(IMAGE_E2E_TAG)
BINARY_NAME?=$(OUT)/aeraki
BINARY_NAME_DARWIN?=$(BINARY_NAME)-darwin
MAIN_PATH_AERAKI=./cmd/aeraki/main.go
GOOS?=linux
GOARCH?=amd64

.DEFAULT_GOAL := build

Expand All @@ -58,15 +60,16 @@ test: style-check
$(GOMOD) tidy
$(GOTEST) -race `go list ./... | grep -v e2e`
build: test
CGO_ENABLED=0 GOOS=linux $(GOBUILD) -o $(BINARY_NAME) $(MAIN_PATH_AERAKI)
CGO_ENABLED=0 GOOS=${GOOS} GOARCH=${GOARCH} $(GOBUILD) -o $(BINARY_NAME) $(MAIN_PATH_AERAKI)
build-mac: test
CGO_ENABLED=0 GOOS=darwin $(GOBUILD) -o $(BINARY_NAME_DARWIN) $(MAIN_PATH_AERAKI)
CGO_ENABLED=0 GOOS=darwin GOARCH=${GOARCH} $(GOBUILD) -o $(BINARY_NAME_DARWIN) $(MAIN_PATH_AERAKI)
docker-build: build
rm -rf $(IMAGE_TMP)
mkdir $(IMAGE_TMP)
cp ./docker/Dockerfile $(IMAGE_TMP)
cp $(BINARY_NAME) $(IMAGE_TMP)
docker build -t $(IMAGE) $(IMAGE_TMP)
docker build --platform=${GOOS}/${GOARCH} -t $(IMAGE) $(IMAGE_TMP)
rm -rf $(IMAGE_TMP)
docker-push: docker-build
docker push $(IMAGE)
Expand All @@ -75,8 +78,12 @@ docker-build-e2e: build
mkdir $(IMAGE_TMP)
cp ./docker/Dockerfile $(IMAGE_TMP)
cp $(BINARY_NAME) $(IMAGE_TMP)
docker build -t $(IMAGE_E2E) $(IMAGE_TMP)
docker build --platform=${GOOS}/${GOARCH} -t $(IMAGE_E2E) $(IMAGE_TMP)
rm -rf $(IMAGE_TMP)

cross_build_images:
bash hack/make-rules/cross_build_images.sh

clean:
rm -rf $(OUT)
style-check:
Expand Down
10 changes: 6 additions & 4 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,11 @@
# See the License for the specific language governing permissions and
# limitations under the License.

# FROM ubuntu:bionic
# FROM praqma/network-multitool
FROM alpine:3.13.5
FROM alpine:3.17

COPY aeraki /usr/local/bin/
ARG AERAKI_ROOT_BIN_DIR
ARG ARCH
ARG OS

COPY ${AERAKI_ROOT_BIN_DIR}/${ARCH}/${OS}/aeraki /usr/local/bin/
ENTRYPOINT /usr/local/bin/aeraki
84 changes: 84 additions & 0 deletions hack/make-rules/cross_build_images.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
#!/usr/bin/env bash

# Copyright Aeraki Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set -o errexit
set -o nounset
set -o pipefail

AERAKI_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -P)"
AERAKI_ROOT_BIN_DIR=out
AERAKI_DOCKERFILE_PATH=${AERAKI_ROOT}/docker
AERAKI_MAIN_PATH=${AERAKI_ROOT}/"${AERAKI_MAIN_PATH:-/cmd/aeraki/main.go}"
AERAKI_IMAGE_COMMIT_TAG=$(git rev-parse "HEAD^{commit}")
AERAKI_IMAG_TAG="${AERAKI_IMAG_TAG:-latest}"
AERAKI_REPO="${AERAKI_REPO:-ghcr.io/aeraki-mesh}"
AERAKI_IMAGE_REPO_NAME="${IMAGE_REPO_NAME:-aeraki}"
AERAKI_REL_OSARCH="${IMAGE_REPO_NAME:-amd64 arm64}"
AERAKI_REL_OS="${AERAKI_REL_OS:-linux}"

function clean() {
rm -rf ${AERAKI_ROOT}/${AERAKI_ROOT_BIN_DIR}
}

function build_bin() {
for ARCH in ${AERAKI_REL_OSARCH}; do \
for OS in ${AERAKI_REL_OS}; do \
CGO_ENABLED=0 GOOS=${OS} GOARCH=${ARCH} go build -o=${AERAKI_ROOT_BIN_DIR}/${ARCH}/${OS}/${AERAKI_IMAGE_REPO_NAME} ${AERAKI_MAIN_PATH};\
done
done
echo "build_bin successful"
}

function build_images() {
for ARCH in ${AERAKI_REL_OSARCH}; do \
for OS in ${AERAKI_REL_OS}; do \
docker buildx build --build-arg AERAKI_ROOT_BIN_DIR=${AERAKI_ROOT_BIN_DIR} --build-arg ARCH=${ARCH} --build-arg OS=${OS} --no-cache --platform ${OS}/${ARCH} -t ${AERAKI_REPO}/${AERAKI_IMAGE_REPO_NAME}:${AERAKI_IMAG_TAG}-${OS}-${ARCH} -f ${AERAKI_DOCKERFILE_PATH}/Dockerfile . --load ;\
done
done
echo "build_images successful"
}

function push_images() {
for ARCH in ${AERAKI_REL_OSARCH}; do \
for OS in ${AERAKI_REL_OS}; do \
docker push ${AERAKI_REPO}/${AERAKI_IMAGE_REPO_NAME}:${AERAKI_IMAG_TAG}-${OS}-${ARCH};\
done
done
echo "push_images successful"
}

function create_multi_arch_images() {
for OS in ${AERAKI_REL_OS}; do \
local IMAGES=""
for ARCH in ${AERAKI_REL_OSARCH}; do \
IMAGES="${IMAGES} ${AERAKI_REPO}/${AERAKI_IMAGE_REPO_NAME}:${AERAKI_IMAG_TAG}-${OS}-${ARCH}"
done
echo ${IMAGES}
docker manifest create ${AERAKI_REPO}/${AERAKI_IMAGE_REPO_NAME}:${AERAKI_IMAG_TAG} ${IMAGES} --amend
docker manifest push ${AERAKI_REPO}/${AERAKI_IMAGE_REPO_NAME}:${AERAKI_IMAG_TAG}
done
echo "create_multi_arch_images successful"
}

clean

build_bin

build_images

push_images

create_multi_arch_images

0 comments on commit 2e743ea

Please sign in to comment.