You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.5 KiB
107 lines
2.5 KiB
#!/usr/bin/env bash |
|
#自动配置环境变量并使用测试配置运行go run或test(加参数 -t),可以项目任一目录执行,都可以自动找到并运行对应的cmd/main.go |
|
|
|
export DEPLOY_ENV=uat |
|
export ZONE=sh001 |
|
export APP_ID |
|
export APP_ROOT |
|
|
|
grpcPort=9000 |
|
httpPort=8000 |
|
perfPort=2000 |
|
portOffset=0 |
|
|
|
getApp(){ |
|
declare -a dirs |
|
n=0 |
|
wd=$PWD |
|
depts=4 |
|
while true;do |
|
cur=`basename $PWD` |
|
if [ "$cur" == "" ] || [ "$cur" == "/" ]; then |
|
break |
|
fi |
|
dirs[n]=$cur |
|
if [ "${dirs[n]}" == "go-common" ] && [ "${dirs[n-1]}" == "app" ]; then |
|
if [ $n -lt $depts ]; then |
|
break |
|
fi |
|
for((i=n-1;i>=n-depts+1;i--));do |
|
cd "${dirs[i]}" |
|
done |
|
export APP_ID=${dirs[n-depts]} |
|
export APP_ROOT=$PWD/$APP_ID |
|
portOffset=`ls -l|grep ^d|awk '{if($NF=="'$APP_ID'")print FNR}'` |
|
cd $wd |
|
return 0 |
|
fi |
|
let n=n+1 |
|
cd .. |
|
done |
|
echo "must be run in go-common app directory" >&2 |
|
exit 1 |
|
} |
|
|
|
getApp |
|
let grpcPort=grpcPort+portOffset |
|
let httpPort=httpPort+portOffset |
|
let perfPort=perfPort+portOffset |
|
export GRPC="tcp://0.0.0.0:"$grpcPort"/?timeout=1s&idle_timeout=60s" |
|
export HTTP="tcp://0.0.0.0:"$httpPort"/?timeout=1s" |
|
export HTTP_PERF="tcp://0.0.0.0:$perfPort" |
|
|
|
conf=`find $APP_ROOT/cmd -name "*.toml"` |
|
if [ ! -f "$conf" ]; then |
|
echo "toml file not exist" |
|
exit 1 |
|
fi |
|
|
|
logdir=`sed -n '/^\[log\]/,$p' $conf|grep -m1 'dir *='|awk -F'=' '{print $2}'|cut -d'"' -f2` |
|
if [ -n "$logdir" ] && [ ! -d "$logdir" ];then |
|
mkdir -p "$logdir" |
|
fi |
|
|
|
while getopts t o; do |
|
case "$o" in |
|
t) test=1;; |
|
esac |
|
done |
|
|
|
shift $((OPTIND-1)) |
|
target=$1 |
|
|
|
#运行main.go |
|
if [ -z "$test" ]; then |
|
if [ -z "$target" ]; then |
|
target=$APP_ROOT/cmd/main.go |
|
fi |
|
echo "running "$APP_ID" on grpc port:"$grpcPort" and http port:"$httpPort |
|
go run "$target" -conf "$conf" |
|
exit 0 |
|
fi |
|
|
|
methods="" |
|
files="" |
|
for i in $@;do |
|
if echo $i|grep '^[a-zA-Z0-9_]\+$'>/dev/null; then |
|
methods=$methods$i" " |
|
else |
|
files=$files$i" " |
|
fi |
|
done |
|
|
|
if [ -n "$methods" ]; then |
|
for m in $methods; do |
|
go test -v -run $m -conf "$conf" |
|
done |
|
fi |
|
|
|
if [ -n "$files" ];then |
|
for f in $files; do |
|
base=`echo $f|sed 's/_test\.go//'` |
|
if [ "$base" != "$f" ] && ! echo ' '$files' '|grep ' '$base'\.go '>/dev/null; then |
|
files=$files$base".go " |
|
fi |
|
done |
|
go test -v $files -conf "$conf" |
|
fi
|
|
|