171 lines
6.0 KiB
YAML
171 lines
6.0 KiB
YAML
name: Build and Release
|
||
|
||
on:
|
||
push:
|
||
tags:
|
||
- 'v*.*.*' # 仅在推送符合语义化版本的标签时触发
|
||
|
||
jobs:
|
||
build_android:
|
||
name: Build Android APK
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: Checkout code
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Set up JDK 17
|
||
uses: actions/setup-java@v4
|
||
with:
|
||
distribution: 'zulu'
|
||
java-version: '17'
|
||
cache: 'gradle' # 添加 Gradle 缓存
|
||
|
||
- name: Grant execute permission for gradlew
|
||
run: chmod +x gradlew
|
||
|
||
- name: Build Android APK
|
||
run: ./gradlew :androidApp:assembleRelease
|
||
|
||
- name: Upload Android APK artifact
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: android-apk
|
||
path: androidApp/build/outputs/apk/release/*.apk
|
||
retention-days: 1 # 保留1天即可,因为马上会被 release job 使用
|
||
|
||
build_desktop:
|
||
name: Build Desktop Artifacts
|
||
runs-on: ubuntu-latest # 对于 JAR 和 Linux 包 (如 .deb)
|
||
steps:
|
||
- name: Checkout code
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Set up JDK 17
|
||
uses: actions/setup-java@v4
|
||
with:
|
||
distribution: 'zulu'
|
||
java-version: '17'
|
||
cache: 'gradle'
|
||
|
||
- name: Grant execute permission for gradlew
|
||
run: chmod +x gradlew
|
||
|
||
# 注意: 根据你的 Compose Desktop 配置,任务名和输出路径可能不同
|
||
# packageUberJar 通常生成一个可执行的 JAR 文件
|
||
- name: Build Desktop UberJAR
|
||
run: ./gradlew :desktopApp:packageUberJar # 或其他打包任务如 packageDistribution
|
||
|
||
# 如果需要,可以添加其他平台的打包任务,例如 .deb
|
||
- name: Build Desktop DEB (Linux)
|
||
run: ./gradlew :desktopApp:packageDeb # 确保你的项目中配置了这个任务
|
||
|
||
- name: Upload Desktop artifacts
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: desktop-artifacts
|
||
# 根据实际生成的产物调整路径
|
||
path: |
|
||
desktopApp/build/compose/jars/*.jar
|
||
desktopApp/build/compose/binaries/main/deb/*.deb
|
||
# desktopApp/build/compose/distributions/*.* # 如果使用 packageDistribution
|
||
retention-days: 1
|
||
|
||
build_ios:
|
||
name: Build iOS Framework
|
||
runs-on: macos-latest # iOS 构建需要 macOS 环境
|
||
steps:
|
||
- name: Checkout code
|
||
uses: actions/checkout@v4
|
||
|
||
# KMM 项目的 iOS 构建通常也需要 JDK 来运行 Gradle
|
||
- name: Set up JDK 17
|
||
uses: actions/setup-java@v4
|
||
with:
|
||
distribution: 'zulu'
|
||
java-version: '17'
|
||
cache: 'gradle'
|
||
|
||
- name: Grant execute permission for gradlew
|
||
run: chmod +x gradlew
|
||
|
||
# (可选) 如果你需要特定版本的 Xcode
|
||
# - name: Select Xcode version
|
||
# run: sudo xcode-select -s /Applications/Xcode_15.3.app # 根据需要调整 Xcode 版本
|
||
|
||
# 重点: 确保这是你 KMM 项目中生成 XCFramework 的正确模块和任务名
|
||
# 通常是 :shared:assembleReleaseXCFramework 或 :<your-shared-module-name>:assembleReleaseXCFramework
|
||
# 如果你的 iOS 框架不是通过 KMM 共享模块生成的,而是 iosApp 直接产出,请调整
|
||
- name: Build iOS XCFramework
|
||
run: ./gradlew :shared:assembleReleaseXCFramework # <--- ***请确认此任务名和模块名***
|
||
|
||
- name: Prepare XCFramework for upload (Zip it)
|
||
# XCFramework 是一个目录,最好压缩后再上传
|
||
# 路径也需要根据你的模块名调整
|
||
run: |
|
||
FRAMEWORK_PATH="shared/build/XCFrameworks/release/" # <--- ***请确认此路径***
|
||
FRAMEWORK_NAME=$(ls $FRAMEWORK_PATH | grep .xcframework)
|
||
echo "Framework Name: $FRAMEWORK_NAME"
|
||
ditto -c -k --sequesterRsrc --keepParent "$FRAMEWORK_PATH/$FRAMEWORK_NAME" "release-framework.zip"
|
||
# 如果你不是使用 :shared 模块,而是 :iosApp,路径可能类似:
|
||
# run: |
|
||
# FRAMEWORK_PATH="iosApp/build/Products/Release-iphoneos/"
|
||
# FRAMEWORK_NAME=$(ls $FRAMEWORK_PATH | grep .framework) # 注意这可能是 .framework 而不是 .xcframework
|
||
# ditto -c -k --sequesterRsrc --keepParent "$FRAMEWORK_PATH/$FRAMEWORK_NAME" "release-framework.zip"
|
||
|
||
|
||
- name: Upload iOS Framework artifact
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: ios-framework
|
||
path: release-framework.zip # 上传压缩后的文件
|
||
retention-days: 1
|
||
|
||
create_release:
|
||
name: Create GitHub Release
|
||
runs-on: ubuntu-latest
|
||
needs: [build_android, build_desktop, build_ios] # 等待所有构建完成
|
||
permissions:
|
||
contents: write # 需要写权限来创建 Release 和上传附件
|
||
|
||
steps:
|
||
- name: Download Android APK
|
||
uses: actions/download-artifact@v4
|
||
with:
|
||
name: android-apk
|
||
path: artifacts/android
|
||
|
||
- name: Download Desktop artifacts
|
||
uses: actions/download-artifact@v4
|
||
with:
|
||
name: desktop-artifacts
|
||
path: artifacts/desktop
|
||
|
||
- name: Download iOS Framework
|
||
uses: actions/download-artifact@v4
|
||
with:
|
||
name: ios-framework
|
||
path: artifacts/ios
|
||
|
||
- name: Create Release and Upload Assets
|
||
uses: softprops/action-gh-release@v2
|
||
with:
|
||
tag_name: ${{ github.ref_name }}
|
||
name: Release ${{ github.ref_name }}
|
||
body: | # 你可以自定义 Release 的描述信息
|
||
Automated release for ${{ github.ref_name }}
|
||
|
||
**Artifacts:**
|
||
- Android APK
|
||
- Desktop (JAR, DEB)
|
||
- iOS Framework (XCFramework.zip)
|
||
|
||
*Built by GitHub Actions*
|
||
draft: false # 设置为 true 如果你想手动发布草稿
|
||
prerelease: false # 如果是预发布版本,设置为 true
|
||
files: | # 列出所有要上传的文件
|
||
artifacts/android/*.apk
|
||
artifacts/desktop/*.jar
|
||
artifacts/desktop/*.deb
|
||
artifacts/ios/*.zip
|
||
env:
|
||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |