Some checks failed
Flutter Build - Sky / 🧮 Determine Version (push) Failing after 1m30s
Flutter Build - Sky / 📦 Build APK (push) Has been skipped
Flutter Build - Sky / 📦 Build AAB (push) Has been skipped
Flutter Build - Sky / 🍎 Build iOS (push) Has been skipped
Flutter Build - Sky / 🏷️ Create Tag & Notify (push) Has been skipped
146 lines
4.7 KiB
YAML
146 lines
4.7 KiB
YAML
name: Flutter Build - Sky
|
||
|
||
on:
|
||
push:
|
||
branches:
|
||
- develop_sky
|
||
|
||
jobs:
|
||
# 第一个 job:只负责计算版本号(所有 job 依赖它)
|
||
determine-version:
|
||
name: 🧮 Determine Version
|
||
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:
|
||
- name: Checkout Code
|
||
uses: actions/checkout@v4
|
||
with:
|
||
fetch-depth: 0
|
||
|
||
- name: Determine Version
|
||
id: version
|
||
run: |
|
||
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v1.0.0_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"
|
||
|
||
MAJOR=$(echo $BASE_VERSION | cut -d'.' -f1 | sed 's/v//')
|
||
MINOR=$(echo $BASE_VERSION | cut -d'.' -f2)
|
||
PATCH=$(echo $BASE_VERSION | cut -d'.' -f3)
|
||
|
||
COMMIT_COUNT=$(git log --pretty=%B "${LAST_TAG}.." | grep -v '^$' | sort -u | wc -l | tr -d ' ')
|
||
NEW_PATCH=$((PATCH + COMMIT_COUNT))
|
||
NEXT_VERSION="v${MAJOR}.${MINOR}.${NEW_PATCH}"
|
||
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=$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
|
||
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: Build APK
|
||
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 }}
|
||
|
||
- 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 2:Android 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_dev.dart \
|
||
--build-number=${{ needs.determine-version.outputs.build_number }} \
|
||
--build-name=${{ needs.determine-version.outputs.next_version }}
|
||
|
||
- 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
|
||
|
||
# 并行 Job 3:iOS 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 sky \
|
||
-t lib/main_sky_dev.dart \
|
||
--build-number=${{ needs.determine-version.outputs.build_number }} \
|
||
--build-name=${{ needs.determine-version.outputs.next_version }}
|
||
|
||
- name: Upload IPA Artifact
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
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=${{ 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 $NEW_TAG already exists" |