release.sh 7.4 KB
Newer Older
H
hzcheng 已提交
1 2 3 4 5
#!/bin/bash
#
# Generate the deb package for ubunt, or rpm package for centos, or tar.gz package for other linux os

set -e
S
slguan 已提交
6
#set -x
L
lihui 已提交
7

L
lihui 已提交
8 9 10 11 12
# releash.sh  -v [cluster | edge]  
#             -c [aarch32 | aarch64 | x64 | x86 | mips64 ...] 
#             -o [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | ...]  
#             -V [stable | beta]
#             -l [full | lite]
L
lihui 已提交
13 14

# set parameters by default value
L
lihui 已提交
15
verMode=edge     # [cluster, edge]
L
lihui 已提交
16 17 18
verType=stable   # [stable, beta]
cpuType=x64      # [aarch32 | aarch64 | x64 | x86 | mips64 ...]
osType=Linux     # [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | ...]
L
lihui 已提交
19
pagMode=full     # [full | lite]
L
lihui 已提交
20

L
lihui 已提交
21
while getopts "hv:V:c:o:l:" arg
L
lihui 已提交
22 23 24 25 26 27 28 29 30 31 32 33 34 35
do
  case $arg in
    v)
      #echo "verMode=$OPTARG"
      verMode=$( echo $OPTARG )
      ;;
    V)
      #echo "verType=$OPTARG"
      verType=$(echo $OPTARG)
      ;;
    c)
      #echo "cpuType=$OPTARG"
      cpuType=$(echo $OPTARG)
      ;;
L
lihui 已提交
36 37 38 39
    l)
      #echo "pagMode=$OPTARG"
      pagMode=$(echo $OPTARG)
      ;;
L
lihui 已提交
40 41 42 43 44
    o)
      #echo "osType=$OPTARG"
      osType=$(echo $OPTARG)
      ;;
    h)
L
lihui 已提交
45
      echo "Usage: `basename $0` -v [cluster | edge]  -c [aarch32 | aarch64 | x64 | x86 | mips64 ...] -o [Linux | Kylin | Alpine | Raspberrypi | Darwin | Windows | ...]  -V [stable | beta] -l [full | lite]"
L
lihui 已提交
46 47 48 49 50 51 52 53 54
      exit 0
      ;;
    ?) #unknow option 
      echo "unkonw argument"
      exit 1
      ;;
  esac
done

L
lihui 已提交
55
echo "verMode=${verMode} verType=${verType} cpuType=${cpuType} osType=${osType} pagMode=${pagMode}"
H
hzcheng 已提交
56 57

curr_dir=$(pwd)
S
slguan 已提交
58 59 60 61 62 63 64 65 66 67 68

if [ "$osType" != "Darwin" ]; then
    script_dir="$(dirname $(readlink -f $0))"
    top_dir="$(readlink -f ${script_dir}/..)"
else
    script_dir=`dirname $0`
    cd ${script_dir}
    script_dir="$(pwd)"
    top_dir=${script_dir}/..
fi

S
slguan 已提交
69
versioninfo="${top_dir}/src/util/src/version.c"
H
hzcheng 已提交
70

P
plum-lihui 已提交
71 72 73 74 75
csudo=""
if command -v sudo > /dev/null; then
    csudo="sudo"
fi

H
hzcheng 已提交
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
function is_valid_version() {
    [ -z $1 ] && return 1 || :

    rx='^([0-9]+\.){3}(\*|[0-9]+)$'
    if [[ $1 =~ $rx ]]; then
        return 0
    fi

    return 1
}

