diff --git a/deploy_on_dockerhub.sh b/deploy_on_dockerhub.sh new file mode 100755 index 0000000000000000000000000000000000000000..6980a39211d37a5690834ad68e07ae748bc49ff1 --- /dev/null +++ b/deploy_on_dockerhub.sh @@ -0,0 +1,135 @@ +#!/bin/bash + +# Define color codes +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + + +DOCKERFILE=Dockerfile_AssignmentChecker + +PROJECT_FOLDER=AssignmentChecker + +test_if_command_unsuccessful() { + local status=$1 + local title=$2 + local text_if_failed=$3 + if [ "$status" -ne 0 ]; then + echo -e "${title}: ${RED}${text_if_failed}: $status${NC}\n" + exit 1 + fi +} + + +########################################################## +# Function to prompt for input if not provided +prompt_if_empty() { + local var_name=$1 + local prompt_message=$2 + local var_value=${!var_name} + + if [ -z "$var_value" ]; then + read -p "$prompt_message: " var_value + export "$var_name"="$var_value" + fi +} + +# Parse parameters +while [ "$1" != "" ]; do + case $1 in + --dockerhub-user ) shift + DOCKER_REGISTRY_USER=$1 + ;; + --dockerhub-password ) shift + DOCKER_REGISTRY_PASSWORD=$1 + ;; + --dockerhub-repo ) shift + DOCKER_REGISTRY_IMAGE=$1 + ;; + --backend-url ) shift + API_URL=$1 + ;; + * ) echo -e "${RED}Invalid parameter: $1${NC}" + exit 1 + esac + shift +done + +# Prompt for values if not provided +prompt_if_empty "DOCKER_REGISTRY_USER" "Docker Hub user" +prompt_if_empty "DOCKER_REGISTRY_PASSWORD" "Docker Hub password" +prompt_if_empty "DOCKER_REGISTRY_IMAGE" "Docker Hub repository" +prompt_if_empty "API_URL" "Backend url" + + +########################################################## +# Function to check if a command exists +check_dependency() { + local cmd=$1 + if ! command -v $cmd &> /dev/null; then + echo -e "${RED}Error: $cmd is not installed.${NC}" + exit 1 + fi +} + +# Check for dependencies +echo -e "Dependencies: ${YELLOW}Checking...${NC}" +check_dependency jq +check_dependency docker +check_dependency sed +echo -e "Dependencies: ${GREEN}OK${NC}\n" + + +VERSION=$(jq -r .version $PROJECT_FOLDER/package.json) +CONTAINER_IMAGE=$DOCKER_REGISTRY_IMAGE:$VERSION + + +########################################################## +# Login to Docker Hub +echo -e "Docker Hub: ${YELLOW}Login in...${NC}" +echo "$DOCKER_REGISTRY_PASSWORD" | docker login -u "$DOCKER_REGISTRY_USER" --password-stdin "$DOCKER_REGISTRY" > /dev/null +test_if_command_unsuccessful $? "Docker Hub" "FAILED to login in" +echo -e "Docker Hub: ${GREEN}Logged in${NC}\n" + + +########################################################## +echo -e "Project files: ${YELLOW}Configuring...${NC}" + +( + +cd $PROJECT_FOLDER || exit 1 + +sed -i -r "s/\{\{VERSION\}\}/${VERSION}/g" src/app.ts 2> /dev/null +if [ $? -ne 0 ]; then # If on macOS + sed -i -r "s/{{VERSION}}/${VERSION}/g" src/app.ts 2> /dev/null +fi + +sed -i -r "s/(DOTENV_KEY[ ]*:[ ]*[\'\"\`])[^'\"\`]*([\'\"\`])([ ]*\,)?//g" src/init.ts +sed -i -r "s/,[\ \n]*\}/\}/g" src/init.ts + +# Write the content to the file +cat <<EOL > ".env" +##################### App env vars +API_URL=${API_URL} +DOCKERHUB_ASSIGNMENT_CHECKER_REPOSITORY=${DOCKER_REGISTRY_IMAGE} +EOL + +) + +echo -e "Project files: ${GREEN}Configured${NC}\n" + + +########################################################## +echo -e "Docker: ${YELLOW}Building/Uploading to Docker Hub...${NC}" + +docker buildx create --use --platform=linux/amd64 > /dev/null 2> /dev/null +test_if_command_unsuccessful $? "Docker" "FAILED to initialize builder" + +docker buildx build --platform=linux/amd64 --file $DOCKERFILE --push --tag "$CONTAINER_IMAGE" . > /dev/null 2> /dev/null +test_if_command_unsuccessful $? "Docker" "FAILED to build" + +docker buildx imagetools create "$CONTAINER_IMAGE" --tag "$DOCKER_REGISTRY_IMAGE":latest > /dev/null 2> /dev/null +test_if_command_unsuccessful $? "Docker" "FAILED to set latest tag" + +echo -e "Docker: ${GREEN}Uploaded to Docker Hub${NC}\n" \ No newline at end of file