From 5d60b5baaeee78af2c069330340a81f419355e1c Mon Sep 17 00:00:00 2001 From: Fernandez Ludovic Date: Sat, 27 Apr 2019 18:44:12 +0200 Subject: [PATCH] refactor: rename and enable experimental. --- Makefile | 6 +++++- build-docker.sh | 57 ++++++++++++++++++++++++++++--------------------- 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/Makefile b/Makefile index 00be093..796401a 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,11 @@ clean: build: clean @echo Version: $(VERSION) $(BUILD_DATE) - go build -v -ldflags '-X "github.com/ldez/traefik-certs-dumper/cmd.version=${VERSION}" -X "github.com/ldez/traefik-certs-dumper/cmd.commit=${SHA}" -X "github.com/ldez/traefik-certs-dumper/cmd.date=${BUILD_DATE}"' + go build -v -ldflags '-X "github.com/ldez/traefik-certs-dumper/cmd.version=${VERSION}" -X "github.com/ldez/traefik-certs-dumper/cmd.commit=${SHA}" -X "github.com/ldez/traefik-certs-dumper/cmd.date=${BUILD_DATE}"' -o traefik-certs-dumper checks: golangci-lint run + +publish-images: + VERSION=$(TAG_NAME) ./build-docker.sh + VERSION="latest" ./build-docker.sh diff --git a/build-docker.sh b/build-docker.sh index a1cf140..d3bc4ca 100755 --- a/build-docker.sh +++ b/build-docker.sh @@ -1,23 +1,33 @@ -#!/bin/bash -set -ex +#!/usr/bin/env bash -# base docker image tag -TAG="andig/traefik-certs-dumper" +set -o errexit +set -o pipefail + +# safe guard +if [ -n "$TRAVIS_TAG" ] && [ -n "$VERSION" ]; then + echo "Deploying..." +else + echo "Skipping deploy" + exit 0 +fi + +# base docker image name +IMAGE_NAME="ldez/traefik-certs-dumper" # only linux for now OS=linux # target platforms in docker manifest notation -declare -a PLATFORMS=( "amd64" "arm.v6" ) +declare -a PLATFORMS=( "amd64" "arm.v6" "arm.v7") # images from Dockerfile -IMAGE=$(grep "{RUNTIME_HASH}" < Dockerfile | sed "s/FROM //" | sed 's/\$.*//') +FROM_IMAGE=$(grep "{RUNTIME_HASH}" < Dockerfile | sed "s/FROM //" | sed 's/\$.*//') # manifest cache file -MANIFEST_FILE=/tmp/manifest.$IMAGE.json +MANIFEST_FILE=/tmp/tcd-manifest.${FROM_IMAGE}.json # get platform image hash from docker manifest -function hash () { +function platformHash () { local ARCHITECTURE VARIANT HASH read -r ARCHITECTURE VARIANT <<< "$@" @@ -32,45 +42,44 @@ function hash () { # get manifest if [ ! -f "$MANIFEST_FILE" ]; then - docker pull "$IMAGE" - docker manifest inspect "$IMAGE" > "$MANIFEST_FILE" + docker pull "$FROM_IMAGE" + DOCKER_CLI_EXPERIMENTAL=enabled docker manifest inspect "$FROM_IMAGE" > "$MANIFEST_FILE" fi -# main -for platform in "${PLATFORMS[@]}"; do +# create and push images +for platform in "${PLATFORMS[@]}"; do # split architecture.version IFS='.' read -r ARCHITECTURE VARIANT <<< "$platform" # add xargs to trim whitespace - RUNTIME_HASH=$(hash "$ARCHITECTURE" "$VARIANT") + RUNTIME_HASH=$(platformHash "$ARCHITECTURE" "$VARIANT") # arm architectures flavors, strip "v" prefix GOARM=${VARIANT:1} # build for target runtime image and architecture - docker build --build-arg RUNTIME_HASH=@${RUNTIME_HASH} --build-arg GOARCH=${ARCHITECTURE} --build-arg GOARM=${GOARM} -t "$TAG:latest-$platform" . -done + docker build --build-arg="RUNTIME_HASH=@${RUNTIME_HASH}" --build-arg="GOARCH=${ARCHITECTURE}" --build-arg="GOARM=${GOARM}" -t "$IMAGE_NAME:${VERSION}-$platform" . -# push images -for platform in "${PLATFORMS[@]}"; do - docker push "$TAG:latest-$platform" + # push images + docker push "$IMAGE_NAME:${VERSION}-$platform" done # create manifest -TAG_LIST=$(printf "$TAG:latest-%s " "${PLATFORMS[@]}") +TAG_LIST=$(printf "$IMAGE_NAME:${VERSION}-%s " "${PLATFORMS[@]}") # shellcheck disable=SC2086 -docker manifest create --amend "$TAG:latest" $TAG_LIST +DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create --amend "$IMAGE_NAME:${VERSION}" $TAG_LIST -for platform in "${PLATFORMS[@]}"; do +for platform in "${PLATFORMS[@]}"; do # split architecture.version IFS='.' read -r ARCHITECTURE VARIANT <<< "$platform" - + # docker and go architectures don't match if [ "arm" == "$ARCHITECTURE" ] && [ -n "$VARIANT" ]; then VARIANT="$ARCHITECTURE$VARIANT" fi - docker manifest annotate "$TAG:latest" "$TAG:latest-$platform" --os "$OS" --arch "$ARCHITECTURE" --variant "$VARIANT" + DOCKER_CLI_EXPERIMENTAL=enabled docker manifest annotate "$IMAGE_NAME:${VERSION}" "$IMAGE_NAME:${VERSION}-$platform" --os "$OS" --arch "$ARCHITECTURE" --variant "$VARIANT" done -docker manifest push "$TAG:latest" +# push manifest +DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$IMAGE_NAME:${VERSION}"