From e47e6332ba1298864afb59c57019611e1a469ab3 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Sun, 13 May 2018 01:38:02 +0200 Subject: [PATCH 1/9] Setup linux/amd64 + manifest --- .drone.yml | 23 +++++++++++++++++++++-- docker/Makefile | 4 ++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index 8e571640b..6def6503d 100644 --- a/.drone.yml +++ b/.drone.yml @@ -241,7 +241,7 @@ pipeline: pull: true secrets: [ docker_username, docker_password ] repo: gitea/gitea - tags: [ '${DRONE_BRANCH##release/v}' ] + tag: '${DRONE_BRANCH##release/v}-linux-amd64' when: event: [ push ] branch: [ release/* ] @@ -251,7 +251,26 @@ pipeline: secrets: [ docker_username, docker_password ] pull: true repo: gitea/gitea - default_tags: true + tag: latest-linux-amd64 + when: + event: [ push, tag ] + + docker: + image: plugins/manifest + secrets: [ docker_username, docker_password ] + platforms: linux/amd64 + template: 'gitea/gitea:${DRONE_BRANCH##release/v}-ARCH' + target: 'gitea/gitea:${DRONE_BRANCH##release/v}' + when: + event: [ push ] + branch: [ release/* ] + + docker: + image: plugins/manifest + secrets: [ docker_username, docker_password ] + platforms: linux/amd64 + template: gitea/gitea:latest-ARCH + target: gitea/gitea:latest when: event: [ push, tag ] diff --git a/docker/Makefile b/docker/Makefile index 7f5525186..dc32dda51 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -2,8 +2,8 @@ DOCKER_IMAGE ?= gitea/gitea DOCKER_TAG ?= latest -DOCKER_REF := $(DOCKER_IMAGE):$(DOCKER_TAG) - +DOCKER_PLATFORM ?= $(shell docker version -f {{.Server.Os}}-{{.Server.Arch}} 2>/dev/null || echo 'undefined') +DOCKER_REF ?= $(DOCKER_IMAGE):$(DOCKER_TAG)-$(DOCKER_PLATFORM) .PHONY: docker docker: From 437ce0a84ea3cfbf1e1e2be0297c186ce7bb2be9 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Sun, 13 May 2018 03:00:53 +0200 Subject: [PATCH 2/9] fix template --- .drone.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.drone.yml b/.drone.yml index 6def6503d..8bcedc7cb 100644 --- a/.drone.yml +++ b/.drone.yml @@ -259,7 +259,7 @@ pipeline: image: plugins/manifest secrets: [ docker_username, docker_password ] platforms: linux/amd64 - template: 'gitea/gitea:${DRONE_BRANCH##release/v}-ARCH' + template: 'gitea/gitea:${DRONE_BRANCH##release/v}-OS-ARCH' target: 'gitea/gitea:${DRONE_BRANCH##release/v}' when: event: [ push ] @@ -269,7 +269,7 @@ pipeline: image: plugins/manifest secrets: [ docker_username, docker_password ] platforms: linux/amd64 - template: gitea/gitea:latest-ARCH + template: gitea/gitea:latest-OS-ARCH target: gitea/gitea:latest when: event: [ push, tag ] From 4094407aaccbe39e0cd55bc06873ce99e4ad0126 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Sun, 13 May 2018 03:05:24 +0200 Subject: [PATCH 3/9] generate os-arch via DRONE_ARCH --- .drone.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.drone.yml b/.drone.yml index 8bcedc7cb..f23ce6d68 100644 --- a/.drone.yml +++ b/.drone.yml @@ -241,7 +241,7 @@ pipeline: pull: true secrets: [ docker_username, docker_password ] repo: gitea/gitea - tag: '${DRONE_BRANCH##release/v}-linux-amd64' + tag: '${DRONE_BRANCH##release/v}-${DRONE_ARCH/\//-}' when: event: [ push ] branch: [ release/* ] @@ -251,7 +251,7 @@ pipeline: secrets: [ docker_username, docker_password ] pull: true repo: gitea/gitea - tag: latest-linux-amd64 + tag: 'latest-${DRONE_ARCH/\//-}' when: event: [ push, tag ] From a733d828c3efe02ba3d790e4d7f1019d233febe8 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Sun, 3 Jun 2018 03:22:44 +0200 Subject: [PATCH 4/9] Add docker-cross todo cross build of docker image --- .gitignore | 3 +++ Dockerfile | 10 ++++++++-- docker/Makefile | 30 +++++++++++++++++++++++++++++- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 9a5f01bb9..06071c725 100644 --- a/.gitignore +++ b/.gitignore @@ -60,6 +60,9 @@ coverage.all /integrations/pgsql.ini /node_modules +# Docker (cross build) +/docker/Dockerfile.* +/docker/qemu-*-static # Snapcraft snap/.snapcraft/ diff --git a/Dockerfile b/Dockerfile index 8e3516418..99a8c76f1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,9 @@ - +ARG target=library ################################### #Build stage FROM golang:1.10-alpine3.7 AS build-env +ARG GOARCH ARG GITEA_VERSION ARG TAGS="sqlite" ENV TAGS "bindata $TAGS" @@ -16,11 +17,16 @@ WORKDIR ${GOPATH}/src/code.gitea.io/gitea #Checkout version if set RUN if [ -n "${GITEA_VERSION}" ]; then git checkout "${GITEA_VERSION}"; fi \ + && go env \ && make clean generate build -FROM alpine:3.7 +################################### +#Final build +FROM $target/alpine:3.7 LABEL maintainer="maintainers@gitea.io" +#QEMU phase + EXPOSE 22 3000 RUN apk --no-cache add \ diff --git a/docker/Makefile b/docker/Makefile index dc32dda51..ef3054692 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -1,8 +1,17 @@ #Makefile related to docker +QEMU_VERSION ?= v2.11.0 +QEMU_ARCH ?= amd64 +GOARCH ?= amd64 +TARGET ?= library + DOCKER_IMAGE ?= gitea/gitea DOCKER_TAG ?= latest -DOCKER_PLATFORM ?= $(shell docker version -f {{.Server.Os}}-{{.Server.Arch}} 2>/dev/null || echo 'undefined') +ifneq ($(TARGET), library) + DOCKER_PLATFORM ?= linux-$(GOARCH) +else + DOCKER_PLATFORM ?= $(shell docker version -f {{.Server.Os}}-{{.Server.Arch}} 2>/dev/null || echo 'undefined') +endif DOCKER_REF ?= $(DOCKER_IMAGE):$(DOCKER_TAG)-$(DOCKER_PLATFORM) .PHONY: docker @@ -13,3 +22,22 @@ docker: .PHONY: docker-build docker-build: docker run -ti --rm -v $(CURDIR):/srv/app/src/code.gitea.io/gitea -w /srv/app/src/code.gitea.io/gitea -e TAGS="bindata $(TAGS)" webhippie/golang:edge make clean generate build + +.PHONY: docker-cross +docker-cross : docker-setup-qemu + docker build --build-arg target=$(TARGET) --build-arg GOARCH=$(GOARCH) -f docker/Dockerfile.$(QEMU_ARCH) -t $(DOCKER_REF) . + #exemple TARGET=arm64v8 GOARCH=arm64 QEMU_ARCH=aarch64 make docker-cross + #exemple TARGET=amd64 GOARCH=amd64 QEMU_ARCH=amd64 make docker-cross + #exemple TARGET=arm32v6 GOARCH=arm QEMU_ARCH=arm make docker-cross + +TARGET: arm32v6 +.PHONY: docker-setup-qemu +docker-setup-qemu: + @if [ "$(QEMU_ARCH)" != "amd64" ]; then \ + echo "Loading qemu libs for multi-arch support."; \ + (cd docker && curl -sL https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_VERSION}/qemu-${QEMU_ARCH}-static.tar.gz | tar xz); \ + docker run --rm --privileged multiarch/qemu-user-static:register --reset; \ + sed "s/^#QEMU phase/COPY docker\/qemu-${QEMU_ARCH}-static* \/usr\/bin\//g" Dockerfile > docker/Dockerfile.${QEMU_ARCH}; \ + sed -i "s/make clean generate build/make build/g" docker/Dockerfile.${QEMU_ARCH}; \ + else cp Dockerfile docker/Dockerfile.${QEMU_ARCH}; \ + fi; From dab1afa29c381fc0a841ef1de187f92556611a1d Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Fri, 8 Jun 2018 19:12:59 +0200 Subject: [PATCH 5/9] ... --- Dockerfile | 7 +++++-- docker/Makefile | 9 +++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 99a8c76f1..e7b3045a4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,9 @@ ARG target=library ################################### #Build stage -FROM golang:1.10-alpine3.7 AS build-env +FROM $target/golang:1.10-alpine3.7 AS build-env + +#QEMU phase ARG GOARCH ARG GITEA_VERSION @@ -62,5 +64,6 @@ VOLUME ["/data"] ENTRYPOINT ["/usr/bin/entrypoint"] CMD ["/bin/s6-svscan", "/etc/s6"] -COPY docker / +COPY docker/etc /etc/ +COPY docker/usr /usr/ COPY --from=build-env /go/src/code.gitea.io/gitea/gitea /app/gitea/gitea diff --git a/docker/Makefile b/docker/Makefile index ef3054692..3dc32ed67 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -26,9 +26,9 @@ docker-build: .PHONY: docker-cross docker-cross : docker-setup-qemu docker build --build-arg target=$(TARGET) --build-arg GOARCH=$(GOARCH) -f docker/Dockerfile.$(QEMU_ARCH) -t $(DOCKER_REF) . - #exemple TARGET=arm64v8 GOARCH=arm64 QEMU_ARCH=aarch64 make docker-cross - #exemple TARGET=amd64 GOARCH=amd64 QEMU_ARCH=amd64 make docker-cross - #exemple TARGET=arm32v6 GOARCH=arm QEMU_ARCH=arm make docker-cross +#exemple TARGET=arm64v8 GOARCH=arm64 QEMU_ARCH=aarch64 make docker-cross +#exemple TARGET=amd64 GOARCH=amd64 QEMU_ARCH=amd64 make docker-cross +#exemple TARGET=arm32v6 GOARCH=arm QEMU_ARCH=arm make docker-cross TARGET: arm32v6 .PHONY: docker-setup-qemu @@ -38,6 +38,7 @@ docker-setup-qemu: (cd docker && curl -sL https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_VERSION}/qemu-${QEMU_ARCH}-static.tar.gz | tar xz); \ docker run --rm --privileged multiarch/qemu-user-static:register --reset; \ sed "s/^#QEMU phase/COPY docker\/qemu-${QEMU_ARCH}-static* \/usr\/bin\//g" Dockerfile > docker/Dockerfile.${QEMU_ARCH}; \ - sed -i "s/make clean generate build/make build/g" docker/Dockerfile.${QEMU_ARCH}; \ else cp Dockerfile docker/Dockerfile.${QEMU_ARCH}; \ fi; + +#sed -i "s/make clean generate build/make build --always-make/g" docker/Dockerfile.${QEMU_ARCH}; \ From 0177cd478dffb955e72423a22d2a59cdc0e349ce Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Sat, 23 Jun 2018 19:12:15 +0200 Subject: [PATCH 6/9] Add make docker-setup-clean --- docker/Makefile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docker/Makefile b/docker/Makefile index 3dc32ed67..9328f7800 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -1,6 +1,6 @@ #Makefile related to docker -QEMU_VERSION ?= v2.11.0 +QEMU_VERSION ?= v2.12.0 QEMU_ARCH ?= amd64 GOARCH ?= amd64 TARGET ?= library @@ -30,7 +30,6 @@ docker-cross : docker-setup-qemu #exemple TARGET=amd64 GOARCH=amd64 QEMU_ARCH=amd64 make docker-cross #exemple TARGET=arm32v6 GOARCH=arm QEMU_ARCH=arm make docker-cross -TARGET: arm32v6 .PHONY: docker-setup-qemu docker-setup-qemu: @if [ "$(QEMU_ARCH)" != "amd64" ]; then \ @@ -41,4 +40,8 @@ docker-setup-qemu: else cp Dockerfile docker/Dockerfile.${QEMU_ARCH}; \ fi; -#sed -i "s/make clean generate build/make build --always-make/g" docker/Dockerfile.${QEMU_ARCH}; \ +.PHONY: docker-setup-clean +docker-setup-clean: + rm docker/qemu-*-static + rm docker/Dockerfile.* +#TODO add to make clean From f72215d29f02b9285d69384289bc9454288833ec Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Sat, 23 Jun 2018 20:18:04 +0200 Subject: [PATCH 7/9] Working (limited) docker-cross build --- Dockerfile | 1 - Makefile | 2 +- docker/Makefile | 18 +++++++++++------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index e7b3045a4..e456fcb49 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,6 @@ WORKDIR ${GOPATH}/src/code.gitea.io/gitea #Checkout version if set RUN if [ -n "${GITEA_VERSION}" ]; then git checkout "${GITEA_VERSION}"; fi \ - && go env \ && make clean generate build ################################### diff --git a/Makefile b/Makefile index c052ebbb0..dc6ebcf52 100644 --- a/Makefile +++ b/Makefile @@ -61,7 +61,7 @@ all: build include docker/Makefile .PHONY: clean -clean: +clean: docker-setup-clean $(GO) clean -i ./... rm -rf $(EXECUTABLE) $(DIST) $(BINDATA) \ integrations*.test \ diff --git a/docker/Makefile b/docker/Makefile index 9328f7800..4d7791735 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -1,8 +1,9 @@ #Makefile related to docker +GOHOSTARCH := $(shell go env GOHOSTARCH) QEMU_VERSION ?= v2.12.0 QEMU_ARCH ?= amd64 -GOARCH ?= amd64 +GOARCH ?= $(shell go env GOARCH) TARGET ?= library DOCKER_IMAGE ?= gitea/gitea @@ -24,24 +25,27 @@ docker-build: docker run -ti --rm -v $(CURDIR):/srv/app/src/code.gitea.io/gitea -w /srv/app/src/code.gitea.io/gitea -e TAGS="bindata $(TAGS)" webhippie/golang:edge make clean generate build .PHONY: docker-cross -docker-cross : docker-setup-qemu - docker build --build-arg target=$(TARGET) --build-arg GOARCH=$(GOARCH) -f docker/Dockerfile.$(QEMU_ARCH) -t $(DOCKER_REF) . +docker-cross : clean generate docker-setup-qemu +# docker build --build-arg target=$(TARGET) --build-arg GOARCH=$(GOARCH) -f docker/Dockerfile.$(QEMU_ARCH) -t $(DOCKER_REF) . + docker build --build-arg target=$(TARGET) --build-arg GOARCH=$(GOARCH) --build-arg TAGS="" -f docker/Dockerfile.$(QEMU_ARCH) -t $(DOCKER_REF) . #exemple TARGET=arm64v8 GOARCH=arm64 QEMU_ARCH=aarch64 make docker-cross #exemple TARGET=amd64 GOARCH=amd64 QEMU_ARCH=amd64 make docker-cross #exemple TARGET=arm32v6 GOARCH=arm QEMU_ARCH=arm make docker-cross +#TODO make generate fail with qemu (qemu: Unsupported syscall: 0) so we run as deps in host env +#TODO seems to core dump when build with sqlite (maybe related to cgo) look at xgo to find a solution .PHONY: docker-setup-qemu docker-setup-qemu: - @if [ "$(QEMU_ARCH)" != "amd64" ]; then \ + @if [ "$(QEMU_ARCH)" != ${GOHOSTARCH} ]; then \ echo "Loading qemu libs for multi-arch support."; \ (cd docker && curl -sL https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_VERSION}/qemu-${QEMU_ARCH}-static.tar.gz | tar xz); \ docker run --rm --privileged multiarch/qemu-user-static:register --reset; \ sed "s/^#QEMU phase/COPY docker\/qemu-${QEMU_ARCH}-static* \/usr\/bin\//g" Dockerfile > docker/Dockerfile.${QEMU_ARCH}; \ + sed -i "s/make clean generate build/make build/g" docker/Dockerfile.${QEMU_ARCH}; \ else cp Dockerfile docker/Dockerfile.${QEMU_ARCH}; \ fi; .PHONY: docker-setup-clean docker-setup-clean: - rm docker/qemu-*-static - rm docker/Dockerfile.* -#TODO add to make clean + rm -f docker/qemu-*-static + rm -f docker/Dockerfile.* From eaf427db00c86bf9fb56a03c9fcba0f049f975d8 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Sun, 24 Jun 2018 00:23:56 +0200 Subject: [PATCH 8/9] Use xgo for cross-build -> fix cgo + generate --- Dockerfile | 2 -- Makefile | 4 ++++ docker/Makefile | 12 ++++++------ 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index e456fcb49..342060c76 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,8 +3,6 @@ ARG target=library #Build stage FROM $target/golang:1.10-alpine3.7 AS build-env -#QEMU phase - ARG GOARCH ARG GITEA_VERSION ARG TAGS="sqlite" diff --git a/Makefile b/Makefile index dc6ebcf52..4d461188c 100644 --- a/Makefile +++ b/Makefile @@ -262,7 +262,11 @@ release-linux: @hash xgo > /dev/null 2>&1; if [ $$? -ne 0 ]; then \ $(GO) get -u github.com/karalabe/xgo; \ fi +ifneq ($(XGOARCH),) + xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets "linux/${XGOARCH}" -out gitea-$(VERSION) . +else xgo -dest $(DIST)/binaries -tags 'netgo $(TAGS)' -ldflags '-linkmode external -extldflags "-static" $(LDFLAGS)' -targets 'linux/*' -out gitea-$(VERSION) . +endif ifeq ($(CI),drone) mv /build/* $(DIST)/binaries endif diff --git a/docker/Makefile b/docker/Makefile index 4d7791735..0e2d2fff7 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -25,14 +25,11 @@ docker-build: docker run -ti --rm -v $(CURDIR):/srv/app/src/code.gitea.io/gitea -w /srv/app/src/code.gitea.io/gitea -e TAGS="bindata $(TAGS)" webhippie/golang:edge make clean generate build .PHONY: docker-cross -docker-cross : clean generate docker-setup-qemu -# docker build --build-arg target=$(TARGET) --build-arg GOARCH=$(GOARCH) -f docker/Dockerfile.$(QEMU_ARCH) -t $(DOCKER_REF) . - docker build --build-arg target=$(TARGET) --build-arg GOARCH=$(GOARCH) --build-arg TAGS="" -f docker/Dockerfile.$(QEMU_ARCH) -t $(DOCKER_REF) . +docker-cross : docker-setup-qemu + docker build --build-arg target=$(TARGET) --build-arg GOARCH=$(GOARCH) -f docker/Dockerfile.$(QEMU_ARCH) -t $(DOCKER_REF) . #exemple TARGET=arm64v8 GOARCH=arm64 QEMU_ARCH=aarch64 make docker-cross #exemple TARGET=amd64 GOARCH=amd64 QEMU_ARCH=amd64 make docker-cross #exemple TARGET=arm32v6 GOARCH=arm QEMU_ARCH=arm make docker-cross -#TODO make generate fail with qemu (qemu: Unsupported syscall: 0) so we run as deps in host env -#TODO seems to core dump when build with sqlite (maybe related to cgo) look at xgo to find a solution .PHONY: docker-setup-qemu docker-setup-qemu: @@ -40,8 +37,11 @@ docker-setup-qemu: echo "Loading qemu libs for multi-arch support."; \ (cd docker && curl -sL https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_VERSION}/qemu-${QEMU_ARCH}-static.tar.gz | tar xz); \ docker run --rm --privileged multiarch/qemu-user-static:register --reset; \ + echo "Generate dockerfile for specific arch."; \ sed "s/^#QEMU phase/COPY docker\/qemu-${QEMU_ARCH}-static* \/usr\/bin\//g" Dockerfile > docker/Dockerfile.${QEMU_ARCH}; \ - sed -i "s/make clean generate build/make build/g" docker/Dockerfile.${QEMU_ARCH}; \ + sed -i 's/^FROM $$target\/golang:1.10-alpine3.7 AS build-env/FROM karalabe\/xgo-latest AS build-env/g' docker/Dockerfile.${QEMU_ARCH}; \ + sed -i 's/^RUN apk --no-cache add build-base git/RUN GOARCH=$$GOHOSTARCH go get -u github.com\/jteeuwen\/go-bindata\/.../g' docker/Dockerfile.${QEMU_ARCH}; \ + sed -i 's/make clean generate build/PATH=$$PATH:\$$GOPATH\/bin\/ XGOARCH="${GOARCH}" make clean generate release-linux \&\& mv \/build\/gitea-* .\/gitea/g' docker/Dockerfile.${QEMU_ARCH}; \ else cp Dockerfile docker/Dockerfile.${QEMU_ARCH}; \ fi; From 970cc4d2430f780ae1324c7c57b20536563670c2 Mon Sep 17 00:00:00 2001 From: Antoine GIRARD Date: Sun, 24 Jun 2018 05:35:48 +0200 Subject: [PATCH 9/9] Activate cross-build on drone --- .drone.yml | 91 ++++++++++++++++++++++++++++++++++++++++++++++--- docker/Makefile | 22 +++++++++--- 2 files changed, 103 insertions(+), 10 deletions(-) diff --git a/.drone.yml b/.drone.yml index f23ce6d68..ca70d8e88 100644 --- a/.drone.yml +++ b/.drone.yml @@ -236,29 +236,109 @@ pipeline: event: [ push ] branch: [ master ] + docker: + image: golang:1.10 + pull: true + commands: + - GOARCH=amd64 QEMU_ARCH=amd64 make docker-generate-arch-dockerfile docker-download-qemu-binary + - GOARCH=arm QEMU_ARCH=arm make docker-generate-arch-dockerfile docker-download-qemu-binary + - GOARCH=arm64 QEMU_ARCH=aarch64 make docker-generate-arch-dockerfile docker-download-qemu-binary + when: + event: [ push, tag ] + + docker: + image: multiarch/qemu-user-static:register + pull: true + privileged: true + when: + event: [ push, tag ] + docker: image: plugins/docker:17.12 pull: true secrets: [ docker_username, docker_password ] + group: docker repo: gitea/gitea - tag: '${DRONE_BRANCH##release/v}-${DRONE_ARCH/\//-}' + tag: '${DRONE_BRANCH##release/v}-linux-amd64' + build_args: + - TARGET=amd64 + dockerfile: docker/Dockerfile.amd64 when: event: [ push ] branch: [ release/* ] docker: image: plugins/docker:17.12 - secrets: [ docker_username, docker_password ] pull: true + secrets: [ docker_username, docker_password ] + group: docker repo: gitea/gitea - tag: 'latest-${DRONE_ARCH/\//-}' + tag: '${DRONE_BRANCH##release/v}-linux-arm' + build_args: + - TARGET=arm32v6 + dockerfile: docker/Dockerfile.arm + when: + event: [ push ] + branch: [ release/* ] + + docker: + image: plugins/docker:17.12 + pull: true + secrets: [ docker_username, docker_password ] + group: docker + repo: gitea/gitea + tag: '${DRONE_BRANCH##release/v}-linux-arm64' + build_args: + - TARGET=arm64v8 + dockerfile: docker/Dockerfile.aarch64 + when: + event: [ push ] + branch: [ release/* ] + + docker: + image: plugins/docker:17.12 + pull: true + secrets: [ docker_username, docker_password ] + group: docker + repo: gitea/gitea + tag: 'latest-linux-amd64' + build_args: + - TARGET=amd64 + dockerfile: docker/Dockerfile.amd64 + when: + event: [ push, tag ] + + docker: + image: plugins/docker:17.12 + pull: true + secrets: [ docker_username, docker_password ] + group: docker + repo: gitea/gitea + tag: 'latest-linux-arm' + build_args: + - TARGET=arm32v6 + dockerfile: docker/Dockerfile.arm + when: + event: [ push, tag ] + + docker: + image: plugins/docker:17.12 + pull: true + secrets: [ docker_username, docker_password ] + group: docker + repo: gitea/gitea + tag: 'latest-linux-arm64' + build_args: + - TARGET=arm64v8 + dockerfile: docker/Dockerfile.aarch64 when: event: [ push, tag ] docker: image: plugins/manifest + pull: true secrets: [ docker_username, docker_password ] - platforms: linux/amd64 + platforms: [ linux/amd64, linux/arm, linux/arm64 ] template: 'gitea/gitea:${DRONE_BRANCH##release/v}-OS-ARCH' target: 'gitea/gitea:${DRONE_BRANCH##release/v}' when: @@ -267,8 +347,9 @@ pipeline: docker: image: plugins/manifest + pull: true secrets: [ docker_username, docker_password ] - platforms: linux/amd64 + platforms: [ linux/amd64, linux/arm, linux/arm64 ] template: gitea/gitea:latest-OS-ARCH target: gitea/gitea:latest when: diff --git a/docker/Makefile b/docker/Makefile index 0e2d2fff7..d1a9fc50d 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -31,12 +31,9 @@ docker-cross : docker-setup-qemu #exemple TARGET=amd64 GOARCH=amd64 QEMU_ARCH=amd64 make docker-cross #exemple TARGET=arm32v6 GOARCH=arm QEMU_ARCH=arm make docker-cross -.PHONY: docker-setup-qemu -docker-setup-qemu: +.PHONY: docker-generate-arch-dockerfile +docker-generate-arch-dockerfile: @if [ "$(QEMU_ARCH)" != ${GOHOSTARCH} ]; then \ - echo "Loading qemu libs for multi-arch support."; \ - (cd docker && curl -sL https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_VERSION}/qemu-${QEMU_ARCH}-static.tar.gz | tar xz); \ - docker run --rm --privileged multiarch/qemu-user-static:register --reset; \ echo "Generate dockerfile for specific arch."; \ sed "s/^#QEMU phase/COPY docker\/qemu-${QEMU_ARCH}-static* \/usr\/bin\//g" Dockerfile > docker/Dockerfile.${QEMU_ARCH}; \ sed -i 's/^FROM $$target\/golang:1.10-alpine3.7 AS build-env/FROM karalabe\/xgo-latest AS build-env/g' docker/Dockerfile.${QEMU_ARCH}; \ @@ -45,6 +42,21 @@ docker-setup-qemu: else cp Dockerfile docker/Dockerfile.${QEMU_ARCH}; \ fi; + +.PHONY: docker-download-qemu-binary +docker-download-qemu-binary: + @if [ "$(QEMU_ARCH)" != ${GOHOSTARCH} ]; then \ + echo "Downloading qemu binary for multi-arch support."; \ + (cd docker && curl -sL https://github.com/multiarch/qemu-user-static/releases/download/${QEMU_VERSION}/qemu-${QEMU_ARCH}-static.tar.gz | tar xz); \ + fi; + +.PHONY: docker-setup-qemu +docker-setup-qemu: docker-generate-arch-dockerfile docker-download-qemu-binary + @if [ "$(QEMU_ARCH)" != ${GOHOSTARCH} ]; then \ + echo "Loading qemu libs for multi-arch support."; \ + docker run --rm --privileged multiarch/qemu-user-static:register --reset; \ + fi; + .PHONY: docker-setup-clean docker-setup-clean: rm -f docker/qemu-*-static