run.sh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #!/usr/bin/env bash
  2. #自动配置环境变量并使用测试配置运行go run或test(加参数 -t),可以项目任一目录执行,都可以自动找到并运行对应的cmd/main.go
  3. export DEPLOY_ENV=uat
  4. export ZONE=sh001
  5. export APP_ID
  6. export APP_ROOT
  7. grpcPort=9000
  8. httpPort=8000
  9. perfPort=2000
  10. portOffset=0
  11. getApp(){
  12. declare -a dirs
  13. n=0
  14. wd=$PWD
  15. depts=4
  16. while true;do
  17. cur=`basename $PWD`
  18. if [ "$cur" == "" ] || [ "$cur" == "/" ]; then
  19. break
  20. fi
  21. dirs[n]=$cur
  22. if [ "${dirs[n]}" == "go-common" ] && [ "${dirs[n-1]}" == "app" ]; then
  23. if [ $n -lt $depts ]; then
  24. break
  25. fi
  26. for((i=n-1;i>=n-depts+1;i--));do
  27. cd "${dirs[i]}"
  28. done
  29. export APP_ID=${dirs[n-depts]}
  30. export APP_ROOT=$PWD/$APP_ID
  31. portOffset=`ls -l|grep ^d|awk '{if($NF=="'$APP_ID'")print FNR}'`
  32. cd $wd
  33. return 0
  34. fi
  35. let n=n+1
  36. cd ..
  37. done
  38. echo "must be run in go-common app directory" >&2
  39. exit 1
  40. }
  41. getApp
  42. let grpcPort=grpcPort+portOffset
  43. let httpPort=httpPort+portOffset
  44. let perfPort=perfPort+portOffset
  45. export GRPC="tcp://0.0.0.0:"$grpcPort"/?timeout=1s&idle_timeout=60s"
  46. export HTTP="tcp://0.0.0.0:"$httpPort"/?timeout=1s"
  47. export HTTP_PERF="tcp://0.0.0.0:$perfPort"
  48. conf=`find $APP_ROOT/cmd -name "*.toml"`
  49. if [ ! -f "$conf" ]; then
  50. echo "toml file not exist"
  51. exit 1
  52. fi
  53. logdir=`sed -n '/^\[log\]/,$p' $conf|grep -m1 'dir *='|awk -F'=' '{print $2}'|cut -d'"' -f2`
  54. if [ -n "$logdir" ] && [ ! -d "$logdir" ];then
  55. mkdir -p "$logdir"
  56. fi
  57. while getopts t o; do
  58. case "$o" in
  59. t) test=1;;
  60. esac
  61. done
  62. shift $((OPTIND-1))
  63. target=$1
  64. #运行main.go
  65. if [ -z "$test" ]; then
  66. if [ -z "$target" ]; then
  67. target=$APP_ROOT/cmd/main.go
  68. fi
  69. echo "running "$APP_ID" on grpc port:"$grpcPort" and http port:"$httpPort
  70. go run "$target" -conf "$conf"
  71. exit 0
  72. fi
  73. methods=""
  74. files=""
  75. for i in $@;do
  76. if echo $i|grep '^[a-zA-Z0-9_]\+$'>/dev/null; then
  77. methods=$methods$i" "
  78. else
  79. files=$files$i" "
  80. fi
  81. done
  82. if [ -n "$methods" ]; then
  83. for m in $methods; do
  84. go test -v -run $m -conf "$conf"
  85. done
  86. fi
  87. if [ -n "$files" ];then
  88. for f in $files; do
  89. base=`echo $f|sed 's/_test\.go//'`
  90. if [ "$base" != "$f" ] && ! echo ' '$files' '|grep ' '$base'\.go '>/dev/null; then
  91. files=$files$base".go "
  92. fi
  93. done
  94. go test -v $files -conf "$conf"
  95. fi