fix: update the SDK to 8.3.2 #250
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 | |
| pos_android_studio_demo/pos_android_app/libs/dspread_pos_sdk_*.aar | |
| pos_android_studio_demo/pos_android_app/libs/dspread_print_sdk-*.aar | |
| 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" | |
| # 可以根据需要替换为实际的部署步骤,例如上传到服务器或云平台等 | |