2025-05-12 09:00:46 +08:00

171 lines
6.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 }}