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'
Black='\033[0;30m' Red='\033[0;31m' Green='\033[0;32m' Yellow='\033[0;33m' Blue='\033[0;34m' Purple='\033[0;35m' Cyan='\033[0;36m' White='\033[0;37m'
BBlack='\033[1;30m' BRed='\033[1;31m' BGreen='\033[1;32m' BYellow='\033[1;33m' BBlue='\033[1;34m' BPurple='\033[1;35m' BCyan='\033[1;36m' BWhite='\033[1;37m'
UBlack='\033[4;30m' URed='\033[4;31m' UGreen='\033[4;32m' UYellow='\033[4;33m' UBlue='\033[4;34m' UPurple='\033[4;35m' UCyan='\033[4;36m' UWhite='\033[4;37m'
On_Black='\033[40m' On_Red='\033[41m' On_Green='\033[42m' On_Yellow='\033[43m' On_Blue='\033[44m' On_Purple='\033[45m' On_Cyan='\033[46m' On_White='\033[47m'
IBlack='\033[0;90m' IRed='\033[0;91m' IGreen='\033[0;92m' IYellow='\033[0;93m' IBlue='\033[0;94m' IPurple='\033[0;95m' ICyan='\033[0;96m' IWhite='\033[0;97m'
BIBlack='\033[1;90m' BIRed='\033[1;91m' BIGreen='\033[1;92m' BIYellow='\033[1;93m' BIBlue='\033[1;94m' BIPurple='\033[1;95m' BICyan='\033[1;96m' BIWhite='\033[1;97m'
On_IBlack='\033[0;100m' On_IRed='\033[0;101m' On_IGreen='\033[0;102m' On_IYellow='\033[0;103m' On_IBlue='\033[0;104m' On_IPurple='\033[0;105m' On_ICyan='\033[0;106m' On_IWhite='\033[0;107m'
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