From 798a99dc52c1c481cc412e419c0b3e670c964ef2 Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Sat, 17 Sep 2022 19:52:10 +0200 Subject: [PATCH] autogenerate Docker Hub images (#6) --- .github/workflows/release.yml | 11 +++++++ scripts/dockerhub.mk | 62 +++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 scripts/dockerhub.mk diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9b261b5..24cace7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -40,3 +40,14 @@ jobs: data: await fs.readFile(`./release/${name}`), }); } + + dockerhub: + runs-on: ubuntu-20.04 + + steps: + - uses: actions/checkout@v2 + + - run: make dockerhub + env: + DOCKER_USER: ${{ secrets.DOCKER_USER }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} diff --git a/scripts/dockerhub.mk b/scripts/dockerhub.mk new file mode 100644 index 0000000..07ffa58 --- /dev/null +++ b/scripts/dockerhub.mk @@ -0,0 +1,62 @@ +define DOCKERFILE_DOCKERHUB +FROM --platform=linux/amd64 $(BASE_IMAGE) AS build +RUN apk add --no-cache git +WORKDIR /s +COPY go.mod go.sum ./ +RUN go mod download +COPY . ./ +ARG VERSION +ARG OPTS +RUN export CGO_ENABLED=0 $${OPTS} \ + && go build -ldflags "-X main.version=$$VERSION" -o /mavp2p + +FROM scratch +COPY --from=build /mavp2p / +ENTRYPOINT [ "/mavp2p" ] +endef +export DOCKERFILE_DOCKERHUB + +dockerhub: + $(eval export DOCKER_CLI_EXPERIMENTAL=enabled) + $(eval VERSION := $(shell git describe --tags)) + + docker login -u $(DOCKER_USER) -p $(DOCKER_PASSWORD) + + docker buildx rm builder 2>/dev/null || true + rm -rf $$HOME/.docker/manifests/* + docker buildx create --name=builder --use + + echo "$$DOCKERFILE_DOCKERHUB" | docker buildx build . -f - --build-arg VERSION=$(VERSION) \ + --push -t aler9/mavp2p:$(VERSION)-amd64 --build-arg OPTS="GOOS=linux GOARCH=amd64" --platform=linux/amd64 + + echo "$$DOCKERFILE_DOCKERHUB" | docker buildx build . -f - --build-arg VERSION=$(VERSION) \ + --push -t aler9/mavp2p:$(VERSION)-armv6 --build-arg OPTS="GOOS=linux GOARCH=arm GOARM=6" --platform=linux/arm/v6 + + echo "$$DOCKERFILE_DOCKERHUB" | docker buildx build . -f - --build-arg VERSION=$(VERSION) \ + --push -t aler9/mavp2p:$(VERSION)-armv7 --build-arg OPTS="GOOS=linux GOARCH=arm GOARM=7" --platform=linux/arm/v7 + + echo "$$DOCKERFILE_DOCKERHUB" | docker buildx build . -f - --build-arg VERSION=$(VERSION) \ + --push -t aler9/mavp2p:$(VERSION)-arm64v8 --build-arg OPTS="GOOS=linux GOARCH=arm64" --platform=linux/arm64/v8 + + docker manifest create aler9/mavp2p:$(VERSION) \ + $(foreach ARCH,amd64 armv6 armv7 arm64v8,aler9/mavp2p:$(VERSION)-$(ARCH)) + docker manifest push aler9/mavp2p:$(VERSION) + + docker manifest create aler9/mavp2p:latest-amd64 aler9/mavp2p:$(VERSION)-amd64 + docker manifest push aler9/mavp2p:latest-amd64 + + docker manifest create aler9/mavp2p:latest-armv6 aler9/mavp2p:$(VERSION)-armv6 + docker manifest push aler9/mavp2p:latest-armv6 + + docker manifest create aler9/mavp2p:latest-armv7 aler9/mavp2p:$(VERSION)-armv7 + docker manifest push aler9/mavp2p:latest-armv7 + + docker manifest create aler9/mavp2p:latest-arm64v8 aler9/mavp2p:$(VERSION)-arm64v8 + docker manifest push aler9/mavp2p:latest-arm64v8 + + docker manifest create aler9/mavp2p:latest \ + $(foreach ARCH,amd64 armv6 armv7 arm64v8,aler9/mavp2p:$(VERSION)-$(ARCH)) + docker manifest push aler9/mavp2p:latest + + docker buildx rm builder + rm -rf $$HOME/.docker/manifests/*