continuous-testing 1.1.0

A continuous testing tool
#!/bin/bash

REMOTES=$(git remote show)

unset GIT_DIR

DWL_URL="https://github.com/taishingi/continuous-template"
RELEASE="0.0.6"
PROVIDER=""
USERNAME=""
REPOSITORY=""
DIR="continuous"
PROJECT=$(pwd | sed 's#.*/##')
REAL_DIR=$(realpath .)

Reset='\033[0m'       # Text Reset

# RegulaEr Colors
Black='\033[0;30m'        # Black
Red='\033[0;31m'          # Red
Green='\033[0;32m'        # Green
Yellow='\033[0;33m'       # Yellow
Blue='\033[0;34m'         # Blue
Purple='\033[0;35m'       # Purple
Cyan='\033[0;36m'         # Cyan
White='\033[0;37m'        # White

# Bold
BBlack='\033[1;30m'       # Black
BRed='\033[1;31m'         # Red
BGreen='\033[1;32m'       # Green
BYellow='\033[1;33m'      # Yellow
BBlue='\033[1;34m'        # Blue
BPurple='\033[1;35m'      # Purple
BCyan='\033[1;36m'        # Cyan
BWhite='\033[1;37m'       # White

# Underline
UBlack='\033[4;30m'       # Black
URed='\033[4;31m'         # Red
UGreen='\033[4;32m'       # Green
UYellow='\033[4;33m'      # Yellow
UBlue='\033[4;34m'        # Blue
UPurple='\033[4;35m'      # Purple
UCyan='\033[4;36m'        # Cyan
UWhite='\033[4;37m'       # White

# Background
On_Black='\033[40m'       # Black
On_Red='\033[41m'         # Red
On_Green='\033[42m'       # Green
On_Yellow='\033[43m'      # Yellow
On_Blue='\033[44m'        # Blue
On_Purple='\033[45m'      # Purple
On_Cyan='\033[46m'        # Cyan
On_White='\033[47m'       # White

# High Intensity
IBlack='\033[0;90m'       # Black
IRed='\033[0;91m'         # Red
IGreen='\033[0;92m'       # Green
IYellow='\033[0;93m'      # Yellow
IBlue='\033[0;94m'        # Blue
IPurple='\033[0;95m'      # Purple
ICyan='\033[0;96m'        # Cyan
IWhite='\033[0;97m'       # White

# Bold High Intensity
BIBlack='\033[1;90m'      # Black
BIRed='\033[1;91m'        # Red
BIGreen='\033[1;92m'      # Green
BIYellow='\033[1;93m'     # Yellow
BIBlue='\033[1;94m'       # Blue
BIPurple='\033[1;95m'     # Purple
BICyan='\033[1;96m'       # Cyan
BIWhite='\033[1;97m'      # White

# High Intensity backgrounds
On_IBlack='\033[0;100m'   # Black
On_IRed='\033[0;101m'     # Red
On_IGreen='\033[0;102m'   # Green
On_IYellow='\033[0;103m'  # Yellow
On_IBlue='\033[0;104m'    # Blue
On_IPurple='\033[0;105m'  # Purple
On_ICyan='\033[0;106m'    # Cyan
On_IWhite='\033[0;107m'   # White



function scripts()
{
    toml=$(fd '^Cargo.toml$')
    dub=$(fd '^dub.json$')
    go=$(fd '^go.mod$')
    
    if [ ! -z "${dub}" ]
    then
        cd "${REAL_DIR}/${DIR}/d" || exit 1
        ./scripts-gen "${1}" "${2}" "${3}" || exit 1
    elif [ ! -z "${toml}" ]
    then
        cd "${REAL_DIR}/${DIR}/rust" || exit 1
        ./scripts-gen "${1}" "${2}" "${3}" || exit 1
    elif [ ! -z "${go}" ]
    then
        cd "${REAL_DIR}/${DIR}/go" || exit 1
        ./scripts-gen "${1}" "${2}" "${3}" || exit 1
    else
        exit 1
    fi
}

