lint/.automation/upload-docker.sh
Gabo e15a4dc174 Add check spelling workflow
test bucket variable

Add empty expect words

add procjet varaible

Add excludes file

add patters for urls

Add newline at eof

Changing lorem ipsum for proper words

Add admiralawkbar to expected words

Exclude lint templates files

Add api apk and ansible as expected words

add expected words for cleanup-docker.sh

add expected words for ghe-config-apply.sh

Fix add-ons spelling

Add a bunch new words

Simpler url pattern

Use common baz word

Fix coffeescript spelling

Add expected words for ghe-api-config-apply.yml

Add ecpected words for linter.sh

Fix Multi-line spelling

Add more linter.sh expected words

Add a whole lot of expected words

Add pattern for repeated single char

Add space

Add expected words for Dockerfile

Add more expected words for ghe-api-config-apply.yml

Add expected words for he-initial-configuration.yml

Add expected words for ghe-ldap-configuration.yml

Move spelling/expect -> spelling/allow

Set workflow name

Fix @admiralawkbar capitalization

Fix requirements spelling

Add last docker allow words

Add last ghe-config-apply allow words

Add last linter.sh allow words

add last general allow words

Add .gitignore allow words

Add main.yml allow words

Add settings.json.j2 allow words

Add empty expect words

Test gitignore.txt

Fix patter for repeated chars

Add some more allowed words

more words

Add disabling-linters.md allow words

commit
2020-06-23 16:42:22 -05:00

350 lines
10 KiB
Bash
Executable file

