167 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/usr/bin/bash
 | ||
| 
 | ||
| # 检查是否指定了将要发布的应用名称
 | ||
| # 使用 `-z` 命令检查变量是否为空
 | ||
| if [ -z "$1" ]; then
 | ||
|     echo "No APP name specified : $0"
 | ||
|     exit 2
 | ||
| fi
 | ||
| 
 | ||
| ## 定义相关函数
 | ||
| ## 检查 Git 源码是否完全提交了,完全提交就返回0
 | ||
| function checkGitSources {
 | ||
|     #local input="$1"
 | ||
|     #echo "The string is: $input"
 | ||
| 	git config --global --add safe.directory `pwd`
 | ||
| 	if [[ -n $(git diff --stat)  ]]
 | ||
|     then
 | ||
| 		local result="Source is no commit completely."
 | ||
| 	    echo $result
 | ||
| 	    # 脚本调试时使用
 | ||
| 	    #return 0
 | ||
| 	    # 正式检查源码时使用
 | ||
| 	    return 1
 | ||
|     fi
 | ||
|     local result="Git Source Check OK."
 | ||
| 	echo $result
 | ||
|     return 0
 | ||
| }
 | ||
| 
 | ||
| function askAddWorkflowsTag {
 | ||
| 	read answer
 | ||
| 	if [[ $answer =~ ^[Yy]$ ]]; then
 | ||
| 	    #echo "You chose yes."
 | ||
| 	    return 1
 | ||
| 	else
 | ||
| 	    #echo "You chose no."
 | ||
| 	    return 0
 | ||
| 	fi
 | ||
| }
 | ||
| 
 | ||
| function addWinBoLLTag {
 | ||
| 	# 就读取脚本 .winboll/winboll_app_build.gradle 生成的 publishVersion。
 | ||
|     # 如果文件中有 publishVersion 这一项,
 | ||
| 	# 使用grep找到包含"publishVersion="的那一行,然后用awk提取其后的值
 | ||
| 	PUBLISH_VERSION=$(grep -o "publishVersion=.*" $1/build.properties | awk -F '=' '{print $2}')
 | ||
| 	echo "< $1/build.properties publishVersion : ${PUBLISH_VERSION} >"
 | ||
| 	## 设新的 WinBoLL 标签
 | ||
| 	# 脚本调试时使用
 | ||
| 	#tag="projectname-v7.6.4-test1"
 | ||
| 	# 正式设置标签时使用
 | ||
| 	tag=$1"-v"${PUBLISH_VERSION}
 | ||
| 	echo "< WinBoLL Tag To: $tag >";
 | ||
| 	# 检查是否已经添加了 WinBoLL Tag
 | ||
| 	if [ "$(git tag -l ${tag})" == "${tag}" ]; then
 | ||
|         echo -e "< WinBoLL Tag ${tag} exist! >"
 | ||
|         return 1 # WinBoLL标签重复
 | ||
|     fi
 | ||
|     # 添加WinBoLL标签
 | ||
| 	git tag -a ${tag} -F $1/app_update_description.txt
 | ||
|     return 0
 | ||
| }
 | ||
| 
 | ||
| function addWorkflowsTag {
 | ||
| 	# 就读取脚本 .winboll/winboll_app_build.gradle 生成的 baseBetaVersion。
 | ||
|     # 如果文件中有 baseBetaVersion 这一项,
 | ||
| 	# 使用grep找到包含"baseBetaVersion="的那一行,然后用awk提取其后的值
 | ||
| 	BASE_BETA_VERSION=$(grep -o "baseBetaVersion=.*" $1/build.properties | awk -F '=' '{print $2}')
 | ||
| 	echo "< $1/build.properties baseBetaVersion : ${BASE_BETA_VERSION} >"
 | ||
| 	## 设新的 workflows 标签
 | ||
| 	# 脚本调试时使用
 | ||
| 	#tag="projectname-v7.6.4-beta"
 | ||
| 	# 正式设置标签时使用
 | ||
| 	tag=$1"-v"${BASE_BETA_VERSION}-beta
 | ||
| 	echo "< Workflows Tag To: $tag >";
 | ||
| 	# 检查是否已经添加了工作流 Tag
 | ||
| 	if [ "$(git tag -l ${tag})" == "${tag}" ]; then
 | ||
|         echo -e "< Github Workflows Tag ${tag} exist! >"
 | ||
|         return 1 # 工作流标签重复
 | ||
|     fi
 | ||
|     # 添加工作流标签
 | ||
| 	git tag -a ${tag} -F $1/app_update_description.txt
 | ||
|     return 0
 | ||
| }
 | ||
