name: Flutter Build - Sky Dev on: push: branches: - develop_sky jobs: build-android: name: Build Android for Sky (dev) runs-on: sky env: FLAVOR: sky_dev MAIN_FILE: lib/main_sky_dev.dart BUILD_TYPE: dev steps: - name: Checkout Code uses: actions/checkout@v4 with: fetch-depth: 0 # 获取全部历史,用于计算 commits - 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 # 分割版本号 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}" echo "NEXT_VERSION=$NEXT_VERSION" >> $GITEA_ENV echo "NEXT_VERSION_FULL=$NEXT_VERSION_FULL" >> $GITEA_ENV echo "BUILD_NUMBER=$NEW_PATCH" >> $GITEA_ENV echo "✅ Next version: $NEXT_VERSION_FULL (Build: $NEW_PATCH)" - name: Setup Flutter run: flutter pub get - name: Clean Project run: flutter clean - name: Build APK (${FLAVOR}) run: | flutter build apk \ --no-tree-shake-icons \ --flavor ${FLAVOR} \ -t ${MAIN_FILE} \ --build-number=${{ env.BUILD_NUMBER }} \ --build-name=${{ env.NEXT_VERSION }} - name: Build AppBundle (sky flavor, dev mode) 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 }} - 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: Build iOS (${{ env.FLAVOR }}) run: | flutter build ios \ --no-codesign \ --flavor ${FLAVOR} \ -t ${MAIN_FILE} \ --build-number=${{ env.BUILD_NUMBER }} \ --build-name=${{ env.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 uses: actions/upload-artifact@v4 with: name: flutter-builds-${{ env.NEXT_VERSION_FULL }} path: build/output/ - name: Create and Push New Tag run: | NEW_TAG=${{ env.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"