#!/bin/bash
################################################################################
############# Deploy Container to DockerHub @admiralawkbar #####################
################################################################################
# NOTES: This script is used to upload a Dockerfile to DockerHub
# under the GitHub organization
# Its based on being built from a GitHub Action, but could be easily updated
# To be ran in a different medium.
#
# PRE-Requirements:
# - Dockerfile
# - System with Docker installed
# - Global variables met
###########
# Globals #
###########
GITHUB_WORKSPACE="${GITHUB_WORKSPACE}" # GitHub Workspace
DOCKER_USERNAME="${DOCKER_USERNAME}" # Username to login to DockerHub
DOCKER_PASSWORD="${DOCKER_PASSWORD}" # Password to login to DockerHub
IMAGE_REPO="${IMAGE_REPO}" # Image repo to upload the image
IMAGE_VERSION="${IMAGE_VERSION}" # Version to tag the image
DOCKERFILE_PATH="${DOCKERFILE_PATH}" # Path to the Dockerfile to be uploaded
################################################################################
############################ FUNCTIONS BELOW ###################################
################################################################################
################################################################################
#### Function Header ###########################################################
Header()
{
echo ""
echo "-------------------------------------------------------"
echo "------ GitHub Actions Upload image to DockerHub -------"
echo "-------------------------------------------------------"
echo ""
}
################################################################################
#### Function ValidateInput ####################################################
ValidateInput()
{
# Need to validate we have the basic variables
################
# Print header #
################
echo ""
echo "----------------------------------------------"
echo "Gathering variables..."
echo "----------------------------------------------"
echo ""
############################
# Validate GITHUB_WORKSPACE #
############################
if [ -z "$GITHUB_WORKSPACE" ]; then
echo "ERROR! Failed to get [GITHUB_WORKSPACE]!"
echo "ERROR:[$GITHUB_WORKSPACE]"
exit 1
else
echo "Successfully found:[GITHUB_WORKSPACE], value:[$GITHUB_WORKSPACE]"
fi
############################
# Validate DOCKER_USERNAME #
############################
if [ -z "$DOCKER_USERNAME" ]; then
echo "ERROR! Failed to get [DOCKER_USERNAME]!"
echo "ERROR:[$DOCKER_USERNAME]"
exit 1
else
echo "Successfully found:[DOCKER_USERNAME], value:[$DOCKER_USERNAME]"
fi
############################
# Validate DOCKER_PASSWORD #
############################
if [ -z "$DOCKER_PASSWORD" ]; then
echo "ERROR! Failed to get [DOCKER_PASSWORD]!"
echo "ERROR:[$DOCKER_PASSWORD]"
exit 1
else
echo "Successfully found:[DOCKER_PASSWORD], value:[********]"
fi
#######################
# Validate IMAGE_REPO #
#######################
if [ -z "$IMAGE_REPO" ]; then
echo "ERROR! Failed to get [IMAGE_REPO]!"
echo "ERROR:[$IMAGE_REPO]"
exit 1
else
echo "Successfully found:[IMAGE_REPO], value:[$IMAGE_REPO]"
fi
##########################
# Validate IMAGE_VERSION #
##########################
if [ -z "$IMAGE_VERSION" ]; then
echo "WARN! Failed to get [IMAGE_VERSION]!"
echo "Pulling from Branch Name..."
##############################
# Get the name of the branch #
##############################
BRANCH_NAME=$(git branch --contains "$GITHUB_SHA" |awk '{print $2}' 2>&1)
#######################
# Load the error code #
#######################
ERROR_CODE=$?
##############################
# Check the shell for errors #
##############################
if [ $ERROR_CODE -ne 0 ]; then
echo "ERROR! Failed to get branch name!"
echo "ERROR:[$BRANCH_NAME]"
exit 1
fi
##################################
# Remove non alpha-numeric chars #
##################################
BRANCH_NAME=$(echo "$BRANCH_NAME" | tr -cd '[:alnum:]')
############################################
# Set the IMAGE_VERSION to the BRANCH_NAME #
############################################
IMAGE_VERSION="$BRANCH_NAME"
echo "Tag:[$IMAGE_VERSION]"
else
echo "Successfully found:[IMAGE_VERSION], value:[$IMAGE_VERSION]"
fi
############################
# Validate DOCKERFILE_PATH #
############################
if [ -z "$DOCKERFILE_PATH" ]; then
echo "ERROR! Failed to get [DOCKERFILE_PATH]!"
echo "ERROR:[$DOCKERFILE_PATH]"
exit 1
else
echo "Successfully found:[DOCKERFILE_PATH], value:[$DOCKERFILE_PATH]"
fi
}
################################################################################
#### Function LoginToDocker ####################################################
LoginToDocker()
{
################
# Print header #
################
echo ""
echo "----------------------------------------------"
echo "Login to DockerHub..."
echo "----------------------------------------------"
echo ""
######################
# Login to DockerHub #
######################
LOGIN_CMD=$(docker login --username "$DOCKER_USERNAME" --password "$DOCKER_PASSWORD" 2>&1)
#######################
# Load the error code #
#######################
ERROR_CODE=$?
##############################
# Check the shell for errors #
##############################
if [ $ERROR_CODE -ne 0 ]; then
# ERROR
echo "ERROR! Failed to authenticate to DockerHub!"
echo "ERROR:[$LOGIN_CMD]"
exit 1
else
# SUCCESS
echo "Successfully authenticated to DockerHub!"
fi
}
################################################################################
#### Function BuildImage #######################################################
BuildImage()
{
################
# Print header #
################
echo ""
echo "----------------------------------------------"
echo "Building the DockerFile image..."
echo "----------------------------------------------"
echo ""
################################
# Validate the DOCKERFILE_PATH #
################################
if [ ! -f "$DOCKERFILE_PATH" ]; then
# No file found
echo "ERROR! failed to find Dockerfile at:[$DOCKERFILE_PATH]"
echo "Please make sure you give full path!"
echo "Example:[/configs/Dockerfile] or [Dockerfile] if at root directory"
exit 1
fi
###################
# Build the image #
###################
docker build --no-cache -t "$IMAGE_REPO:$IMAGE_VERSION" -f "$DOCKERFILE_PATH" . 2>&1
#######################
# Load the error code #
#######################
ERROR_CODE=$?
##############################
# Check the shell for errors #
##############################
if [ $ERROR_CODE -ne 0 ]; then
# ERROR
echo "ERROR! failed to [build] Dockerfile!"
exit 1
else
# SUCCESS
echo "Successfully Built image!"
echo "Info:[$BUILD_CMD]"
fi
}
################################################################################
#### Function UploadImage ######################################################
UploadImage()
{
################
# Print header #
################
echo ""
echo "----------------------------------------------"
echo "Uploading the DockerFile image..."
echo "----------------------------------------------"
echo ""
############################################
# Upload the docker image that was created #
############################################
docker push "$IMAGE_REPO:$IMAGE_VERSION" 2>&1
#######################
# Load the error code #
#######################
ERROR_CODE=$?
##############################
# Check the shell for errors #
##############################
if [ $ERROR_CODE -ne 0 ]; then
# ERROR
echo "ERROR! failed to [upload] Dockerfile!"
exit 1
else
# SUCCESS
echo "Successfully Uploaded Docker image to DockerHub!"
fi
#########################
# Get Image information #
#########################
IFS=$'\n' # Set the delimit to newline
GET_INFO_CMD=$(docker images | grep "$IMAGE_REPO" | grep "$IMAGE_VERSION" 2>&1)
#######################
# Load the error code #
#######################
ERROR_CODE=$?
##############################
# Check the shell for errors #
##############################
if [ $ERROR_CODE -ne 0 ]; then
# ERROR
echo "ERROR! Failed to get information about built Image!"
echo "ERROR:[$GET_INFO_CMD]"
exit 1
else
################
# Get the data #
################
REPO=$(echo "$GET_INFO_CMD" | awk '{print $1}')
TAG=$(echo "$GET_INFO_CMD" | awk '{print $2}')
IMAGE_ID=$(echo "$GET_INFO_CMD" | awk '{print $3}')
# shellcheck disable=SC2116
SIZE=$(echo "${GET_INFO_CMD##* }")
###################
# Print the goods #
###################
echo "----------------------------------------------"
echo "Docker Image Details:"
echo "Repository:[$REPO]"
echo "Tag:[$TAG]"
echo "Image_ID:[$IMAGE_ID]"
echo "Size:[$SIZE]"
echo "----------------------------------------------"
fi
}
################################################################################
#### Function Footer ###########################################################
Footer()
{
echo ""
echo "-------------------------------------------------------"
echo "The step has completed"
echo "-------------------------------------------------------"
echo ""
}
################################################################################
################################## MAIN ########################################
################################################################################
##########
# Header #
##########
Header
##################
# Validate Input #
##################
ValidateInput
######################
# Login to DockerHub #
######################
LoginToDocker
###################
# Build the image #
###################
BuildImage
####################
# Upload the image #
####################
UploadImage
##########
# Footer #
##########
Footer