diff --git a/Makefile b/Makefile index b9261e6a..a1e53c92 100644 --- a/Makefile +++ b/Makefile @@ -15,7 +15,7 @@ .DEFAULT_GOAL := check # Platforms to build in multi-architecture images. -PLATFORMS ?= linux/amd64,linux/arm64,linux/arm +PLATFORMS ?= linux/amd64,linux/arm64,linux/arm/v7 # Repository prefix and tag to push multi-architecture images to. REPO ?= fission @@ -43,6 +43,9 @@ build: install-cli: build mv cmd/fission-cli/fission $(GOPATH)/bin +verify-builder: + @./hack/buildx.sh + # build images (environment images are not included) image: docker build -t fission-bundle -f cmd/fission-bundle/Dockerfile.fission-bundle . @@ -51,13 +54,28 @@ image: docker build -t reporter -f cmd/builder/Dockerfile.reporter . # build multi-architecture images for release. -image-multiarch: +image-multiarch: verify-builder docker buildx build --platform=$(PLATFORMS) -t $(REPO)/fission-bundle:$(TAG) --push -f cmd/fission-bundle/Dockerfile.fission-bundle . docker buildx build --platform=$(PLATFORMS) -t $(REPO)/fetcher:$(TAG) --push -f cmd/fetcher/Dockerfile.fission-fetcher . docker buildx build --platform=$(PLATFORMS) -t $(REPO)/builder:$(TAG) --push -f cmd/builder/Dockerfile.fission-builder . docker buildx build --platform=$(PLATFORMS) -t $(REPO)/preupgradechecks:$(TAG) --push -f cmd/preupgradechecks/Dockerfile.fission-preupgradechecks . docker buildx build --platform=$(PLATFORMS) -t $(REPO)/reporter:$(TAG) --push -f cmd/reporter/Dockerfile.reporter . +multiarch-bundle: verify-builder + docker buildx build --platform=$(PLATFORMS) -t $(REPO)/fission-bundle:$(TAG) --push -f cmd/fission-bundle/Dockerfile.fission-bundle . + +multiarch-fetcher: verify-builder + docker buildx build --platform=$(PLATFORMS) -t $(REPO)/fetcher:$(TAG) --push -f cmd/fetcher/Dockerfile.fission-fetcher . + +multiarch-builder: verify-builder + docker buildx build --platform=$(PLATFORMS) -t $(REPO)/builder:$(TAG) --push -f cmd/builder/Dockerfile.fission-builder . + +multiarch-preupgrade: verify-builder + docker buildx build --platform=$(PLATFORMS) -t $(REPO)/pre-upgrade-checks:$(TAG) --push -f cmd/preupgradechecks/Dockerfile.fission-preupgradechecks . + +multiarch-reporter: verify-builder + docker buildx build --platform=$(PLATFORMS) -t $(REPO)/reporter:$(TAG) --push -f cmd/reporter/Dockerfile.reporter . + generate-crds: controller-gen crd:trivialVersions=false,preserveUnknownFields=false paths=./pkg/apis/core/v1 output:crd:artifacts:config=crds/v1 diff --git a/hack/buildx.sh b/hack/buildx.sh new file mode 100755 index 00000000..76950290 --- /dev/null +++ b/hack/buildx.sh @@ -0,0 +1,26 @@ +set -e +## This script needs to be run to start the emulator for multiarch builds +create_docker_builder() { + if ! $(docker buildx inspect --bootstrap | grep "^Driver" | grep -q "docker-container"); then + echo "Starting docker builder fission" + docker buildx create --name=fission --use --driver=docker-container + docker buildx inspect --bootstrap + fi +} + +check_platform() { + if ! $(docker buildx inspect --bootstrap | grep "^Platforms:" | grep -q "$1"); then + echo "Platform $1 not supported by builder" + exit 1 + fi +} + +create_docker_builder +PLATFORMS=( + linux/amd64 + linux/arm6455 + linux/arm/v7 +) +for platform in "${PLATFORMS[@]}"; do + check_platform $platform +done diff --git a/hack/release.sh b/hack/release.sh index f0981d7d..ce04cc7c 100755 --- a/hack/release.sh +++ b/hack/release.sh @@ -70,6 +70,36 @@ push_all() { push_pre_upgrade_checks_image latest } + + +# Build and push fission-bundle image +push_multiarch_fission_bundle_image() { + TAG=$1 make multiarch-bundle +} + +push_multiarch_fetcher_image() { + TAG=$1 make multiarch-fetcher +} + + +push_builder_image() { + TAG=$1 make multiarch-builder +} + +# Push pre-upgrade-checks image +push_pre_upgrade_checks_image() { + TAG=$1 make multiarch-preupgrade +} + +push_builder_image() { + TAG=$1 make multiarch-reporter +} + +push_multiarch_all() { + TAG=$version make image-multiarch + TAG=latest make image-multiarch +} + tag_and_release() { local version=$1 local gittag=$version @@ -285,7 +315,7 @@ release_environment_check $version $chartsrepo docker run --rm -it -v $FISSION_HOME:/go/src/github.com/fission -v /var/run/docker.sock:/var/run/docker.sock \ -e VERSION=$version -w "/go/src/github.com/fission/fission/hack" fission-release-builder sh -c "./release-build.sh" -push_all $version +push_multiarch_all $version tag_and_release $version attach_github_release_cli $version