version: 2.1 workflows: docker: jobs: - build - deploy: context: - docker requires: - build matrix: parameters: program: [frontend, proxy] image_arch: [i386, amd64, arm32v7, arm64v8, ppc64le, s390x] filters: branches: only: master jobs: build: docker: - image: circleci/golang:1.15 working_directory: /go/src/github.com/xddxdd/bird-lg-go steps: - checkout - run: go get -v -t -d ./... - run: go get -u github.com/kevinburke/go-bindata/... - run: cd frontend && go generate - run: go test -v ./... deploy: docker: - image: circleci/golang:1.15 working_directory: /go/src/github.com/xddxdd/bird-lg-go parameters: image_arch: type: string program: type: string steps: - checkout - setup_remote_docker: version: 19.03.13 - run: name: Build Docker image environment: IMAGE_ARCH: << parameters.image_arch >> PROGRAM: << parameters.program >> BUILD_ID: << pipeline.number >> command: | if [ "$PROGRAM" = "frontend" ]; then export IMAGE_NAME="bird-lg-go" else export IMAGE_NAME="bird-lgproxy-go" fi export IMAGE_ARCH_GO=$IMAGE_ARCH if [ "$IMAGE_ARCH" = "i386" ]; then export IMAGE_ARCH_GO="386" ; fi if [ "$IMAGE_ARCH" = "arm32v7" ]; then export IMAGE_ARCH_GO="arm" ; fi if [ "$IMAGE_ARCH" = "arm64v8" ]; then export IMAGE_ARCH_GO="arm64"; fi docker build \ --build-arg IMAGE_ARCH=$IMAGE_ARCH_GO \ -t $DOCKER_USERNAME/$IMAGE_NAME:$IMAGE_ARCH \ -f $PROGRAM/Dockerfile \ $PROGRAM echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin # Tag image :{arch} and :{arch}-build{build number} docker push $DOCKER_USERNAME/$IMAGE_NAME:$IMAGE_ARCH docker tag $DOCKER_USERNAME/$IMAGE_NAME:$IMAGE_ARCH $DOCKER_USERNAME/$IMAGE_NAME:$IMAGE_ARCH-circleci-build$BUILD_ID docker push $DOCKER_USERNAME/$IMAGE_NAME:$IMAGE_ARCH-circleci-build$BUILD_ID if [ "$IMAGE_ARCH" = "amd64" ]; then # Tag as latest for amd64 images docker tag $DOCKER_USERNAME/$IMAGE_NAME:$IMAGE_ARCH $DOCKER_USERNAME/$IMAGE_NAME:latest docker push $DOCKER_USERNAME/$IMAGE_NAME:latest docker tag $DOCKER_USERNAME/$IMAGE_NAME:$IMAGE_ARCH $DOCKER_USERNAME/$IMAGE_NAME:circleci-build$BUILD_ID docker push $DOCKER_USERNAME/$IMAGE_NAME:latest fi