| 
 | ||
| ## 开始执行脚本
 | ||
| echo -e "Current dir : \n"`pwd`
 | ||
| # 检查当前目录是否是项目根目录
 | ||
| if [[ -e $1/build.properties ]]; then
 | ||
|     echo "The $1/build.properties file exists."
 | ||
|     echo -e "Work dir correctly."
 | ||
| else
 | ||
|     echo "The $1/build.properties file does not exist."
 | ||
|     echo "尝试进入根目录"
 | ||
|     # 进入项目根目录
 | ||
|     cd ..
 | ||
| fi
 | ||
| ## 本脚本需要在项目根目录下执行
 | ||
| echo -e "Current dir : \n"`pwd`
 | ||
| # 检查当前目录是否是项目根目录
 | ||
| if [[ -e $1/build.properties ]]; then
 | ||
|     echo "The $1/build.properties file exists."
 | ||
|     echo -e "Work dir correctly."
 | ||
| else
 | ||
|     echo "The $1/build.properties file does not exist."
 | ||
|     echo -e "Work dir error."
 | ||
|     exit 1
 | ||
| fi
 | ||
| 
 | ||
| # 检查源码状态
 | ||
| result=$(checkGitSources)
 | ||
| if [[ $? -eq 0 ]]; then
 | ||
|     echo $result
 | ||
|     # 如果Git已经提交了所有代码就执行标签和应用发布操作
 | ||
| 
 | ||
|     # 预先询问是否添加工作流标签
 | ||
|     #echo "Add Github Workflows Tag? (yes/No)"
 | ||
| 	#result=$(askAddWorkflowsTag)
 | ||
| 	#nAskAddWorkflowsTag=$?
 | ||
| 	#echo $result
 | ||
| 
 | ||
|     # 发布应用
 | ||
| 	echo "Publishing WinBoLL APK ..."
 | ||
| 	# 脚本调试时使用
 | ||
| 	#bash gradlew :$1:assembleBetaDebug
 | ||
| 	# 正式发布
 | ||
|     bash gradlew :$1:assembleStageRelease
 | ||
|     echo "Publishing WinBoLL APK OK."
 | ||
|     
 | ||
|     # 添加 WinBoLL 标签
 | ||
|     result=$(addWinBoLLTag $1)
 | ||
|     echo $result
 | ||
| 	if [[ $? -eq 0 ]]; then
 | ||
| 	    echo $result
 | ||
|     	# WinBoLL 标签添加成功
 | ||
| 	else
 | ||
|     	echo -e "${0}: addWinBoLLTag $1\n${result}\nAdd WinBoLL tag cancel."
 | ||
|         exit 1 # addWinBoLLTag 异常
 | ||
| 	fi
 | ||
|     
 | ||
|     # 添加 GitHub 工作流标签
 | ||
| 	#if [[ $nAskAddWorkflowsTag -eq 1 ]]; then
 | ||
| 	    # 如果用户选择添加工作流标签
 | ||
|     	#result=$(addWorkflowsTag $1)
 | ||
| 		#if [[ $? -eq 0 ]]; then
 | ||
| 		#    echo $result
 | ||
| 		    # 工作流标签添加成功
 | ||
| 		#else
 | ||
| 			#echo -e "${0}: addWorkflowsTag $1\n${result}\nAdd workflows tag cancel."
 | ||
| 			#exit 1 # addWorkflowsTag 异常
 | ||
| 		#fi
 | ||
| 	#fi
 | ||
| 	
 | ||
| 	## 清理更新描述文件内容
 | ||
| 	echo "" > $1/app_update_description.txt
 | ||
| 	
 | ||
| 	# 设置新版本开发参数配置
 | ||
| 	# 提交配置
 | ||
| 	git add .
 | ||
| 	git commit -m "<$1>Start New Stage Version."
 | ||
| 	echo "Push sources to git repositories ..."
 | ||
|     # 推送源码到所有仓库
 | ||
|     git push origin && git push origin --tags
 | ||
| else
 | ||
| 	echo -e "${0}: checkGitSources\n${result}\nShell cancel."
 | ||
| 	exit 1 # checkGitSources 异常
 | ||
| fi
 | 