function vercomp () {
    if [[ $1 == $2 ]]; then
        echo 0
        exit 0
    fi
    local IFS=.
    local i ver1=($1) ver2=($2)
    # fill empty fields in ver1 with zeros
    for ((i=${#ver1[@]}; i<${#ver2[@]}; i++)); do
        ver1[i]=0
    done

    for ((i=0; i<${#ver1[@]}; i++)); do
        if [[ -z ${ver2[i]} ]]
        then
            # fill empty fields in ver2 with zeros
            ver2[i]=0
        fi
        if ((10#${ver1[i]} > 10#${ver2[i]}))
        then
            echo 1
            exit 0
        fi
        if ((10#${ver1[i]} < 10#${ver2[i]}))
        then
            echo 2
            exit 0
        fi
    done
    echo 0
}

# 1. Read version information
version=$(cat ${versioninfo} | grep " version" | cut -d '"' -f2)
compatible_version=$(cat ${versioninfo} | grep " compatible_version" | cut -d '"' -f2)

while true; do
  read -p "Do you want to release a new version? [y/N]: " is_version_change

  if [[ ( "${is_version_change}" == "y") || ( "${is_version_change}" == "Y") ]]; then
      read -p "Please enter the new version: " tversion
      while true; do
          if (! is_valid_version $tversion) || [ "$(vercomp $tversion $version)" = '2' ]; then
              read -p "Please enter a correct version: " tversion
              continue
          fi
          version=${tversion}
          break
      done

      echo

      read -p "Enter the oldest compatible version: " tversion
      while true; do

          if [ -z $tversion ]; then
              break
          fi

          if (! is_valid_version $tversion) || [ "$(vercomp $version $tversion)" = '2' ]; then
              read -p "enter correct compatible version: " tversion
          else
              compatible_version=$tversion
              break
          fi
      done

      break
  elif [[ ( "${is_version_change}" == "n") || ( "${is_version_change}" == "N") ]]; then
      echo "Use old version: ${version} compatible version: ${compatible_version}."
      break
  else
      continue
  fi
done

# output the version info to the buildinfo file.
build_time=$(date +"%F %R")
H
Hui Li 已提交
165 166 167
echo "char version[12] = \"${version}\";"                             > ${versioninfo}
echo "char compatible_version[12] = \"${compatible_version}\";"      >> ${versioninfo}
echo "char gitinfo[48] = \"$(git rev-parse --verify HEAD)\";"       >> ${versioninfo}
S
slguan 已提交
168
if [ "$verMode" != "cluster" ]; then
H
Hui Li 已提交
169
  echo "char gitinfoOfInternal[48] = \"\";"                         >> ${versioninfo}
S
slguan 已提交
170 171 172
else
  enterprise_dir="${top_dir}/../enterprise"
  cd ${enterprise_dir}
H
Hui Li 已提交
173
  echo "char gitinfoOfInternal[48] = \"$(git rev-parse --verify HEAD)\";"  >> ${versioninfo}
S
slguan 已提交
174 175
  cd ${curr_dir}
fi
H
Hui Li 已提交
176
echo "char buildinfo[64] = \"Built by ${USER} at ${build_time}\";"  >> ${versioninfo}
L
lihui 已提交
177 178
echo ""                                                              >> ${versioninfo}
tmp_version=$(echo $version | tr -s "." "_")
L
lihui 已提交
179 180 181 182 183 184 185 186 187
if [ "$verMode" == "cluster" ]; then
  libtaos_info=${tmp_version}_${osType}_${cpuType}
else
  libtaos_info=edge_${tmp_version}_${osType}_${cpuType}
fi
if [ "$verType" == "beta" ]; then
  libtaos_info=${libtaos_info}_${verType}
fi
echo "void libtaos_${libtaos_info}() {};"        >> ${versioninfo}
L
lihui 已提交
188

H
hzcheng 已提交
189
# 2. cmake executable file
L
lihui 已提交
190
compile_dir="${top_dir}/debug"
H
hzcheng 已提交
191
if [ -d ${compile_dir} ]; then
L
lihui 已提交
192
    ${csudo} rm -rf ${compile_dir}
H
hzcheng 已提交
193 194
fi

S
slguan 已提交
195 196 197 198 199
if [ "$osType" != "Darwin" ]; then
    ${csudo} mkdir -p ${compile_dir}
else
    mkdir -p ${compile_dir}
fi
H
hzcheng 已提交
200
cd ${compile_dir}
L
lihui 已提交
201

L
lihui 已提交
202 203
# check support cpu type
if [[ "$cpuType" == "x64" ]] || [[ "$cpuType" == "aarch64" ]] || [[ "$cpuType" == "aarch32" ]] || [[ "$cpuType" == "mips64" ]] ; then
S
slguan 已提交
204
    if [ "$verMode" != "cluster" ]; then
L
lihui 已提交
205
      cmake ../ -DCPUTYPE=${cpuType} -DPAGMODE=${pagMode}
S
slguan 已提交
206
    else
L
lihui 已提交
207
      cmake ../../ -DCPUTYPE=${cpuType}
S
slguan 已提交
208
    fi
L
lihui 已提交
209
else
S
slguan 已提交
210 211
    echo "input cpuType=${cpuType} error!!!"
    exit 1
L
lihui 已提交
212 213 214
fi

make
H
hzcheng 已提交
215 216 217 218

cd ${curr_dir}

# 3. judge the operating system type, then Call the corresponding script for packaging
H
[NONE]  
huili 已提交
219
#osinfo=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
H
hzcheng 已提交
220 221 222
#osinfo=$(cat /etc/os-release | grep "NAME" | cut -d '"' -f2)
#echo "osinfo: ${osinfo}"

S
slguan 已提交
223
if [ "$osType" != "Darwin" ]; then
H
huili 已提交
224
    if [[ "$verMode" != "cluster" ]] && [[ "$cpuType" == "x64" ]]; then
S
slguan 已提交
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246
        echo "====do deb package for the ubuntu system===="
        output_dir="${top_dir}/debs"
        if [ -d ${output_dir} ]; then
            ${csudo} rm -rf ${output_dir}
        fi
        ${csudo} mkdir -p ${output_dir}
        cd ${script_dir}/deb
        ${csudo} ./makedeb.sh ${compile_dir} ${output_dir} ${version} ${cpuType} ${osType} ${verMode} ${verType}

        echo "====do rpm package for the centos system===="
        output_dir="${top_dir}/rpms"
        if [ -d ${output_dir} ]; then
            ${csudo} rm -rf ${output_dir}
        fi
        ${csudo} mkdir -p ${output_dir}
        cd ${script_dir}/rpm
        ${csudo} ./makerpm.sh ${compile_dir} ${output_dir} ${version} ${cpuType} ${osType} ${verMode} ${verType}
    fi
	
    echo "====do tar.gz package for all systems===="
    cd ${script_dir}/tools
    
L
lihui 已提交
247 248
	${csudo} ./makepkg.sh    ${compile_dir} ${version} "${build_time}" ${cpuType} ${osType} ${verMode} ${verType} ${pagMode}
	${csudo} ./makeclient.sh ${compile_dir} ${version} "${build_time}" ${cpuType} ${osType} ${verMode} ${verType} ${pagMode}
S
slguan 已提交
249 250 251
else
    cd ${script_dir}/tools
    ./makeclient.sh ${compile_dir} ${version} "${build_time}" ${cpuType} ${osType} ${verMode} ${verType}
H
hzcheng 已提交
252 253 254
fi

# 4. Clean up temporary compile directories
P
plum-lihui 已提交
255
#${csudo} rm -rf ${compile_dir}
H
hzcheng 已提交
256