develop_sky #3

Merged
liyi merged 43 commits from develop_sky into master_sky 2025-09-25 10:16:34 +08:00
Showing only changes of commit c41e1ebd9d - Show all commits

View File

@ -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 1Android 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 2Android 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 3iOS 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"
git push origin "$NEW_TAG" || echo "Tag $NEW_TAG already exists"