148 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
		
			
		
	
	
			148 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Bash
		
	
	
| 
								 | 
							
								#!/bin/bash
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# 通过shell脚本来实现将本地app文件通过API上传到蒲公英
							 | 
						||
| 
								 | 
							
								# https://www.pgyer.com/doc/view/api#fastUploadApp
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Display log. 1=enable, 0=disable
							 | 
						||
| 
								 | 
							
								LOG_ENABLE=1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								printHelp() {
							 | 
						||
| 
								 | 
							
								    echo "Usage: $0 -k <api_key> [OPTION]... file"
							 | 
						||
| 
								 | 
							
								    echo "Upload iOS or Android app package file to PGYER."
							 | 
						||
| 
								 | 
							
								    echo "Example: $0 -k xxxxxxxxxxxxxxx /data/app.ipa"
							 | 
						||
| 
								 | 
							
								    echo ""
							 | 
						||
| 
								 | 
							
								    echo "Description:"
							 | 
						||
| 
								 | 
							
								    echo "  -k api_key                       (required) api key from PGYER"
							 | 
						||
| 
								 | 
							
								    echo "  -t buildInstallType              build install type, 1=public, 2=password, 3=invite"
							 | 
						||
| 
								 | 
							
								    echo "  -p buildPassword                 build password, required if buildInstallType=2"
							 | 
						||
| 
								 | 
							
								    echo "  -d buildUpdateDescription        build update description"
							 | 
						||
| 
								 | 
							
								    echo "  -e buildInstallDate              build install date, 1=buildInstallStartDate~buildInstallEndDate, 2=forever"
							 | 
						||
| 
								 | 
							
								    echo "  -s buildInstallStartDate         build install start date, format: yyyy-MM-dd"
							 | 
						||
| 
								 | 
							
								    echo "  -e buildInstallEndDate           build install end date, format: yyyy-MM-dd"
							 | 
						||
| 
								 | 
							
								    echo "  -c buildChannelShortcut          build channel shortcut"
							 | 
						||
| 
								 | 
							
								    echo "  -h help                          show this help"
							 | 
						||
| 
								 | 
							
								    echo ""
							 | 
						||
| 
								 | 
							
								    echo "Report bugs to: <https://github.com/PGYER/pgyer_api_example/issues>" 
							 | 
						||
| 
								 | 
							
								    echo "Project home page: <https://github.com/PGYER/pgyer_api_example>" 
							 | 
						||
| 
								 | 
							
								    exit 1
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								while getopts 'k:t:p:d:s:e:c:h' OPT; do
							 | 
						||
| 
								 | 
							
								    case $OPT in
							 | 
						||
| 
								 | 
							
								        k) api_key="$OPTARG";;
							 | 
						||
| 
								 | 
							
								        t) buildInstallType="$OPTARG";;
							 | 
						||
| 
								 | 
							
								        p) buildPassword="$OPTARG";;
							 | 
						||
| 
								 | 
							
								        d) buildUpdateDescription="$OPTARG";;
							 | 
						||
| 
								 | 
							
								        e) buildInstallDate="$OPTARG";;
							 | 
						||
| 
								 | 
							
								        s) buildInstallStartDate="$OPTARG";;
							 | 
						||
| 
								 | 
							
								        e) buildInstallEndDate="$OPTARG";;
							 | 
						||
| 
								 | 
							
								        c) buildChannelShortcut="$OPTARG";;
							 | 
						||
| 
								 | 
							
								        ?) printHelp;;
							 | 
						||
| 
								 | 
							
								    esac
							 | 
						||
| 
								 | 
							
								done
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								shift $(($OPTIND - 1))
							 | 
						||
| 
								 | 
							
								readonly file=$1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# check api_key exists
							 | 
						||
| 
								 | 
							
								if [ -z "$api_key" ]; then
							 | 
						||
| 
								 | 
							
								    echo "api_key is empty"
							 | 
						||
| 
								 | 
							
								    printHelp
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# check file exists
							 | 
						||
| 
								 | 
							
								if [ ! -f "$file" ]; then
							 | 
						||
| 
								 | 
							
								    echo "file not exists"
							 | 
						||
| 
								 | 
							
								    printHelp
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# check ext supported
							 | 
						||
