diff --git a/.dockerignore b/.dockerignore index 77e2e837..609b8690 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,10 @@ +# Don't bring in anything into the build context + * -!bin/** -vendor \ No newline at end of file + +# Bring in our source code and dependency listings + +!go.mod +!go.sum +!cmd/** +!pkg/** diff --git a/.github/workflows/build-docker-images.yml b/.github/workflows/build-docker-images.yml new file mode 100644 index 00000000..884324bc --- /dev/null +++ b/.github/workflows/build-docker-images.yml @@ -0,0 +1,72 @@ +name: Deploy multi-architecture Docker images for chartmuseum with buildx + +on: + schedule: + - cron: '0 0 * * *' # everyday at midnight UTC + pull_request: + branches: master + push: + branches: master + tags: + - v* + +jobs: + buildx: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v2 + - + name: Prepare + id: prepare + run: | + DOCKER_IMAGE=chartmuseum/chartmuseum + DOCKER_PLATFORMS=linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/386 + VERSION=edge + + if [[ $GITHUB_REF == refs/tags/* ]]; then + VERSION=${GITHUB_REF#refs/tags/v} + fi + + if [ "${{ github.event_name }}" = "schedule" ]; then + VERSION=nightly + fi + + TAGS="--tag ${DOCKER_IMAGE}:${VERSION} --tag ${DOCKER_IMAGE}:latest" + + echo ::set-output name=docker_image::${DOCKER_IMAGE} + echo ::set-output name=version::${VERSION} + echo ::set-output name=buildx_args::--platform ${DOCKER_PLATFORMS} \ + --build-arg revision=$(git rev-parse --short HEAD) \ + ${TAGS} . + - + name: Set up Docker Buildx + uses: crazy-max/ghaction-docker-buildx@v3 + - + name: Docker Buildx (build) + run: | + docker buildx build --no-cache --pull --output "type=image,push=false" ${{ steps.prepare.outputs.buildx_args }} + - + name: Docker Login + if: success() && github.event_name != 'pull_request' + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + run: | + echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin + - + name: Docker Buildx (push) + if: success() && github.event_name != 'pull_request' + run: | + docker buildx build --output "type=image,push=true" ${{ steps.prepare.outputs.buildx_args }} + - + name: Docker Check Manifest + if: always() && github.event_name != 'pull_request' + run: | + docker run --rm mplatform/mquery ${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }} + - + name: Clear + if: always() && github.event_name != 'pull_request' + run: | + rm -f ${HOME}/.docker/config.json diff --git a/Dockerfile b/Dockerfile index 17367a83..eabbd767 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,29 @@ -FROM alpine:3.12.0 -RUN apk add --no-cache cifs-utils ca-certificates \ - && adduser -D -u 1000 chartmuseum -COPY bin/linux/amd64/chartmuseum /chartmuseum -USER 1000 +# This will be our builder image + +FROM golang:alpine + +ARG version=0.12.0 + +ARG revision=master + +COPY . /go/src/github.com/helm/chartmuseum + +WORKDIR /go/src/github.com/helm/chartmuseum + +RUN CGO_ENABLED=0 GO111MODULE=on go build \ + -v --ldflags="-w -X main.Version=${version} -X main.Revision=${revision}" \ + -o /chartmuseum \ + cmd/chartmuseum/main.go + + +# This will be the final image + +FROM alpine:latest + +RUN apk add --no-cache cifs-utils ca-certificates + +COPY --from=0 /chartmuseum /chartmuseum + +USER 1000:1000 + ENTRYPOINT ["/chartmuseum"] diff --git a/Dockerfile.arm b/Dockerfile.arm deleted file mode 100644 index dcb8d5ba..00000000 --- a/Dockerfile.arm +++ /dev/null @@ -1,7 +0,0 @@ -FROM arm32v7/alpine:3.9 - -RUN apk add --no-cache cifs-utils ca-certificates \ - && adduser -D -u 1000 chartmuseum -COPY bin/linux/armv7/chartmuseum /chartmuseum -USER 1000 -ENTRYPOINT ["/chartmuseum"] diff --git a/Makefile b/Makefile index 9b19b5a1..a8a112af 100644 --- a/Makefile +++ b/Makefile @@ -44,11 +44,6 @@ build-armv7: go build -v --ldflags="-w -X main.Version=$(VERSION) -X main.Revision=$(REVISION)" \ -o bin/linux/armv7/chartmuseum cmd/chartmuseum/main.go # linux -container-armv7: build-armv7 -container-armv7: - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - docker build . -t chartmuseum:v$(VERSION) -f Dockerfile.arm - build-mac: export GOOS=darwin build-mac: export GOARCH=amd64 build-mac: export CGO_ENABLED=0