148 lines
5.3 KiB
Bash
Executable File
148 lines
5.3 KiB
Bash
Executable File
#!/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
|