From 398c45ade1fabe489e381d4dfa5b8925bc1b5d97 Mon Sep 17 00:00:00 2001 From: liyi Date: Thu, 25 Sep 2025 09:12:47 +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 | 281 +++++++++------------------------------- 1 file changed, 63 insertions(+), 218 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 384b6422..e4f27740 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -1,4 +1,4 @@ -name: Flutter Build - Sky Develop +name: Flutter CI - Basic Setup on: push: @@ -6,246 +6,91 @@ on: - develop_sky jobs: - # 第一个 job:只负责计算版本号(所有 job 依赖它) - determine-version: - name: 🧮 Determine Version + # 基础设置任务:检出代码、提取版本号、输出Flutter环境 + basic-setup: + name: 🔧 Basic Setup runs-on: sky - 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: + # 1. 检出代码 - name: Checkout Code uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Determine Version + # 2. 提取版本号 + - name: Extract Version id: version run: | - # 获取上一次构建成功的tag(匹配vX.X.X_sky格式) + # 获取最新的tag(匹配vX.X.X_sky格式) LAST_TAG=$(git describe --tags --match "v*.*.*_sky" --abbrev=0 2>/dev/null || echo "v1.0.0_sky") - echo "Last tag found: $LAST_TAG" + echo "📌 Last tag found: $LAST_TAG" # 提取基础版本号(去除_sky后缀) BASE_VERSION=$(echo "$LAST_TAG" | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | head -1) [ -z "$BASE_VERSION" ] && BASE_VERSION="v1.0.0" - echo "Base version: $BASE_VERSION" + echo "📌 Base version: $BASE_VERSION" # 解析版本号各部分 MAJOR=$(echo $BASE_VERSION | cut -d'.' -f1 | sed 's/v//') MINOR=$(echo $BASE_VERSION | cut -d'.' -f2) PATCH=$(echo $BASE_VERSION | cut -d'.' -f3) - echo "Current version: Major=$MAJOR, Minor=$MINOR, Patch=$PATCH" + echo "📌 Version components: Major=$MAJOR, Minor=$MINOR, Patch=$PATCH" - # 计算不重复的commit消息数量 - COMMIT_COUNT=$(git log --pretty=%B "${LAST_TAG}.." | grep -v '^$' | sort -u | wc -l | tr -d ' ') - echo "Unique commit messages count: $COMMIT_COUNT" + # 输出版本信息 + echo "✅ Version extraction completed" + + # 3. 输出Flutter环境 + - name: Output Flutter Environment + run: | + echo "🚀 Flutter Environment Information:" + echo "================================" - # 计算新的patch版本,并处理进位 - NEW_PATCH=$((PATCH + COMMIT_COUNT)) - NEW_MINOR=$MINOR - NEW_MAJOR=$MAJOR - - # 处理第三位版本号进位(超过1000时进位到第二位) - if [ $NEW_PATCH -ge 1000 ]; then - NEW_MINOR=$((MINOR + NEW_PATCH / 1000)) - NEW_PATCH=$((NEW_PATCH % 1000)) - echo "Patch overflow detected, new Minor: $NEW_MINOR, new Patch: $NEW_PATCH" - fi - - # 处理第二位版本号进位(超过10时进位到第一位) - if [ $NEW_MINOR -ge 10 ]; then - NEW_MAJOR=$((MAJOR + NEW_MINOR / 10)) - NEW_MINOR=$((NEW_MINOR % 10)) - echo "Minor overflow detected, new Major: $NEW_MAJOR, new Minor: $NEW_MINOR" - fi - - # 生成新版本号 - NEXT_VERSION="v${NEW_MAJOR}.${NEW_MINOR}.${NEW_PATCH}" - NEXT_VERSION_FULL="${NEXT_VERSION}_sky_develop" # develop环境标识 - BUILD_NUMBER=$NEW_PATCH - - echo "Next version: $NEXT_VERSION" - echo "Next version full: $NEXT_VERSION_FULL" - echo "Build number: $BUILD_NUMBER" - - echo "NEXT_VERSION=$NEXT_VERSION" >> $GITEA_ENV - echo "NEXT_VERSION_FULL=$NEXT_VERSION_FULL" >> $GITEA_ENV - echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITEA_ENV - - # 输出给其他 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 (Develop环境) - build-apk: - name: 📦 Build APK (Develop) - needs: determine-version - runs-on: sky - steps: - - name: Checkout Code - uses: actions/checkout@v4 - - - name: Setup Flutter - run: flutter pub get - - - name: Build APK (Develop环境) - run: | - flutter build apk \ - --no-tree-shake-icons \ - --flavor sky \ - -t lib/main_sky_dev.dart \ - --build-number=${{ needs.determine-version.outputs.build_number }} \ - --build-name=${{ needs.determine-version.outputs.next_version }} \ - --debug # Develop环境使用debug构建 - - - name: Rename APK with Version - run: | - # ✅ 修正:文件名是 app-sky-debug.apk,不是 app-sky_dev-debug.apk - OLD_PATH="build/app/outputs/flutter-apk/app-sky-debug.apk" - - NEW_NAME="starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.apk" - - # 检查文件是否存在 - if [ ! -f "$OLD_PATH" ]; then - echo "❌ Error: APK file not found at $OLD_PATH" - echo "Available files in directory:" - ls -la build/app/outputs/flutter-apk/ - exit 1 - fi - - cp "$OLD_PATH" "$NEW_NAME" - echo "✅ Renamed APK to: $NEW_NAME" - - - name: Upload APK Artifact - uses: actions/upload-artifact@v4 - with: - name: ${{ needs.determine-version.outputs.next_version_full }}-apk - path: starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.apk - - # 并行 Job 2:Android AAB (Develop环境) - build-aab: - name: 📦 Build AAB (Develop) - 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 (Develop环境) - run: | - flutter build appbundle \ - --no-tree-shake-icons \ - --flavor sky \ - -t lib/main_sky_dev.dart \ - --build-number=${{ needs.determine-version.outputs.build_number }} \ - --build-name=${{ needs.determine-version.outputs.next_version }} \ - --debug # Develop环境使用debug构建 - - - name: Rename AAB with Version - run: | - # 重命名AAB文件,添加版本号 - OLD_PATH="build/app/outputs/bundle/skyDebug/app-sky-debug.aab" - NEW_NAME="starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.aab" - cp "$OLD_PATH" "$NEW_NAME" - echo "Renamed AAB to: $NEW_NAME" - - - name: Upload AAB Artifact - uses: actions/upload-artifact@v4 - with: - name: ${{ needs.determine-version.outputs.next_version_full }}-aab - path: starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.aab - - # 并行 Job 3:iOS IPA (Develop环境) - build-ios: - name: 🍎 Build iOS (Develop) - needs: determine-version - runs-on: sky # 必须使用 macOS runner - steps: - - name: Checkout Code - uses: actions/checkout@v4 - - - name: Setup Flutter - run: flutter pub get - - - name: Build iOS (Develop环境) - run: | - flutter build ios \ - --no-codesign \ - --flavor sky \ - -t lib/main_sky_dev.dart \ - --build-number=${{ needs.determine-version.outputs.build_number }} \ - --build-name=${{ needs.determine-version.outputs.next_version }} \ - --debug # Develop环境使用debug构建 - - - name: Rename IPA with Version - run: | - # 重命名IPA文件,添加版本号 - OLD_PATH="build/ios/iphoneos/Runner.app" - NEW_NAME="starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.ipa" - # 对于iOS,需要先打包成IPA - xcodebuild -exportArchive -archivePath build/ios/archive/Runner.xcarchive \ - -exportOptionsPlist ExportOptions.plist \ - -exportPath build/ios/ipa \ - -allowProvisioningUpdates - cp "build/ios/ipa/Runner.ipa" "$NEW_NAME" - echo "Renamed IPA to: $NEW_NAME" - - - name: Upload IPA Artifact - uses: actions/upload-artifact@v4 - with: - name: ${{ needs.determine-version.outputs.next_version_full }}-ipa - path: starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.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 - with: - fetch-depth: 0 - - - name: Create and Push New Tag - run: | - NEW_TAG=${{ needs.determine-version.outputs.next_version_full }} - git config user.name "Gitea Runner" - git config user.email "runner@gitea.local" - - # 检查tag是否已存在,如果不存在则创建并推送 - if ! git rev-parse "$NEW_TAG" >/dev/null 2>&1; then - git tag "$NEW_TAG" - git push origin "$NEW_TAG" - echo "✅ New tag created and pushed: $NEW_TAG" + # 检查Flutter是否可用 + if command -v flutter &> /dev/null; then + echo "✅ Flutter is available" + + # 输出Flutter版本 + flutter --version + echo "" + + # 输出Flutter doctor信息 + echo "📋 Flutter Doctor Summary:" + flutter doctor -v | head -20 + echo "" + + # 输出当前项目信息 + echo "📁 Project Information:" + echo "Project directory: $(pwd)" + echo "Flutter project detected: $(ls -la | grep pubspec.yaml > /dev/null && echo "Yes" || echo "No")" + else - echo "ℹ️ Tag $NEW_TAG already exists, skipping creation" + echo "❌ Flutter is not available in this environment" fi + + echo "✅ Flutter environment check completed" - - name: Notify Build Success + # 4. 输出CI环境信息 + - name: Output CI Environment run: | - echo "🚀 Build Successful!" - echo "📦 Generated artifacts:" - echo " - APK: starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.apk" - echo " - AAB: starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.aab" - echo " - IPA: starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.ipa" - echo "🏷️ New version tag: ${{ needs.determine-version.outputs.next_version_full }}" - echo "🔢 Version: ${{ needs.determine-version.outputs.next_version }}" - echo "📊 Build number: ${{ needs.determine-version.outputs.build_number }}" + echo "🔧 CI Environment Information:" + echo "============================" + echo "Runner OS: $RUNNER_OS" + echo "Runner Architecture: $RUNNER_ARCH" + echo "Git Branch: $GITHUB_REF" + echo "Git SHA: $GITHUB_SHA" + echo "Workflow: $GITHUB_WORKFLOW" + echo "" + echo "✅ CI environment information output completed" - - name: Upload All Artifacts to Gitea - uses: actions/upload-artifact@v4 - with: - name: starlock-sky-develop-${{ needs.determine-version.outputs.next_version_full }} - path: | - starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.apk - starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.aab - starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.ipa - retention-days: 30 + # 5. 任务完成通知 + - name: Task Completion + run: | + echo "🎉 Basic CI setup completed successfully!" + echo "" + echo "📋 Tasks executed:" + echo " ✅ Code checkout" + echo " ✅ Version extraction" + echo " ✅ Flutter environment output" + echo " ✅ CI environment output" + echo "" + echo "🔚 No further operations will be performed."