#!/bin/bash set -eoux pipefail if [[ -z ${1:-} && -n ${CI:-} ]]; then echo 'Usage: ./build.sh VERSION_SHORT' exit 1 elif [[ ${CI:-} == true || -n ${1:-} ]]; then VERSION_SHORT="$1" else VERSION_SHORT=$(find . -maxdepth 1 -type d | sort | tail -1 | grep -o "[[0-9]].[[0-9]]*") EXTRA_TAG=latest fi cd "$VERSION_SHORT" || exit 1 VERSION=$(grep -oP '[0-9]+\.[0-9]+\.[0-9]+' Dockerfile | head -1) DOCKER_REPO=factoriotools/factorio if [[ ${TRAVIS_PULL_REQUEST:-} == true ]]; then TAGS="$DOCKER_REPO:$TRAVIS_PULL_REQUEST_SLUG" else if [[ -n ${CI:-} ]]; then # we are either on master or on a tag build if [[ ${TRAVIS_BRANCH:-} == master || ${TRAVIS_BRANCH:-} == "$VERSION" ]]; then TAGS="-t $DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT" # we are on an incremental build of a tag elif [[ $VERSION == "${TRAVIS_BRANCH%-*}" ]]; then TAGS="-t $DOCKER_REPO:$TRAVIS_BRANCH -t $DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT" # we build a other branch than master and exclude dependabot branches from tags cause the / is not supported by docker elif [[ -n ${TRAVIS_BRANCH:-} && ! $TRAVIS_BRANCH =~ "/" ]]; then TAGS="-t $DOCKER_REPO:$TRAVIS_BRANCH" fi else # we are not in CI and tag version and version short TAGS="-t $DOCKER_REPO:$VERSION -t $DOCKER_REPO:$VERSION_SHORT" fi if [[ -n ${EXTRA_TAG:-} ]]; then IFS="," for TAG in $EXTRA_TAG; do TAGS+=" -t $DOCKER_REPO:$TAG" done fi if [[ ${STABLE:-} == "$VERSION" ]]; then TAGS+=" -t $DOCKER_REPO:stable" fi fi # Travis gets rate limited by Docker HUB. if [[ ${CI:-} == true && -n $DOCKER_PASSWORD && -n $DOCKER_USERNAME ]]; then echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin fi # shellcheck disable=SC2068 eval docker build . ${TAGS[@]:-} docker images # remove -1 from incremental tag # eg before: 0.18.24-1, after 0.18.24 if [[ ${TRAVIS_BRANCH:-} ]]; then TRAVIS_BRANCH_VERSION=${TRAVIS_BRANCH%-*} fi # only push when: # or we build a tag and we don't build a PR if [[ $VERSION == "${TRAVIS_BRANCH_VERSION:-}" && ${TRAVIS_PULL_REQUEST_BRANCH:-} == "" ]] || # or we are not in CI [[ -z ${CI:-} ]]; then if [[ ${CI:-} == true ]]; then echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin fi # push a tag on a branch other than master except dependabot branches cause docker does not support / if [[ -n ${TRAVIS_BRANCH:-} && $VERSION != "${TRAVIS_BRANCH_VERSION:-}" && ${TRAVIS_BRANCH:-} != "master" && ! ${TRAVIS_BRANCH:-} =~ "/" ]]; then docker push "$DOCKER_REPO:$TRAVIS_BRANCH" fi # push an incremental tag # eg 0.18.24-1 if [[ $VERSION == "${TRAVIS_BRANCH_VERSION:-}" ]]; then docker push "$DOCKER_REPO:$TRAVIS_BRANCH" fi # only push on tags or when manually running the script if [[ -n ${TRAVIS_TAG:-} || -z ${CI:-} ]]; then docker push "$DOCKER_REPO:$VERSION" docker push "$DOCKER_REPO:$VERSION_SHORT" fi if [[ -n ${EXTRA_TAG:-} ]]; then IFS="," for TAG in $EXTRA_TAG; do docker push "$DOCKER_REPO:$TAG" done fi if [[ ${STABLE:-} == "$VERSION" ]]; then docker push "$DOCKER_REPO:stable" fi curl -X POST https://hooks.microbadger.com/images/factoriotools/factorio/TmmKGNp8jKcFqZvcJhTCIAJVluw= fi