function ask()
{
    
    PROVIDER=""
    USERNAME=""
    REPOSITORY=""
    
    while [ -z "${PROVIDER}" ]
    do
        echo -e -n "${Blue}Please enter your provider ${White}[${Blue}github.com${White}|${Blue}gitlab.com${White}|${Blue}bitbucket.org${White}] : "
        read -r PROVIDER
    done
    
    echo -e "${Yellow}Checking provider...${Reset}"
    
    case ${PROVIDER} in
        "github.com"|"gitlab.com"|"bitbucket.org")
            echo -e "${White}[ ${Green}OK${White} ] ${BWhite}${PROVIDER}${Reset}"
        ;;
        
        *)
            ask
        ;;
    esac
    while [ -z "${USERNAME}" ]
    do
        echo -e -n "${Blue}Enter your ${BIWhite}username${White} : "
        read -r USERNAME
        
    done
    
    while [ -z "${REPOSITORY}" ]
    do
        echo -e -n "${Blue}Enter the name of your${BIWhite} repository${White} : "
        read -r REPOSITORY
    done
    
    URL="https://${PROVIDER}/${USERNAME}/${REPOSITORY}"
    if wget --spider "${URL}" 2>/dev/null
    then
        scripts "${PROVIDER}" "${USERNAME}" "${REPOSITORY}"
    else
        scripts "${PROVIDER}" "${USERNAME}" "${REPOSITORY}"
        echo -e "${White}[${Yellow} Warning${White} ] The repository not exists at the url : ${URL}"
    fi
}

function download() {
    
    if [ -d ".repo" ]
    then
        rm -rf .repo
    fi
    
    git clone --quiet ${DWL_URL} .repo && cd .repo  && git fetch --all --tags  && git checkout -b "${USER}" ${RELEASE} && git range-diff 0.0.5...0.0.6 && cd .. || exit 1
    
    if [ -d "${DIR}" ]
    then
        rm -rf "${DIR}"
    fi
    mv .repo "${DIR}"
}

function main() {
    
    files=$(ls .)
    toml=$(fd -e toml)
    dub=$(fd '^dub.json$')
    go=$(fd '^go.mod$')
    
    if [[ -z "${files}" ]]
    then
        echo -e "${White}[${Red} KO ${White}] No files are founded${Reset}"
        exit 0
    fi
    
    if [ -d "${DIR}" ]
    then
        if [ ! -z "${toml}" ]
        then
            send
            cd continuous/rust || exit 1
            packer validate . || exit 1
            packer build . || exit 1
            notify-send -i "${REAL_DIR}/.icon/notif.png"  "All tests passes for your ${PROJECT} project"
        elif [ ! -z "${dub}" ]
        then
            send
            cd continuous/d || exit 1
            packer validate . || exit 1
            packer build . || exit 1
            notify-send -i "${REAL_DIR}/.icon/notif.png" "All tests passes for your ${PROJECT} project"
        elif [ ! -z "${go}" ]
        then
            send
            cd continuous/go || exit 1
            packer validate . || exit 1
            packer build . || exit 1
            notify-send -i "${REAL_DIR}/.icon/notif.png"  "All tests passes for your ${PROJECT} project"
        fi
    else
        download
        ask
        notify-send -i "${REAL_DIR}/.icon/notif.png"  "${PROJECT} it's now tracked by continuous-testing"
    fi
    if [ -x "/usr/bin/gh" ]
    then
        clear
        cd "${REAL_DIR}" || exit 1
        gh repo view
        echo
    fi
    echo -e "${Reset}"
    exit 0
}

function send()
{
    if [ -d "${DIR}" ];then
        
        for r in "${REMOTES[@]}";do
            git push "${r}" --all
            git push "${r}" --tags
        done
    fi
}

main