| 
								 | 
							
								buildType=${file##*.}
							 | 
						||
| 
								 | 
							
								if [ "$buildType" != "ipa" ] && [ "$buildType" != "apk" ]; then
							 | 
						||
| 
								 | 
							
								    echo "file ext is not supported"
							 | 
						||
| 
								 | 
							
								    printHelp
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# ---------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								# functions
							 | 
						||
| 
								 | 
							
								# ---------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								log() {
							 | 
						||
| 
								 | 
							
								    [ $LOG_ENABLE -eq 1 ]  && echo "[$(date +'%Y-%m-%d %H:%M:%S')] $*"
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								logTitle() {
							 | 
						||
| 
								 | 
							
								    log "-------------------------------- $* --------------------------------"
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								execCommand() {
							 | 
						||
| 
								 | 
							
								    log "$@"
							 | 
						||
| 
								 | 
							
								    result=$(eval $@)
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# ---------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								# 获取上传凭证
							 | 
						||
| 
								 | 
							
								# ---------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								logTitle "获取凭证"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								command="curl -s"
							 | 
						||
| 
								 | 
							
								[ -n "$api_key" ]                && command="${command} --form-string '_api_key=${api_key}'";
							 | 
						||
| 
								 | 
							
								[ -n "$buildType" ]              && command="${command} --form-string 'buildType=${buildType}'";
							 | 
						||
| 
								 | 
							
								[ -n "$buildInstallType" ]       && command="${command} --form-string 'buildInstallType=${buildInstallType}'";
							 | 
						||
| 
								 | 
							
								[ -n "$buildPassword" ]          && command="${command} --form-string 'buildPassword=${buildPassword}'";
							 | 
						||
| 
								 | 
							
								[ -n "$buildUpdateDescription" ] && command="${command} --form-string $'buildUpdateDescription=${buildUpdateDescription}'";
							 | 
						||
| 
								 | 
							
								[ -n "$buildInstallDate" ]       && command="${command} --form-string 'buildInstallDate=${buildInstallDate}'";
							 | 
						||
| 
								 | 
							
								[ -n "$buildInstallStartDate" ]  && command="${command} --form-string 'buildInstallStartDate=${buildInstallStartDate}'";
							 | 
						||
| 
								 | 
							
								[ -n "$buildInstallEndDate" ]    && command="${command} --form-string 'buildInstallEndDate=${buildInstallEndDate}'";
							 | 
						||
| 
								 | 
							
								[ -n "$buildChannelShortcut" ]   && command="${command} --form-string 'buildChannelShortcut=${buildChannelShortcut}'";
							 | 
						||
| 
								 | 
							
								command="${command} http://www.pgyer.com/apiv2/app/getCOSToken";
							 | 
						||
| 
								 | 
							
								execCommand $command
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[[ "${result}" =~ \"endpoint\":\"([\:\_\.\/\\A-Za-z0-9\-]+)\" ]] && endpoint=`echo ${BASH_REMATCH[1]} | sed 's!\\\/!/!g'`
							 | 
						||
| 
								 | 
							
								[[ "${result}" =~ \"key\":\"([\.a-z0-9]+)\" ]] && key=`echo ${BASH_REMATCH[1]}`
							 | 
						||
| 
								 | 
							
								[[ "${result}" =~ \"signature\":\"([\=\&\_\;A-Za-z0-9\-]+)\" ]] && signature=`echo ${BASH_REMATCH[1]}`
							 | 
						||
| 
								 | 
							
								[[ "${result}" =~ \"x-cos-security-token\":\"([\_A-Za-z0-9\-]+)\" ]] && x_cos_security_token=`echo ${BASH_REMATCH[1]}`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if [ -z "$key" ] || [ -z "$signature" ] || [ -z "$x_cos_security_token" ] || [ -z "$endpoint" ]; then
							 | 
						||
| 
								 | 
							
								    log "get upload token failed"
							 | 
						||
| 
								 | 
							
								    exit 1
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# ---------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								# 上传文件
							 | 
						||
| 
								 | 
							
								# ---------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								logTitle "上传文件"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								file_name=${file##*/}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								execCommand "curl -s -o /dev/null -w '%{http_code}' \
							 | 
						||
| 
								 | 
							
								--form-string 'key=${key}' \
							 | 
						||
| 
								 | 
							
								--form-string 'signature=${signature}' \
							 | 
						||
| 
								 | 
							
								--form-string 'x-cos-security-token=${x_cos_security_token}' \
							 | 
						||
| 
								 | 
							
								--form-string 'x-cos-meta-file-name=${file_name}' \
							 | 
						||
| 
								 | 
							
								-F 'file=@${file}' ${endpoint}"
							 | 
						||
| 
								 | 
							
								if [ $result -ne 204 ]; then # if http code != 204, upload failed
							 | 
						||
| 
								 | 
							
								    log "Upload failed"
							 | 
						||
| 
								 | 
							
								    exit 1
							 | 
						||
| 
								 | 
							
								fi
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# ---------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								# 检查结果
							 | 
						||
| 
								 | 
							
								# ---------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								logTitle "检查结果"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								for i in {1..60}; do
							 | 
						||
| 
								 | 
							
								    execCommand "curl -s http://www.pgyer.com/apiv2/app/buildInfo?_api_key=${api_key}\&buildKey=${key}"
							 | 
						||
| 
								 | 
							
								    [[ "${result}" =~ \"code\":([0-9]+) ]] && code=`echo ${BASH_REMATCH[1]}`
							 | 
						||
| 
								 | 
							
								    if [ $code -eq 0 ]; then
							 | 
						||
| 
								 | 
							
								        echo $result
							 | 
						||
| 
								 | 
							
								        break
							 | 
						||
| 
								 | 
							
								    else
							 | 
						||
| 
								 | 
							
								        sleep 1
							 | 
						||
| 
								 | 
							
								    fi
							 | 
						||
| 
								 | 
							
								done
							 |