services: - docker env: - DOCKERFILE="Dockerfile" TAG_SUFFIX="amd64" - DOCKERFILE="Dockerfile.raspberry-pi" TAG_SUFFIX="arm32v5" ALT_SUFFIX="armhf" matrix: include: # amd64 - os: linux arch: amd64 env: - DOCKERFILE="Dockerfile" - TAG_SUFFIX="amd64" # arm32v5 - os: linux arch: arm64 env: - DOCKERFILE="Dockerfile.raspberry-pi" - TAG_SUFFIX="arm32v5" - ALT_SUFFIX="armhf" before_script: # update docker to edge - sudo apt update -y - sudo apt install --only-upgrade docker-ce -y script: - export TARGET_IMAGE_TAG=$(if [ "$TRAVIS_BRANCH" = "master" ]; then if [ "$TAG_SUFFIX" = "" ]; then echo "latest"; else echo "$TAG_SUFFIX"; fi; else if [ "$TAG_SUFFIX" = "" ]; then echo "$TRAVIS_BRANCH"; else echo "$TRAVIS_BRANCH-$TAG_SUFFIX"; fi; fi) - docker pull $TARGET_IMAGE:$TARGET_IMAGE_TAG && export IMAGE_CACHE="--cache-from $TARGET_IMAGE:$TARGET_IMAGE_TAG" || export IMAGE_CACHE="" - docker build -f $DOCKERFILE $IMAGE_CACHE -t $TARGET_IMAGE:$TARGET_IMAGE_TAG . - docker login --username $DOCKER_USERNAME --password $DOCKER_PASSWORD - docker push $TARGET_IMAGE:$TARGET_IMAGE_TAG # push alternate tags - if [ -z "$ALT_SUFFIX" ]; then echo "No alternate tags set for this build."; else echo "Tagging with alternate tag '$ALT_SUFFIX'"; export ALT_IMAGE_TAG=$(if [ "$TRAVIS_BRANCH" = "master" ]; then if [ "$ALT_SUFFIX" = "" ]; then echo "error"; else echo "$ALT_SUFFIX"; fi; else if [ "$ALT_SUFFIX" = "" ]; then echo "$TRAVIS_BRANCH"; else echo "$TRAVIS_BRANCH-$ALT_SUFFIX"; fi; fi); docker tag $TARGET_IMAGE:$TARGET_IMAGE_TAG $TARGET_IMAGE:$ALT_IMAGE_TAG; docker push $TARGET_IMAGE:$ALT_IMAGE_TAG; fi jobs: include: - stage: manifest script: # update docker to edge - sudo apt update -y - sudo apt install --only-upgrade docker-ce -y # enable experimental to use docker manifest command - mkdir $HOME/.docker - |- echo '{"experimental": "enabled"}' | tee $HOME/.docker/config.json - |- echo '{"experimental": true,"storage-driver": "overlay2","max-concurrent-downloads": 50,"max-concurrent-uploads": 50}' | sudo tee /etc/docker/daemon.json - sudo service docker restart # login - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin # main - export MANIFEST_SUFFIX=$(if [ "$TRAVIS_BRANCH" = "master" ]; then echo "latest"; else echo "$TRAVIS_BRANCH"; fi) - export TAG_PREFIX=$(if [ "$TRAVIS_BRANCH" = "master" ]; then echo ""; else echo "$TRAVIS_BRANCH-"; fi) - docker manifest create $TARGET_IMAGE:$MANIFEST_SUFFIX $TARGET_IMAGE:${TAG_PREFIX}amd64 $TARGET_IMAGE:${TAG_PREFIX}arm32v5 - docker manifest annotate $TARGET_IMAGE:$MANIFEST_SUFFIX $TARGET_IMAGE:${TAG_PREFIX}arm32v5 --os=linux --arch=arm --variant=v5 - docker manifest push $TARGET_IMAGE:$MANIFEST_SUFFIX