0
Files
2024-08-13 17:32:59 +02:00

97 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
#
# Build and optionally push new image to Docker hub.
#
# When pushing, this script uses the following secure variables:
# - DOCKER_USERNAME
# - DOCKER_PASSWORD
#
# These are set via https://github.com/oracle/opengrok/settings/secrets
#
set -e
echo "Running linter"
docker run --rm -i hadolint/hadolint:2.6.0 < Dockerfile || exit 1
API_URL="https://hub.docker.com/v2"
IMAGE="opengrok/docker"
if [[ -n $OPENGROK_REF && $OPENGROK_REF == refs/tags/* ]]; then
OPENGROK_TAG=${OPENGROK_REF#"refs/tags/"}
fi
if [[ -n $OPENGROK_TAG ]]; then
VERSION="$OPENGROK_TAG"
VERSION_SHORT=$( echo $VERSION | cut -d. -f1,2 )
if [[ -z $VERSION ]]; then
echo "empty VERSION"
exit 1
fi
if [[ -z $VERSION_SHORT ]]; then
echo "empty VERSION_SHORT"
exit 1
fi
echo "Version: $VERSION"
echo "Short version: $VERSION_SHORT"
TAGS="$VERSION $VERSION_SHORT latest"
echo "Building docker image for release ($TAGS)"
docker buildx build \
-t $IMAGE:$VERSION \
-t $IMAGE:$VERSION_SHORT \
-t $IMAGE:latest .
else
TAGS="master"
echo "Building docker image for master"
docker buildx build -t $IMAGE:master .
fi
#
# Run the image in a container. This is not strictly needed however
# serves as additional test in automatic builds.
#
echo "Running the image in container"
docker run -d $IMAGE
docker ps -a
# This can only work on home repository since it needs encrypted variables.
if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
echo "Not pushing Docker image for pull requests"
exit 0
fi
# The push only works on the main repository.
if [[ "$OPENGROK_REPO_SLUG" != "oracle/opengrok" ]]; then
echo "Not pushing Docker image for non main repository"
exit 0
fi
if [[ -z $DOCKER_USERNAME ]]; then
echo "DOCKER_USERNAME is empty, exiting"
exit 1
fi
if [[ -z $DOCKER_PASSWORD ]]; then
echo "DOCKER_PASSWORD is empty, exiting"
exit 1
fi
# Publish the image to Docker hub.
if [ -n "$DOCKER_PASSWORD" -a -n "$DOCKER_USERNAME" -a -n "$TAGS" ]; then
echo "Logging into Docker Hub"
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
# All the tags need to be pushed individually:
for tag in $TAGS; do
echo "Pushing Docker image for tag $tag"
docker push $IMAGE:$tag
done
fi