feat: multi-arch Docker image. (#1072)

This commit is contained in:
Ludovic Fernandez 2020-03-01 21:01:41 +01:00 committed by GitHub
parent 2da1ce06ea
commit b5d99c7b14
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 61 additions and 13 deletions

View file

@ -47,6 +47,10 @@ before_install:
- wget -O /tmp/hugo.deb https://github.com/gohugoio/hugo/releases/download/v0.54.0/hugo_0.54.0_Linux-64bit.deb - wget -O /tmp/hugo.deb https://github.com/gohugoio/hugo/releases/download/v0.54.0/hugo_0.54.0_Linux-64bit.deb
- sudo dpkg -i /tmp/hugo.deb - sudo dpkg -i /tmp/hugo.deb
# Install Docker image multi-arch builder
- curl -sfL https://raw.githubusercontent.com/ldez/seihon/master/godownloader.sh | bash -s -- -b "${GOPATH}/bin" ${SEIHON_VERSION}
- seihon --version
install: install:
- go mod tidy - go mod tidy
- git diff --exit-code go.mod - git diff --exit-code go.mod
@ -63,10 +67,18 @@ before_deploy:
- > - >
if ! [ "$BEFORE_DEPLOY_RUN" ]; then if ! [ "$BEFORE_DEPLOY_RUN" ]; then
export BEFORE_DEPLOY_RUN=1; export BEFORE_DEPLOY_RUN=1;
make docs-build make docs-build;
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin;
fi fi
deploy: deploy:
- provider: pages
local_dir: docs/public
skip_cleanup: true
github_token: ${GITHUB_TOKEN}
on:
condition: $STABLE = true
- provider: script - provider: script
skip_cleanup: true skip_cleanup: true
script: curl -sL https://git.io/goreleaser | bash script: curl -sL https://git.io/goreleaser | bash
@ -84,9 +96,9 @@ deploy:
tags: true tags: true
condition: $STABLE = true condition: $STABLE = true
- provider: pages - provider: script
local_dir: docs/public
skip_cleanup: true skip_cleanup: true
github_token: ${GITHUB_TOKEN} script: make publish-images
on: on:
tags: true
condition: $STABLE = true condition: $STABLE = true

View file

@ -1,8 +1,16 @@
FROM golang:1.13-alpine3.10 as builder FROM golang:1-alpine as builder
RUN apk --no-cache --no-progress add make git RUN apk --no-cache --no-progress add make git
WORKDIR /go/src/github.com/go-acme/lego WORKDIR /go/lego
ENV GO111MODULE on
# Download go modules
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . . COPY . .
RUN make build RUN make build
@ -11,5 +19,6 @@ RUN apk update \
&& apk add --no-cache ca-certificates tzdata \ && apk add --no-cache ca-certificates tzdata \
&& update-ca-certificates && update-ca-certificates
COPY --from=builder /go/src/github.com/go-acme/lego/dist/lego /usr/bin/lego COPY --from=builder /go/lego/dist/lego /usr/bin/lego
ENTRYPOINT [ "/usr/bin/lego" ] ENTRYPOINT [ "/usr/bin/lego" ]

View file

@ -4,13 +4,10 @@ export GO111MODULE=on
SRCS = $(shell git ls-files '*.go' | grep -v '^vendor/') SRCS = $(shell git ls-files '*.go' | grep -v '^vendor/')
LEGO_IMAGE := go-acme/lego LEGO_IMAGE := goacme/lego
MAIN_DIRECTORY := ./cmd/lego/ MAIN_DIRECTORY := ./cmd/lego/
ifeq (${GOOS}, windows)
BIN_OUTPUT := dist/lego.exe BIN_OUTPUT := $(if $(filter $(shell go env GOOS), windows), dist/lego.exe, dist/lego)
else
BIN_OUTPUT := dist/lego
endif
TAG_NAME := $(shell git tag -l --contains HEAD) TAG_NAME := $(shell git tag -l --contains HEAD)
SHA := $(shell git rev-parse HEAD) SHA := $(shell git rev-parse HEAD)
@ -19,6 +16,7 @@ VERSION := $(if $(TAG_NAME),$(TAG_NAME),$(SHA))
default: clean generate-dns checks test build default: clean generate-dns checks test build
clean: clean:
@echo BIN_OUTPUT: ${BIN_OUTPUT}
rm -rf dist/ builds/ cover.out rm -rf dist/ builds/ cover.out
build: clean build: clean
@ -29,6 +27,9 @@ image:
@echo Version: $(VERSION) @echo Version: $(VERSION)
docker build -t $(LEGO_IMAGE) . docker build -t $(LEGO_IMAGE) .
publish-images:
seihon publish -v "$(TAG_NAME)" -v "latest" --image-name="$(LEGO_IMAGE)" --dry-run=false
test: clean test: clean
go test -v -cover ./... go test -v -cover ./...

26
tmpl.Dockerfile Normal file
View file

@ -0,0 +1,26 @@
# Dockerfile template used by Seihon to create multi-arch images.
# https://github.com/ldez/seihon
FROM golang:1-alpine as builder
RUN apk --update upgrade \
&& apk --no-cache --no-progress add git make ca-certificates tzdata
WORKDIR /go/lego
ENV GO111MODULE on
# Download go modules
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .
RUN GOARCH={{ .GoARCH }} GOARM={{ .GoARM }} make build
FROM {{ .RuntimeImage }}
COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=builder /go/lego/dist/lego /usr/bin/lego
ENTRYPOINT [ "/usr/bin/lego" ]