#!/bin/bash # ---------------- Settings declare -A git_repo_arr git_repo_arr[cvttpy]=git@cloud21.cvtt.vpn:/opt/store/git/cvttpy.git git_repo_arr[ops]=git@cloud21.cvtt.vpn:/opt/store/git/ops.git default_project=cvttpy default_branch=master dist_root=/home/cvttdist/software/cvtt2 dist_user=cvttdist dist_host="cloud21.cvtt.vpn" dist_ssh_port="22" dist_locations="cloud21.cvtt.vpn:22 homestore.cvtt.vpn:22" interactive=Y # cmdline prj=${1:-${default_project}} brnch=${2:-${default_branch}} if [ "${3}" == "D" ]; then interactive=N fi function confirm { if [ "${interactive}" == "Y" ]; then echo "--------------------------------" echo -n "Press to continue" && read fi } if [ "${interactive}" == "Y" ]; then echo -n "Enter project [${prj}]: " read project if [ "${project}" == "" ] then project=${prj} fi else project=${prj} fi repo=${git_repo_arr[${project}]} if [ -z ${repo} ]; then echo "ERROR: Project repository for ${project} not found" exit -1 fi echo "Project repo: ${repo}" if [ "${interactive}" == "Y" ]; then echo -n "Enter branch to build release from [${brnch}]: " read branch if [ "${branch}" == "" ] then branch=${brnch} fi else branch=${brnch} fi tmp_dir=$(mktemp -d) prj_dir="${tmp_dir}/${prj}" cmd_arr=() Cmd="git clone ${repo} ${prj_dir}" cmd_arr+=("${Cmd}") Cmd="cd ${prj_dir}" cmd_arr+=("${Cmd}") if [ "${interactive}" == "Y" ]; then echo "------------------------------------" echo "The following commands will execute:" echo "------------------------------------" for cmd in "${cmd_arr[@]}" do echo ${cmd} done fi confirm for cmd in "${cmd_arr[@]}" do echo ${cmd} && eval ${cmd} done Cmd="git checkout ${branch}" echo ${Cmd} && eval ${Cmd} if [ "${?}" != "0" ]; then echo "ERROR: Branch ${branch} is not found" cd ${HOME} && rm -rf ${tmp_dir} exit -1 fi release_version=$(cat release_version.txt) echo "--------------------------------" echo "Release version: ${release_version}" confirm version_tag="v${release_version}" version_comment="${version_tag}_${project}_${branch}_$(date +%Y%m%d)" cmd_arr=() Cmd="git tag -a ${version_tag} -m ${version_comment}" cmd_arr+=("${Cmd}") Cmd="git push origin --tags" cmd_arr+=("${Cmd}") Cmd="rm -rf .git" cmd_arr+=("${Cmd}") dist_path="${dist_root}/${project}/${release_version}" for dist_loc in ${dist_locations}; do dhp=(${dist_loc//:/ }) dist_host=${dhp[0]} dist_port=${dhp[1]} Cmd="rsync -avzh" Cmd="${Cmd} --rsync-path=\"mkdir -p ${dist_path} && rsync\"" Cmd="${Cmd} -e \"ssh -p ${dist_ssh_port}\"" Cmd="${Cmd} ../${project} ${dist_user}@${dist_host}:${dist_path}/" cmd_arr+=("${Cmd}") done if [ "${interactive}" == "Y" ]; then echo "------------------------------------" echo "The following commands will execute:" echo "------------------------------------" for cmd in "${cmd_arr[@]}" do echo ${cmd} done fi confirm exit for cmd in "${cmd_arr[@]}" do echo ${cmd} && eval ${cmd} done cd ${HOME} rm -rf ${tmp_dir} echo $0 Done