Skip to content

fix: update the pin timeout value #247

fix: update the pin timeout value

fix: update the pin timeout value #247

Workflow file for this run

name: Android CI/CD
on:
push:
branches:
- master # 触发 CI/CD 的分支
pull_request:
branches:
- master # 监听到 PR 到 main 分支时触发 CI/CD
jobs:
lint:
runs-on: ubuntu-latest # 使用 Ubuntu 作为运行环境
steps:
- name: Check out repository
uses: actions/checkout@v2 # 检出当前仓库代码
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 16
- name: Install commitlint
run: |
npm install -g @commitlint/cli @commitlint/config-conventional
- name: Run commitlint
run: |
if [ "${GITHUB_SHA}" = "0000000000000000000000000000000000000000" ]; then
echo "commitlint from HEAD^"
npx commitlint -x @commitlint/config-conventional -f HEAD^
else
echo "commitlint from ${GITHUB_SHA}"
npx commitlint -x @commitlint/config-conventional -f "${GITHUB_SHA}"
fi
build:
runs-on: ubuntu-latest # 使用 Ubuntu 作为运行环境
steps:
- name: Check out repository
uses: actions/checkout@v3 # 检出当前仓库代码
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'zulu' # 指定 Java 发行版
- name: Set up Android SDK
uses: android-actions/setup-android@v2
with:
api-level: 30
build-tools: 30.0.3
# 缓存 Gradle 依赖项
- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Get version information
id: version
run: |
VERSION_CODE=$(grep versionCode pos_android_studio_demo/pos_android_app/build.gradle | head -n 1 | sed 's/.*versionCode\s*\([0-9]\+\).*/\1/')
VERSION_NAME=$(grep versionName pos_android_studio_demo/pos_android_app/build.gradle | head -n 1 | sed 's/.*versionName\s*"\([^"]\+\)".*/\1/')
echo "VERSION_CODE=$VERSION_CODE" >> $GITHUB_ENV
echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_ENV
- name: Get commit message
id: commit
run: |
COMMIT_MESSAGE=$(git log -1 --pretty=%B)
COMMIT_MESSAGE=$(echo "$COMMIT_MESSAGE" | sed 's/^[0-9]\+\.[ ]*//g')
COMMIT_MESSAGE=$(echo "$COMMIT_MESSAGE" | tr -d '\n')
echo "COMMIT_MESSAGE=$COMMIT_MESSAGE" >> $GITHUB_ENV
# 解码并保存 keystore 文件
- name: Decode and Save Keystore
run: |
echo "${{ vars.KEYSTORE_FILE }}" | base64 -d > pos_android_studio_demo/app.keystore
- name: Build the release signed APK
run: |
cd pos_android_studio_demo
chmod +x ./gradlew
./gradlew assembleRelease \
-Pandroid.injected.signing.store.file=app.keystore \
-Pandroid.injected.signing.store.password=${{ vars.KEYSTORE_PASSWORD }} \
-Pandroid.injected.signing.key.alias=${{ vars.KEY_ALIAS }} \
-Pandroid.injected.signing.key.password=${{ vars.KEY_PASSWORD }}
# 保存生成的 APK 文件
- name: Upload APK Artifact
uses: actions/upload-artifact@v4
with:
name: pos_android_app-release
path: pos_android_studio_demo/pos_android_app/build/outputs/apk/release/pos_android_app-release.apk
- name: List APK files
run: ls -R pos_android_studio_demo/pos_android_app/build/outputs/apk/release # 列出 APK 文件,确保路径正确
# 保存SDK 库文件
- name: Upload SDK Artifact
uses: actions/upload-artifact@v4
with:
name: dspread-sdks
path: |
pos_android_studio_demo/pos_android_app/libs/dspread_pos_sdk_*.aar
pos_android_studio_demo/pos_android_app/libs/dspread_print_sdk-*.aar
release:
runs-on: ubuntu-latest
needs: [build] # 依赖于 build 作业的成功
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Get version information
id: version
run: |
VERSION_CODE=$(grep versionCode pos_android_studio_demo/pos_android_app/build.gradle | head -n 1 | sed 's/.*versionCode\s*\([0-9]\+\).*/\1/')
VERSION_NAME=$(grep versionName pos_android_studio_demo/pos_android_app/build.gradle | head -n 1 | sed 's/.*versionName\s*"\([^"]\+\)".*/\1/')
echo "VERSION_CODE=$VERSION_CODE" >> $GITHUB_ENV
echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_ENV
echo "TAG_NAME=v$VERSION_NAME" >> $GITHUB_ENV
BUILD_ID="$VERSION_NAME-$VERSION_CODE-$(date +%Y%m%d)"
echo "BUILD_ID=$BUILD_ID" >> $GITHUB_ENV
- name: Check if release already exists
id: check_release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
RESPONSE=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
"https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG_NAME" || echo "NOT_FOUND")
if [[ "$RESPONSE" != "NOT_FOUND" ]] && echo "$RESPONSE" | grep -q '"id":'; then
echo "Release $TAG_NAME already exists. Skipping release creation."
echo "RELEASE_EXISTS=true" >> $GITHUB_ENV
EXISTING_NAME=$(echo "$RESPONSE" | grep '"name"' | head -1 | cut -d'"' -f4)
echo "EXISTING_RELEASE_NAME=$EXISTING_NAME" >> $GITHUB_ENV
else
echo "Release $TAG_NAME does not exist. Proceeding with release creation."
echo "RELEASE_EXISTS=false" >> $GITHUB_ENV
fi
- name: Download APK Artifact
if: env.RELEASE_EXISTS == 'false'
uses: actions/download-artifact@v4
with:
name: pos_android_app-release
path: pos_android_studio_demo/pos_android_app/build/outputs/apk/release
- name: Verify APK file in release
if: env.RELEASE_EXISTS == 'false'
run: ls -R pos_android_studio_demo/pos_android_app/build/outputs/apk/release # 列出 APK 文件,确保路径正确
- name: Verify SDK Files
if: env.RELEASE_EXISTS == 'false'
id: verify-sdk
run: |
POS_SDKS=$(find pos_android_studio_demo/pos_android_app/libs -name "dspread_pos_sdk_*.aar" -type f | tr '\n' ' ')
PRINT_SDKS=$(find pos_android_studio_demo/pos_android_app/libs -name "dspread_print_sdk-*.aar" -type f | tr '\n' ' ')
# 打印验证结果
echo "Found POS SDK files: $POS_SDKS"
echo "Found PRINT SDK files: $PRINT_SDKS"
# 检查是否找到文件
if [ -z "$POS_SDKS" ]; then
echo "WARNING: No POS SDK files found!"
else
# 统计找到的文件数量
POS_COUNT=$(echo "$POS_SDKS" | wc -w)
echo "Found $POS_COUNT POS SDK file(s)"
fi
if [ -z "$PRINT_SDKS" ]; then
echo "WARNING: No PRINT SDK files found!"
else
PRINT_COUNT=$(echo "$PRINT_SDKS" | wc -w)
echo "Found $PRINT_COUNT PRINT SDK file(s)"
fi
# 设置输出变量(注意:每个输出变量都要单独设置)
echo "pos_sdks=$POS_SDKS" >> $GITHUB_OUTPUT
echo "print_sdks=$PRINT_SDKS" >> $GITHUB_OUTPUT
- name: Get commit message
if: env.RELEASE_EXISTS == 'false'
id: commit
run: |
COMMIT_MESSAGE=$(git log -1 --pretty=%B)
COMMIT_MESSAGE=$(echo "$COMMIT_MESSAGE" | sed 's/^[0-9]\+\.[ ]*//g')
COMMIT_MESSAGE=$(echo "$COMMIT_MESSAGE" | tr -d '\n')
echo "COMMIT_MESSAGE=$COMMIT_MESSAGE" >> $GITHUB_ENV
- name: Create GitHub Release
if: env.RELEASE_EXISTS == 'false'
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ env.TAG_NAME }}
name: v${{ env.VERSION_NAME }}
body: |
${{ env.VERSION_NAME }}
**Changes:**
${{ env.COMMIT_MESSAGE }}
draft: false
prerelease: false
files: |
pos_android_studio_demo/pos_android_app/build/outputs/apk/release/pos_android_app-release.apk
${{ steps.verify-sdk.outputs.pos_sdks }}
${{ steps.verify-sdk.outputs.print_sdks }}
token: ${{ secrets.GITHUB_TOKEN }}
- name: Skip release creation
if: env.RELEASE_EXISTS == 'true'
run: |
echo "🚫 Release ${{ env.TAG_NAME }} already exists!"
echo "📋 Existing Release: ${{ env.EXISTING_RELEASE_NAME }}"
echo "💡 If you want to create a new release, please update versionCode and versionName in build.gradle"
upload-to-gitlab-maven:
runs-on: ubuntu-latest
needs: [build]
steps:
- name: Check out repository
uses: actions/checkout@v3
- name: Set up Maven
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Configure Maven for GitLab
run: |
mkdir -p ~/.m2
# 使用简单的echo命令,避免heredoc问题
echo '<?xml version="1.0" encoding="UTF-8"?>
<settings>
<servers>
<server>
<id>gitlab-maven</id>
<configuration>
<httpHeaders>
<property>
<name>Private-Token</name>
<value>'${{ secrets.GITLAB_DEPLOY_TOKEN }}'</value>
</property>
</httpHeaders>
</configuration>
</server>
</servers>
</settings>' > ~/.m2/settings.xml
- name: Upload POS SDK AARs to GitLab Maven
env:
GITLAB_MAVEN_URL: ${{ secrets.GITLAB_MAVEN_URL }}
GITLAB_DEPLOY_TOKEN: ${{ secrets.GITLAB_DEPLOY_TOKEN }}
run: |
# 设置工作目录
AAR_DIR="pos_android_studio_demo/pos_android_app/libs"
echo "🔍 查找 POS SDK AAR 文件..."
# 只上传匹配 dspread_pos_sdk_*.aar 的文件
for aar_file in "$AAR_DIR"/dspread_pos_sdk_*.aar; do
if [ ! -f "$aar_file" ]; then
echo "⚠️ 未找到匹配的 POS SDK AAR 文件"
continue
fi
echo "📦 处理文件: $aar_file"
# 提取文件名和基本信息
filename=$(basename "$aar_file")
name="${filename%.*}" # 去掉 .aar 后缀
echo "📄 文件名: $filename"
echo "🆔 名称: $name"
# 提取版本号和变体信息
if [[ "$name" =~ ^dspread_pos_sdk_([0-9]+\.[0-9]+\.[0-9]+)(-min)?$ ]]; then
base_version="${BASH_REMATCH[1]}"
suffix="${BASH_REMATCH[2]:-}"
groupId="com.dspread.library"
if [ -n "$suffix" ]; then
artifactId="dspread_pos_sdk"
version="${base_version}-min" # 版本号还是 8.2.7
echo "🎯 检测到 POS SDK 精简版: version=$version"
else
artifactId="dspread_pos_sdk"
version="${base_version}" # 版本号 8.2.7
classifier="" # 无分类器
echo "🎯 检测到 POS SDK 完整版: version=$version"
fi
echo "📦 Maven 坐标:"
echo " groupId: $groupId"
echo " artifactId: $artifactId"
echo " version: $version"
if [ -n "$classifier" ]; then
echo " classifier: $classifier"
fi
# 验证必要信息
if [ -z "$GITLAB_MAVEN_URL" ]; then
echo "❌ 错误: GITLAB_MAVEN_URL 未设置"
exit 1
fi
echo "🌐 GitLab Maven URL: $GITLAB_MAVEN_URL"
# 使用 Maven deploy 命令
echo "🚀 使用 Maven deploy 上传..."
# 构建 Maven 命令
MAVEN_CMD="mvn deploy:deploy-file \
-Dfile='$aar_file' \
-DgroupId='$groupId' \
-DartifactId='$artifactId' \
-Dversion='$version' \
-Dpackaging='aar' \
-DrepositoryId='gitlab-maven' \
-Durl='$GITLAB_MAVEN_URL' \
-DgeneratePom=true"
# 如果有分类器,添加分类器参数
if [ -n "$classifier" ]; then
MAVEN_CMD="$MAVEN_CMD -Dclassifier='$classifier'"
fi
# 执行 Maven 命令
eval $MAVEN_CMD -s ~/.m2/settings.xml
if [ $? -eq 0 ]; then
echo "✅ 上传成功: $filename"
else
echo "❌ 上传失败: $filename"
echo "⚠️ 尝试使用 curl 直接上传..."
# 构建上传文件名
if [ -n "$classifier" ]; then
upload_filename="${artifactId}-${version}-${classifier}.aar"
else
upload_filename="${artifactId}-${version}.aar"
fi
# 使用 curl 直接上传
echo "🔄 尝试 curl 上传 $upload_filename..."
curl -v --fail --location --request POST \
"$GITLAB_MAVEN_URL/$groupId/$artifactId/$version/$upload_filename" \
--header "Private-Token: $GITLAB_DEPLOY_TOKEN" \
--header "Content-Type: multipart/form-data" \
--form "file=@$aar_file"
if [ $? -eq 0 ]; then
echo "✅ curl 上传成功"
else
echo "❌ curl 上传失败"
fi
fi
echo "---"
else
echo "⚠️ 跳过不匹配的文件: $filename"
fi
done
# 检查是否处理了任何文件
file_count=$(ls "$AAR_DIR"/dspread_pos_sdk_*.aar 2>/dev/null | wc -l)
if [ "$file_count" -eq 0 ]; then
echo "⚠️ 警告: 未找到 dspread_pos_sdk_*.aar 文件"
else
echo "🎉 处理完成,共 $file_count 个文件"
echo ""
echo "📋 生成的 Maven 依赖:"
echo ""
echo "完整版依赖:"
echo "implementation 'com.dspread.library:dspread_pos_sdk:x.x.x'"
echo ""
echo "精简版依赖:"
echo "implementation 'implementation 'com.dspread.library:dspread_pos_sdk:x.x.x-min'"
fi
deploy:
runs-on: ubuntu-latest # 使用 Ubuntu 作为运行环境
needs: [build] # 部署依赖于构建作业成功
steps:
- name: Check out repository
uses: actions/checkout@v2
- name: Deploy to the server or another location
run: |
echo "Deploying APK or other artifacts"
# 可以根据需要替换为实际的部署步骤,例如上传到服务器或云平台等