222 lines
7.8 KiB
YAML
222 lines
7.8 KiB
YAML
name: Flutter CI - Basic Setup
|
||
|
||
on:
|
||
push:
|
||
branches:
|
||
- develop_sky
|
||
|
||
jobs:
|
||
# 基础设置任务:检出代码、提取版本号
|
||
basic-setup:
|
||
name: 🔧 Basic Setup
|
||
runs-on: sky
|
||
steps:
|
||
# 1. 检出代码
|
||
- name: Checkout Code
|
||
uses: actions/checkout@v4
|
||
with:
|
||
fetch-depth: 1
|
||
|
||
# 2. 提取版本号
|
||
- name: Extract Version
|
||
id: version
|
||
run: |
|
||
# 获取最新的tag(按版本号排序,匹配vX.X.X_sky格式)
|
||
LATEST_TAG=$(git tag --list "v*.*.*_sky" --sort=-version:refname | head -1)
|
||
|
||
# 如果没有找到tag,使用默认值
|
||
if [ -z "$LATEST_TAG" ]; then
|
||
LATEST_TAG="v1.0.0_sky"
|
||
echo "📌 No tags found, using default: $LATEST_TAG"
|
||
else
|
||
echo "📌 Latest tag found: $LATEST_TAG"
|
||
fi
|
||
|
||
# 提取基础版本号(去除_sky后缀)
|
||
BASE_VERSION=$(echo "$LATEST_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"
|
||
|
||
# 解析版本号各部分
|
||
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 "📌 Version components: Major=$MAJOR, Minor=$MINOR, Patch=$PATCH"
|
||
|
||
# 计算下一个版本号
|
||
echo "📊 Calculating next version..."
|
||
|
||
# 获取当前提交与最新tag之间的所有提交消息
|
||
COMMIT_MESSAGES=$(git log --oneline --format=%s $LATEST_TAG..HEAD 2>/dev/null || echo "")
|
||
|
||
# 统计需要递增的提交次数(过滤重复的提交消息)
|
||
INCREMENT_COUNT=0
|
||
if [ -n "$COMMIT_MESSAGES" ]; then
|
||
# 使用awk过滤重复的提交消息并计数
|
||
UNIQUE_MESSAGES=$(echo "$COMMIT_MESSAGES" | awk '!seen[$0]++')
|
||
INCREMENT_COUNT=$(echo "$UNIQUE_MESSAGES" | wc -l)
|
||
echo "📝 Found $INCREMENT_COUNT unique commit(s) since last tag"
|
||
else
|
||
echo "📝 No new commits since last tag"
|
||
fi
|
||
|
||
# 计算新的版本号
|
||
NEW_PATCH=$((PATCH + INCREMENT_COUNT))
|
||
NEW_MINOR=$MINOR
|
||
NEW_MAJOR=$MAJOR
|
||
|
||
# 处理版本号进位逻辑
|
||
if [ $NEW_PATCH -ge 1000 ]; then
|
||
NEW_MINOR=$((NEW_MINOR + NEW_PATCH / 1000))
|
||
NEW_PATCH=$((NEW_PATCH % 1000))
|
||
echo "🔄 Patch version overflow, incrementing minor version"
|
||
fi
|
||
|
||
if [ $NEW_MINOR -ge 10 ]; then
|
||
NEW_MAJOR=$((NEW_MAJOR + NEW_MINOR / 10))
|
||
NEW_MINOR=$((NEW_MINOR % 10))
|
||
echo "🔄 Minor version overflow, incrementing major version"
|
||
fi
|
||
|
||
# 生成下一个版本号
|
||
NEXT_VERSION="v${NEW_MAJOR}.${NEW_MINOR}.${NEW_PATCH}"
|
||
NEXT_TAG="${NEXT_VERSION}_sky"
|
||
|
||
echo "🚀 Next version: $NEXT_VERSION"
|
||
echo "🏷️ Next tag: $NEXT_TAG"
|
||
echo "📈 Increment count: $INCREMENT_COUNT"
|
||
|
||
# 输出到Gitea Actions环境变量
|
||
echo "NEXT_VERSION=$NEXT_VERSION" >> $GITHUB_ENV
|
||
echo "NEXT_TAG=$NEXT_TAG" >> $GITHUB_ENV
|
||
echo "INCREMENT_COUNT=$INCREMENT_COUNT" >> $GITHUB_ENV
|
||
|
||
# 输出版本信息
|
||
echo "✅ Version extraction completed"
|
||
# 5. 任务完成通知
|
||
- name: Task Completion
|
||
run: |
|
||
echo "🎉 Basic CI setup completed successfully!"
|
||
echo ""
|
||
echo "📋 Tasks executed:"
|
||
echo " ✅ Code checkout"
|
||
echo " ✅ Version extraction"
|
||
echo ""
|
||
echo "🚀 Next steps: Building Flutter artifacts..."
|
||
|
||
# 构建Flutter制品任务
|
||
build-artifacts:
|
||
name: 🏗️ Build Flutter Artifacts
|
||
runs-on: sky
|
||
needs: basic-setup
|
||
steps:
|
||
# 1. 使用第一个job的检出结果
|
||
- name: Use Checked Out Code
|
||
run: |
|
||
echo "📁 Using code already checked out by basic-setup job"
|
||
echo "📊 Current directory: $(pwd)"
|
||
ls -la
|
||
echo "✅ Ready to build artifacts"
|
||
|
||
# 2. 检查Flutter环境
|
||
- name: Check Flutter Environment
|
||
run: |
|
||
echo "🔍 Checking Flutter environment..."
|
||
flutter --version
|
||
echo "✅ Flutter environment is ready"
|
||
|
||
# 3. 获取版本信息
|
||
- name: Get Version Info
|
||
id: version-info
|
||
run: |
|
||
echo "📊 Using version from basic-setup job"
|
||
echo "NEXT_VERSION=${{ env.NEXT_VERSION }}"
|
||
echo "NEXT_TAG=${{ env.NEXT_TAG }}"
|
||
|
||
# 4. 构建APK文件
|
||
- name: Build APK
|
||
run: |
|
||
echo "🏗️ Building APK artifact..."
|
||
|
||
# 格式化文件名:sky-star-lock-develop-1-4.609.apk
|
||
APK_FILENAME="sky-star-lock-develop-${{ env.NEXT_VERSION }}.apk"
|
||
APK_FILENAME=$(echo "$APK_FILENAME" | sed 's/v//g' | sed 's/\./-/g')
|
||
APK_FILENAME="sky-star-lock-develop-$APK_FILENAME.apk"
|
||
|
||
echo "📁 APK filename: $APK_FILENAME"
|
||
|
||
# 构建APK
|
||
flutter build apk --release --flavor sky
|
||
|
||
# 重命名APK文件
|
||
mv build/app/outputs/flutter-apk/app-sky-release.apk "$APK_FILENAME"
|
||
|
||
echo "✅ APK build completed: $APK_FILENAME"
|
||
|
||
# 5. 构建AAB文件
|
||
- name: Build AAB
|
||
run: |
|
||
echo "🏗️ Building AAB artifact..."
|
||
|
||
# 格式化文件名:sky-star-lock-develop-1-4.609.aab
|
||
AAB_FILENAME="sky-star-lock-develop-${{ env.NEXT_VERSION }}.aab"
|
||
AAB_FILENAME=$(echo "$AAB_FILENAME" | sed 's/v//g' | sed 's/\./-/g')
|
||
AAB_FILENAME="sky-star-lock-develop-$AAB_FILENAME.aab"
|
||
|
||
echo "📁 AAB filename: $AAB_FILENAME"
|
||
|
||
# 构建AAB
|
||
flutter build appbundle --release --flavor sky
|
||
|
||
# 重命名AAB文件
|
||
mv build/app/outputs/bundle/skyRelease/app-sky-release.aab "$AAB_FILENAME"
|
||
|
||
echo "✅ AAB build completed: $AAB_FILENAME"
|
||
|
||
# 6. 构建iOS IPA文件(如果支持iOS构建)
|
||
- name: Build iOS IPA
|
||
if: runner.os == 'macos'
|
||
run: |
|
||
echo "🏗️ Building iOS IPA artifact..."
|
||
|
||
# 格式化文件名:sky-star-lock-develop-1-4.609.ipa
|
||
IPA_FILENAME="sky-star-lock-develop-${{ env.NEXT_VERSION }}.ipa"
|
||
IPA_FILENAME=$(echo "$IPA_FILENAME" | sed 's/v//g' | sed 's/\./-/g')
|
||
IPA_FILENAME="sky-star-lock-develop-$IPA_FILENAME.ipa"
|
||
|
||
echo "📁 IPA filename: $IPA_FILENAME"
|
||
|
||
# 构建iOS IPA
|
||
flutter build ipa --release --flavor sky
|
||
|
||
# 重命名IPA文件
|
||
mv build/ios/ipa/*.ipa "$IPA_FILENAME"
|
||
|
||
echo "✅ iOS IPA build completed: $IPA_FILENAME"
|
||
|
||
# 7. 上传制品
|
||
- name: Upload Artifacts
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: flutter-artifacts-develop
|
||
path: |
|
||
sky-star-lock-develop-*.apk
|
||
sky-star-lock-develop-*.aab
|
||
sky-star-lock-develop-*.ipa
|
||
retention-days: 30
|
||
|
||
# 8. 构建完成通知
|
||
- name: Build Completion
|
||
run: |
|
||
echo "🎉 Flutter artifacts build completed successfully!"
|
||
echo ""
|
||
echo "📦 Artifacts generated:"
|
||
echo " ✅ APK: sky-star-lock-develop-*.apk"
|
||
echo " ✅ AAB: sky-star-lock-develop-*.aab"
|
||
if [ "${{ runner.os }}" == "macos" ]; then
|
||
echo " ✅ IPA: sky-star-lock-develop-*.ipa"
|
||
fi
|
||
echo ""
|
||
echo "🏷️ Version: ${{ env.NEXT_VERSION }}"
|
||
echo "📁 Files available in artifacts section"
|