新增:是否加入SmsF预览体验计划(在线更新每周构建版) #416
This commit is contained in:
parent
f0ef8e9dcd
commit
0036044d54
|
@ -23,7 +23,7 @@ jobs:
|
|||
- name: Delete Weekly Build
|
||||
uses: Mattraks/delete-workflow-runs@v2
|
||||
with:
|
||||
token: ${{ github.token }}
|
||||
token: ${{ secrets.TOKEN }}
|
||||
repository: ${{ github.repository }}
|
||||
retain_days: 0 # 全部删除只留正在跑的一条
|
||||
keep_minimum_runs: 0 # 全部删除只留正在跑的一条
|
||||
|
@ -45,39 +45,84 @@ jobs:
|
|||
# 打包release
|
||||
- name: Build with Gradle
|
||||
run: bash ./gradlew assembleRelease
|
||||
# 存档打包的文件,以便后续上传,TODO: 看起来有点笨,有没有更好的方法?
|
||||
- name: Init APP Version Name
|
||||
# 自动发布预览计划
|
||||
- name: Parse output-metadata.json and upload APKs to XUpdate
|
||||
run: |
|
||||
echo "ver_name=$(grep -m 1 '\"versionName\":' ${{ env.output }}//output-metadata.json | grep -oP '\"versionName\": \"\K[^\"]+')" >> $GITHUB_ENV
|
||||
echo "ver_code=$(grep -m 1 '\"versionCode\":' ${{ env.output }}//output-metadata.json | grep -oP '\"versionCode\": \K\d+' | tail -c 4)" >> $GITHUB_ENV
|
||||
echo "ver_date=$(grep -m 1 '\"outputFile\":' ${{ env.output }}//output-metadata.json | grep -oP '\"outputFile\": \"[^\"]+' | grep -oP '\d{8}')" >> $GITHUB_ENV
|
||||
metadata_file="${{ env.output }}/output-metadata.json"
|
||||
applicationId=$(jq -r '.applicationId' "$metadata_file")
|
||||
buildDate=$(jq -r '.buildDate' "$metadata_file")
|
||||
buildTime=$(jq -r '.buildTime' "$metadata_file")
|
||||
gitCommitId=$(jq -r '.gitCommitId' "$metadata_file")
|
||||
|
||||
# 遍历 elements,并从 outputFile 中提取 versionName 和 versionCode
|
||||
jq -r '.elements | sort_by(.outputFile) | .[].outputFile' "$metadata_file" |
|
||||
while IFS= read -r apk; do
|
||||
echo "APK: $apk"
|
||||
# 使用正则表达式从文件名中提取 versionName、versionCode 和 ABI
|
||||
if [[ $apk =~ SmsF_([^_]+)_([^_]+)_(.+)_release.apk ]]; then
|
||||
versionName="${BASH_REMATCH[1]}"
|
||||
versionCode="${BASH_REMATCH[2]}"
|
||||
abi="${BASH_REMATCH[3]}"
|
||||
echo "ver_name=$versionName" >> $GITHUB_ENV
|
||||
echo "ver_code=${versionCode: -3}" >> $GITHUB_ENV
|
||||
|
||||
response=$(curl --retry 3 -X POST -H "Cache-Control: no-cache" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Cookie: xupdate_token=${{ secrets.XUPDATE_TOKEN }}" \
|
||||
-H "X-Token: ${{ secrets.X_TOKEN }}" \
|
||||
-d "{\"appKey\":\"${applicationId}\",\"versionName\":\"${versionName}\",\"versionCode\":\"${versionCode}\",\"modifyContent\":\"\",\"updateStatus\":1,\"gitCommitId\":\"${gitCommitId}\",\"buildTime\":\"${buildTime}\",\"uploadTime\":\"${buildTime}\"}" \
|
||||
${{ secrets.URL_ADD_VERSION }})
|
||||
|
||||
version_id=$(echo $response | grep -oP '"versionId":\s*\K\d+') # 提取versionId
|
||||
echo "versionId: $version_id"
|
||||
|
||||
if [[ $version_id =~ ^[0-9]+$ ]]; then
|
||||
curl --retry 3 -X POST -H "Cache-Control: no-cache" \
|
||||
-H "Content-Type: multipart/form-data" \
|
||||
-H "Cookie: xupdate_token=${{ secrets.XUPDATE_TOKEN }}" \
|
||||
-H "X-Token: ${{ secrets.X_TOKEN }}" \
|
||||
-F "file=@${{ env.output }}/${apk};filename=${apk}" \
|
||||
-F "versionId=${version_id}" \
|
||||
${{ secrets.URL_UPLOAD_APK }}
|
||||
|
||||
# If upload is successful, set success to true to exit the retry loop
|
||||
if [[ $? -eq 0 ]]; then
|
||||
success=true
|
||||
fi
|
||||
else
|
||||
echo "Error: version_id is not a valid number. skip upload apk"
|
||||
fi
|
||||
|
||||
fi
|
||||
done
|
||||
# 存档打包的文件,以便后续上传,TODO: 看起来有点笨,有没有更好的方法?
|
||||
- name: Upload App To Artifact universal
|
||||
if: success () || failure ()
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: "SmsF_${{ env.ver_name }}_100${{ env.ver_code }}_universal_${{ env.ver_date }}_release.apk"
|
||||
path: "${{ env.output }}//SmsF_*_universal_*.apk"
|
||||
name: "SmsF_${{ env.ver_name }}_100${{ env.ver_code }}_universal_release.apk"
|
||||
path: "${{ env.output }}/SmsF_*_universal_*.apk"
|
||||
- name: Upload App To Artifact armeabi-v7a
|
||||
if: success () || failure ()
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: "SmsF_${{ env.ver_name }}_200${{ env.ver_code }}_armeabi-v7a_${{ env.ver_date }}_release.apk"
|
||||
name: "SmsF_${{ env.ver_name }}_200${{ env.ver_code }}_armeabi-v7a_release.apk"
|
||||
path: "${{ env.output }}//SmsF_*_armeabi-v7a_*.apk"
|
||||
- name: Upload App To Artifact arm64-v8a
|
||||
if: success () || failure ()
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: "SmsF_${{ env.ver_name }}_300${{ env.ver_code }}_arm64-v8a_${{ env.ver_date }}_release.apk"
|
||||
name: "SmsF_${{ env.ver_name }}_300${{ env.ver_code }}_arm64-v8a_release.apk"
|
||||
path: "${{ env.output }}//SmsF_*_arm64-v8a_*.apk"
|
||||
- name: Upload App To Artifact x86
|
||||
if: success () || failure ()
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: "SmsF_${{ env.ver_name }}_400${{ env.ver_code }}_x86_${{ env.ver_date }}_release.apk"
|
||||
path: "${{ env.output }}//SmsF_*_x86_${{ env.ver_date }}_*.apk"
|
||||
name: "SmsF_${{ env.ver_name }}_400${{ env.ver_code }}_x86_release.apk"
|
||||
path: "${{ env.output }}//SmsF_*_x86_*.apk"
|
||||
- name: Upload App To Artifact x86_64
|
||||
if: success () || failure ()
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: "SmsF_${{ env.ver_name }}_500${{ env.ver_code }}_x86_64_${{ env.ver_date }}_release.apk"
|
||||
path: "${{ env.output }}//SmsF_*_x86_64_${{ env.ver_date }}_*.apk"
|
||||
name: "SmsF_${{ env.ver_name }}_500${{ env.ver_code }}_x86_64_release.apk"
|
||||
path: "${{ env.output }}//SmsF_*_x86_64_*.apk"
|
|
@ -1,5 +1,8 @@
|
|||
//file:noinspection GrDeprecatedAPIUsage
|
||||
//file:noinspection DependencyNotationArgument
|
||||
import groovy.json.JsonBuilder
|
||||
import groovy.json.JsonSlurper
|
||||
|
||||
plugins {
|
||||
id 'com.android.application'
|
||||
id 'kotlin-android'
|
||||
|
@ -34,20 +37,22 @@ android {
|
|||
viewBinding true
|
||||
}
|
||||
|
||||
//编译日期
|
||||
def buildDate = new Date().format("yyMMdd", TimeZone.getTimeZone("GMT+08"))
|
||||
//编译时间
|
||||
def buildTime = new Date().format("yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("GMT+08"))
|
||||
//Git 的 Commit ID
|
||||
def gitCommitId = getGitCommitId()
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.idormy.sms.forwarder"
|
||||
minSdkVersion build_versions.min_sdk
|
||||
targetSdkVersion build_versions.target_sdk
|
||||
versionCode build_versions.version_code
|
||||
//版本号拼接编译日期
|
||||
def date = new Date().format("yyMMdd", TimeZone.getTimeZone("GMT+08"))
|
||||
versionName = "${build_versions.version_name}.${date}"
|
||||
versionName = "${build_versions.version_name}.${buildDate}"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
//编译时间
|
||||
def time = new Date().format("yyyy-MM-dd HH:mm:ss", TimeZone.getTimeZone("GMT+08"))
|
||||
buildConfigField "String", "BUILD_TIME", "\"${time}\""
|
||||
//Git 的 commit ID
|
||||
buildConfigField "String", "GIT_COMMIT_ID", getGitCommitId()
|
||||
buildConfigField "String", "BUILD_TIME", "\"${buildTime}\""
|
||||
buildConfigField "String", "GIT_COMMIT_ID", "\"${gitCommitId}\""
|
||||
|
||||
multiDexEnabled true
|
||||
//vectorDrawables.useSupportLibrary = true
|
||||
|
@ -171,11 +176,20 @@ android {
|
|||
android.applicationVariants.configureEach { variant ->
|
||||
// Assigns a different version code for each output APK.
|
||||
variant.outputs.each { output ->
|
||||
//noinspection GrDeprecatedAPIUsage
|
||||
def abiName = output.getFilter(com.android.build.OutputFile.ABI)
|
||||
if (abiName == null) abiName = "universal"
|
||||
output.versionCodeOverride = abiCodes.get(abiName, 0) * 100000 + variant.versionCode
|
||||
output.outputFileName = "SmsF_${versionName}_${output.versionCode}_${abiName}_${variant.name}.apk"
|
||||
|
||||
// 修改 output-metadata.json 追加编译日期、编译时间、Git Commit ID
|
||||
variant.assemble.doLast {
|
||||
def metadataFile = file("${variant.outputs[0].outputFile.parent}/output-metadata.json")
|
||||
def metadata = new JsonSlurper().parseText(metadataFile.text)
|
||||
metadata.buildDate = buildDate
|
||||
metadata.buildTime = buildTime
|
||||
metadata.gitCommitId = gitCommitId
|
||||
metadataFile.text = new JsonBuilder(metadata).toPrettyString()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -327,10 +341,9 @@ apply from: 'x-library.gradle'
|
|||
//获取 commit ID
|
||||
static def getGitCommitId() {
|
||||
try {
|
||||
def commitId = 'git rev-parse --short HEAD'.execute().text.trim()
|
||||
return "\"$commitId\""
|
||||
return 'git rev-parse --short HEAD'.execute().text.trim()
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace()
|
||||
return "\"\""
|
||||
return ""
|
||||
}
|
||||
}
|
|
@ -42,10 +42,10 @@
|
|||
<string name="menu_about">About</string>
|
||||
|
||||
<string name="about_app_version">AppVer: %s</string>
|
||||
<string name="about_app_version_tips">Version Name: %s\nVersion Code: %s\nBuild Time: %s\nGit Commit ID: %s</string>
|
||||
<string name="about_app_version_tips" formatted="false">Version Name: %s\nVersion Code: %s\nBuild Time: %s\nGit Commit ID: %s</string>
|
||||
<string name="about_cache_size">Cache Size: %s</string>
|
||||
<string name="about_frpc_version">FrpcVer: %s</string>
|
||||
<string name="about_item_wechat_miniprogram">WeChat MiniProgram</string>
|
||||
<string name="about_item_wechat_miniprogram" formatted="false">WeChat MiniProgram</string>
|
||||
<string name="about_cache_purged">Cache cleared</string>
|
||||
<string name="about_frpc_deleted">Frpc Deleted, App restarting</string>
|
||||
<string name="about_copyright">© %1$s PPPSCN All rights reserved.</string>
|
||||
|
|
|
@ -42,10 +42,10 @@
|
|||
<string name="menu_about">关于软件</string>
|
||||
|
||||
<string name="about_app_version">软件版本:%s</string>
|
||||
<string name="about_app_version_tips">版本名称:%s\n版本代码:%s\n构建时间:%s\nGit提交ID:%s</string>
|
||||
<string name="about_app_version_tips" formatted="false">版本名称:%s\n版本代码:%s\n构建时间:%s\nGit提交ID:%s</string>
|
||||
<string name="about_cache_size">缓存大小:%s</string>
|
||||
<string name="about_frpc_version">Frpc版本:%s</string>
|
||||
<string name="about_item_wechat_miniprogram">微信小程序</string>
|
||||
<string name="about_item_wechat_miniprogram" formatted="false">微信小程序</string>
|
||||
<string name="about_cache_purged">已清理缓存</string>
|
||||
<string name="about_frpc_deleted">已删除动态库,重启APP以便生效!</string>
|
||||
<string name="about_copyright">© %1$s PPPSCN All rights reserved.</string>
|
||||
|
|
|
@ -42,10 +42,10 @@
|
|||
<string name="menu_about">關於軟體</string>
|
||||
|
||||
<string name="about_app_version">軟體版本:%s</string>
|
||||
<string name="about_app_version_tips">版本名稱:%s\n版本代碼:%s\n構建時間:%s\nGit提交ID:%s</string>
|
||||
<string name="about_app_version_tips" formatted="false">版本名稱:%s\n版本代碼:%s\n構建時間:%s\nGit提交ID:%s</string>
|
||||
<string name="about_cache_size">緩存大小:%s</string>
|
||||
<string name="about_frpc_version">Frpc版本:%s</string>
|
||||
<string name="about_item_wechat_miniprogram">微信小程序</string>
|
||||
<string name="about_item_wechat_miniprogram" formatted="false">微信小程序</string>
|
||||
<string name="about_cache_purged">已清理緩存</string>
|
||||
<string name="about_frpc_deleted">已刪除動態庫,重啟應用以生效!</string>
|
||||
<string name="about_copyright">© %1$s PPPSCN 版權所有。</string>
|
||||
|
|
|
@ -42,10 +42,10 @@
|
|||
<string name="menu_about">关于软件</string>
|
||||
|
||||
<string name="about_app_version">软件版本:%s</string>
|
||||
<string name="about_app_version_tips">版本名称:%s\n版本代码:%s\n构建时间:%s\nGit提交ID:%s</string>
|
||||
<string name="about_app_version_tips" formatted="false">版本名称:%s\n版本代码:%s\n构建时间:%s\nGit提交ID:%s</string>
|
||||
<string name="about_cache_size">缓存大小:%s</string>
|
||||
<string name="about_frpc_version">Frpc版本:%s</string>
|
||||
<string name="about_item_wechat_miniprogram">微信小程序</string>
|
||||
<string name="about_item_wechat_miniprogram" formatted="false">微信小程序</string>
|
||||
<string name="about_cache_purged">已清理缓存</string>
|
||||
<string name="about_frpc_deleted">已删除动态库,重启APP以便生效!</string>
|
||||
<string name="about_copyright">© %1$s PPPSCN All rights reserved.</string>
|
||||
|
|
Loading…
Reference in New Issue