From c41e1ebd9df2b0aaa1ae0904cb4bb571791c3653 Mon Sep 17 00:00:00 2001 From: liyi Date: Tue, 23 Sep 2025 10:27:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B5=8B=E8=AF=95ci?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/ci.yml | 157 +++++++++++++++++++++++----------------- 1 file changed, 90 insertions(+), 67 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index a8d71291..0dc156be 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -1,4 +1,4 @@ -name: Flutter Build - Sky Dev +name: Flutter Build - Sky on: push: @@ -6,118 +6,141 @@ on: - develop_sky jobs: - build-android: - name: Build Android for Sky (dev) + # 第一个 job:只负责计算版本号(所有 job 依赖它) + determine-version: + name: 🧮 Determine Version runs-on: sky - - env: - FLAVOR: sky_dev - MAIN_FILE: lib/main_sky_dev.dart - BUILD_TYPE: dev - + outputs: + next_version: ${{ steps.version.outputs.next_version }} + next_version_full: ${{ steps.version.outputs.next_version_full }} + build_number: ${{ steps.version.outputs.build_number }} steps: - name: Checkout Code uses: actions/checkout@v4 with: - fetch-depth: 0 # 获取全部历史,用于计算 commits + fetch-depth: 0 - name: Determine Version id: version run: | - # 获取上一个 tag(格式 v1.4.598_sky) LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v1.0.0_sky") - echo "LAST_TAG=$LAST_TAG" - - # 提取基础版本号 v1.4.598 BASE_VERSION=$(echo "$LAST_TAG" | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | head -1) - if [ -z "$BASE_VERSION" ]; then - BASE_VERSION="v1.0.0" - fi + [ -z "$BASE_VERSION" ] && BASE_VERSION="v1.0.0" - # 分割版本号 MAJOR=$(echo $BASE_VERSION | cut -d'.' -f1 | sed 's/v//') MINOR=$(echo $BASE_VERSION | cut -d'.' -f2) PATCH=$(echo $BASE_VERSION | cut -d'.' -f3) - # 计算从上个 tag 到现在的唯一 commit messages 数量 COMMIT_COUNT=$(git log --pretty=%B "${LAST_TAG}.." | grep -v '^$' | sort -u | wc -l | tr -d ' ') - - # 新 patch = 原 patch + commit 数 NEW_PATCH=$((PATCH + COMMIT_COUNT)) - - # 构造新版本号 NEXT_VERSION="v${MAJOR}.${MINOR}.${NEW_PATCH}" - - # 带环境标识的完整版本 - NEXT_VERSION_FULL="${NEXT_VERSION}_${FLAVOR}" + NEXT_VERSION_FULL="${NEXT_VERSION}_sky_dev" + BUILD_NUMBER=$NEW_PATCH echo "NEXT_VERSION=$NEXT_VERSION" >> $GITEA_ENV echo "NEXT_VERSION_FULL=$NEXT_VERSION_FULL" >> $GITEA_ENV - echo "BUILD_NUMBER=$NEW_PATCH" >> $GITEA_ENV + echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITEA_ENV - echo "✅ Next version: $NEXT_VERSION_FULL (Build: $NEW_PATCH)" + # 输出给其他 job 使用 + echo "::set-output name=next_version::$NEXT_VERSION" + echo "::set-output name=next_version_full::$NEXT_VERSION_FULL" + echo "::set-output name=build_number::$BUILD_NUMBER" + + # 并行 Job 1:Android APK + build-apk: + name: 📦 Build APK + needs: determine-version + runs-on: sky + steps: + - name: Checkout Code + uses: actions/checkout@v4 - name: Setup Flutter run: flutter pub get - - name: Clean Project - run: flutter clean - - - name: Build APK (${FLAVOR}) + - name: Build APK run: | flutter build apk \ --no-tree-shake-icons \ - --flavor ${FLAVOR} \ - -t ${MAIN_FILE} \ - --build-number=${{ env.BUILD_NUMBER }} \ - --build-name=${{ env.NEXT_VERSION }} + --flavor sky \ + -t lib/main_sky_dev.dart \ + --build-number=${{ needs.determine-version.outputs.build_number }} \ + --build-name=${{ needs.determine-version.outputs.next_version }} - - name: Build AppBundle (sky flavor, dev mode) + - name: Upload APK Artifact + uses: actions/upload-artifact@v4 + with: + name: starlock-sky-dev-${{ needs.determine-version.outputs.next_version_full }}.apk + path: build/app/outputs/flutter-apk/app-sky_dev-release.apk + + # 并行 Job 2:Android AAB + build-aab: + name: 📦 Build AAB + needs: determine-version + runs-on: sky + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Setup Flutter + run: flutter pub get + + - name: Build App Bundle run: | flutter build appbundle \ --no-tree-shake-icons \ --flavor sky \ - -t lib/main_sky_lite.dart \ - --build-number=${{ env.BUILD_NUMBER }} \ - --build-name=${{ env.NEXT_VERSION }} + -t lib/main_sky_dev.dart \ + --build-number=${{ needs.determine-version.outputs.build_number }} \ + --build-name=${{ needs.determine-version.outputs.next_version }} - - name: Prepare Output Directory - run: | - mkdir -p build/output - # 重命名 APK - mv build/app/outputs/flutter-apk/app-${{ env.FLAVOR }}-release.apk \ - build/output/starlock-sky-${{ env.BUILD_TYPE }}-${{ env.NEXT_VERSION_FULL }}.apk - # 重命名 AAB - mv build/app/outputs/bundle/skyRelease/app-sky-release.aab \ - build/output/starlock-sky-${{ env.BUILD_TYPE }}-${{ env.NEXT_VERSION_FULL }}.aab + - name: Upload AAB Artifact + uses: actions/upload-artifact@v4 + with: + name: starlock-sky-dev-${{ needs.determine-version.outputs.next_version_full }}.aab + path: build/app/outputs/bundle/skyRelease/app-sky-release.aab - - name: Build iOS (${{ env.FLAVOR }}) + # 并行 Job 3:iOS IPA + build-ios: + name: 🍎 Build iOS + needs: determine-version + runs-on: macos # 必须使用 macOS runner + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Setup Flutter + run: flutter pub get + + - name: Build iOS run: | flutter build ios \ --no-codesign \ - --flavor ${FLAVOR} \ - -t ${MAIN_FILE} \ - --build-number=${{ env.BUILD_NUMBER }} \ - --build-name=${{ env.NEXT_VERSION }} + --flavor sky \ + -t lib/main_sky_dev.dart \ + --build-number=${{ needs.determine-version.outputs.build_number }} \ + --build-name=${{ needs.determine-version.outputs.next_version }} - - name: Rename IPA - run: | - mkdir -p build/output - cp -r build/ios/ipa/*.ipa build/output/starlock-sky-${{ env.BUILD_TYPE }}-${{ env.NEXT_VERSION_FULL }}.ipa - - - name: List Outputs - run: ls -la build/output/ - - - name: Upload Artifacts + - name: Upload IPA Artifact uses: actions/upload-artifact@v4 with: - name: flutter-builds-${{ env.NEXT_VERSION_FULL }} - path: build/output/ + name: starlock-sky-dev-${{ needs.determine-version.outputs.next_version_full }}.ipa + path: build/ios/ipa/Runner.ipa + + # 最后一个 job:汇总并打 tag + publish: + name: 🏷️ Create Tag & Notify + needs: [build-apk, build-aab, build-ios] + runs-on: sky + if: success() + steps: + - name: Checkout Code + uses: actions/checkout@v4 - name: Create and Push New Tag run: | - NEW_TAG=${{ env.NEXT_VERSION_FULL }} + NEW_TAG=${{ needs.determine-version.outputs.next_version_full }} git config user.name "Gitea Runner" git config user.email "runner@gitea.local" git tag "$NEW_TAG" - git push origin "$NEW_TAG" || echo "Tag might already exist" \ No newline at end of file + git push origin "$NEW_TAG" || echo "Tag $NEW_TAG already exists" \ No newline at end of file