This commit is contained in:
parent
ac157e8b93
commit
398c45ade1
@ -1,4 +1,4 @@
|
|||||||
name: Flutter Build - Sky Develop
|
name: Flutter CI - Basic Setup
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@ -6,246 +6,91 @@ on:
|
|||||||
- develop_sky
|
- develop_sky
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# 第一个 job:只负责计算版本号(所有 job 依赖它)
|
# 基础设置任务:检出代码、提取版本号、输出Flutter环境
|
||||||
determine-version:
|
basic-setup:
|
||||||
name: 🧮 Determine Version
|
name: 🔧 Basic Setup
|
||||||
runs-on: sky
|
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:
|
steps:
|
||||||
|
# 1. 检出代码
|
||||||
- name: Checkout Code
|
- name: Checkout Code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Determine Version
|
# 2. 提取版本号
|
||||||
|
- name: Extract Version
|
||||||
id: version
|
id: version
|
||||||
run: |
|
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")
|
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后缀)
|
# 提取基础版本号(去除_sky后缀)
|
||||||
BASE_VERSION=$(echo "$LAST_TAG" | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | head -1)
|
BASE_VERSION=$(echo "$LAST_TAG" | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | head -1)
|
||||||
[ -z "$BASE_VERSION" ] && BASE_VERSION="v1.0.0"
|
[ -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//')
|
MAJOR=$(echo $BASE_VERSION | cut -d'.' -f1 | sed 's/v//')
|
||||||
MINOR=$(echo $BASE_VERSION | cut -d'.' -f2)
|
MINOR=$(echo $BASE_VERSION | cut -d'.' -f2)
|
||||||
PATCH=$(echo $BASE_VERSION | cut -d'.' -f3)
|
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 "✅ Version extraction completed"
|
||||||
echo "Unique commit messages count: $COMMIT_COUNT"
|
|
||||||
|
# 3. 输出Flutter环境
|
||||||
|
- name: Output Flutter Environment
|
||||||
|
run: |
|
||||||
|
echo "🚀 Flutter Environment Information:"
|
||||||
|
echo "================================"
|
||||||
|
|
||||||
# 计算新的patch版本,并处理进位
|
# 检查Flutter是否可用
|
||||||
NEW_PATCH=$((PATCH + COMMIT_COUNT))
|
if command -v flutter &> /dev/null; then
|
||||||
NEW_MINOR=$MINOR
|
echo "✅ Flutter is available"
|
||||||
NEW_MAJOR=$MAJOR
|
|
||||||
|
# 输出Flutter版本
|
||||||
# 处理第三位版本号进位(超过1000时进位到第二位)
|
flutter --version
|
||||||
if [ $NEW_PATCH -ge 1000 ]; then
|
echo ""
|
||||||
NEW_MINOR=$((MINOR + NEW_PATCH / 1000))
|
|
||||||
NEW_PATCH=$((NEW_PATCH % 1000))
|
# 输出Flutter doctor信息
|
||||||
echo "Patch overflow detected, new Minor: $NEW_MINOR, new Patch: $NEW_PATCH"
|
echo "📋 Flutter Doctor Summary:"
|
||||||
fi
|
flutter doctor -v | head -20
|
||||||
|
echo ""
|
||||||
# 处理第二位版本号进位(超过10时进位到第一位)
|
|
||||||
if [ $NEW_MINOR -ge 10 ]; then
|
# 输出当前项目信息
|
||||||
NEW_MAJOR=$((MAJOR + NEW_MINOR / 10))
|
echo "📁 Project Information:"
|
||||||
NEW_MINOR=$((NEW_MINOR % 10))
|
echo "Project directory: $(pwd)"
|
||||||
echo "Minor overflow detected, new Major: $NEW_MAJOR, new Minor: $NEW_MINOR"
|
echo "Flutter project detected: $(ls -la | grep pubspec.yaml > /dev/null && echo "Yes" || echo "No")"
|
||||||
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"
|
|
||||||
else
|
else
|
||||||
echo "ℹ️ Tag $NEW_TAG already exists, skipping creation"
|
echo "❌ Flutter is not available in this environment"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "✅ Flutter environment check completed"
|
||||||
|
|
||||||
- name: Notify Build Success
|
# 4. 输出CI环境信息
|
||||||
|
- name: Output CI Environment
|
||||||
run: |
|
run: |
|
||||||
echo "🚀 Build Successful!"
|
echo "🔧 CI Environment Information:"
|
||||||
echo "📦 Generated artifacts:"
|
echo "============================"
|
||||||
echo " - APK: starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.apk"
|
echo "Runner OS: $RUNNER_OS"
|
||||||
echo " - AAB: starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.aab"
|
echo "Runner Architecture: $RUNNER_ARCH"
|
||||||
echo " - IPA: starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.ipa"
|
echo "Git Branch: $GITHUB_REF"
|
||||||
echo "🏷️ New version tag: ${{ needs.determine-version.outputs.next_version_full }}"
|
echo "Git SHA: $GITHUB_SHA"
|
||||||
echo "🔢 Version: ${{ needs.determine-version.outputs.next_version }}"
|
echo "Workflow: $GITHUB_WORKFLOW"
|
||||||
echo "📊 Build number: ${{ needs.determine-version.outputs.build_number }}"
|
echo ""
|
||||||
|
echo "✅ CI environment information output completed"
|
||||||
|
|
||||||
- name: Upload All Artifacts to Gitea
|
# 5. 任务完成通知
|
||||||
uses: actions/upload-artifact@v4
|
- name: Task Completion
|
||||||
with:
|
run: |
|
||||||
name: starlock-sky-develop-${{ needs.determine-version.outputs.next_version_full }}
|
echo "🎉 Basic CI setup completed successfully!"
|
||||||
path: |
|
echo ""
|
||||||
starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.apk
|
echo "📋 Tasks executed:"
|
||||||
starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.aab
|
echo " ✅ Code checkout"
|
||||||
starlock-sky-${{ needs.determine-version.outputs.next_version_full }}.ipa
|
echo " ✅ Version extraction"
|
||||||
retention-days: 30
|
echo " ✅ Flutter environment output"
|
||||||
|
echo " ✅ CI environment output"
|
||||||
|
echo ""
|
||||||
|
echo "🔚 No further operations will be performed."
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user