Files
alibaba--mnn/.github/workflows/mnn_release.yml
T
2026-07-13 13:33:03 +08:00

233 lines
7.6 KiB
YAML

name: mnn_release
on:
push:
tags:
- '*'
- '!Android*'
workflow_dispatch:
jobs:
setup:
permissions:
contents: none
runs-on: ubuntu-latest
outputs:
VERSION: ${{ steps.get_version.outputs.VERSION }}
steps:
- name: get-version
id: get_version
run: |
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
# 提取标签版本号
echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
else
# 如果不是标签,则设置版本为 'dev'
echo "VERSION=dev" >> $GITHUB_OUTPUT
fi
linux-release:
needs: [setup]
runs-on: ubuntu-latest
env:
PACKAGENAME: mnn_${{ needs.setup.outputs.VERSION }}_linux_x64_cpu_opencl_vulkan
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: build
run: |
# j24 -> j4 avoid ld signal 9
sed -i "s/-j24/-j4/g" package_scripts/linux/build_lib.sh
# LLM (+ vision/audio) is already enabled in build_lib.sh by default.
./package_scripts/linux/build_lib.sh -o ${{ env.PACKAGENAME }}/lib -b opencl,vulkan -s -c
- name: package
run: |
rm -f ${{ env.PACKAGENAME }}.zip
zip -9 -y -r ${{ env.PACKAGENAME }}.zip ${{ env.PACKAGENAME }}
- name: upload-zip
uses: actions/upload-artifact@v4
with:
name: artifact-${{ env.PACKAGENAME }}
path: ${{ env.PACKAGENAME }}.zip
windows-release:
needs: [setup]
runs-on: windows-latest
env:
PACKAGENAME: mnn_${{ needs.setup.outputs.VERSION }}_windows_x64_cpu_opencl_vulkan_avx512
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: using msvc
uses: ilammy/msvc-dev-cmd@v1
- name: build
# LLM (+ vision/audio) + OpenCL + Vulkan + AVX512 are already enabled in
# build_lib_release.ps1 by default.
run: powershell .\package_scripts\win\build_lib_release.ps1 -path ${{ env.PACKAGENAME }}
- name: package
run: 7z a -r ${{ env.PACKAGENAME }}.zip ${{ env.PACKAGENAME }}
- name: upload-zip
uses: actions/upload-artifact@v4
with:
name: artifact-${{ env.PACKAGENAME }}
path: ${{ env.PACKAGENAME }}.zip
macos-release:
needs: [setup]
runs-on: macos-latest
env:
PACKAGENAME: mnn_${{ needs.setup.outputs.VERSION }}_macos_x64_arm82_cpu_opencl_metal
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: build
# Pass release-specific cmake args via `$*` (forwarded to cmake by buildFrameWork.sh).
# - MNN_BUILD_LLM=ON implicitly enables MNN_LOW_MEMORY + MNN_SUPPORT_TRANSFORMER_FUSE
# - MNN_BUILD_LLM_OMNI=ON implicitly enables MNN_BUILD_OPENCV / MNN_BUILD_AUDIO / MNN_IMGCODECS
# which in turn auto-define LLM_SUPPORT_VISION / LLM_SUPPORT_AUDIO inside the llm engine.
run: |
./package_scripts/mac/buildFrameWork.sh \
-DMNN_BUILD_LLM=ON \
-DMNN_BUILD_LLM_OMNI=ON
- name: package
run: |
rm -rf ${{ env.PACKAGENAME }}
mv MNN-MacOS-CPU-GPU ${{ env.PACKAGENAME }}
rm -f ${{ env.PACKAGENAME }}.zip
zip -9 -y -r ${{ env.PACKAGENAME }}.zip ${{ env.PACKAGENAME }}
- name: upload-zip
uses: actions/upload-artifact@v4
with:
name: artifact-${{ env.PACKAGENAME }}
path: ${{ env.PACKAGENAME }}.zip
android-release:
needs: [setup]
runs-on: ubuntu-latest
env:
PACKAGENAME: mnn_${{ needs.setup.outputs.VERSION }}_android_armv7_armv8_cpu_opencl_vulkan
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: setup-ndk
uses: nttld/setup-ndk@v1
id: setup-ndk
with:
# NDK r27+ is required for 16KB page-size support (Android 15+).
# r27 dropped support for API < 21, so 32-bit armv7 must use API >= 21.
ndk-version: r27c
add-to-path: false
- name: build
# build.sh already enables LLM + OpenCV + Vulkan + OpenCL + multi-modal by default.
# We inject the following extras via sed (script kept unchanged):
# * -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON -- enables 16KB page size
# (Google Play requirement starting Nov 2025)
# * Bump 32-bit armv7 API level android-14 -> android-21 (NDK r27 minimum)
env:
ANDROID_NDK: ${{ steps.setup-ndk.outputs.ndk-path }}
run: |
sed -i 's|^CMAKEARGS="\(.*\)"$|CMAKEARGS="\1 -DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON"|' \
package_scripts/android/build.sh
sed -i 's|android-14|android-21|g' package_scripts/android/build.sh
./package_scripts/android/build.sh -o ${{ env.PACKAGENAME }}
- name: package
run: |
rm -f ${{ env.PACKAGENAME }}.zip
zip -9 -y -r ${{ env.PACKAGENAME }}.zip ${{ env.PACKAGENAME }}
- name: upload-zip
uses: actions/upload-artifact@v4
with:
name: artifact-${{ env.PACKAGENAME }}
path: ${{ env.PACKAGENAME }}.zip
harmony-release:
needs: [setup]
runs-on: ubuntu-latest
env:
PACKAGENAME: mnn_${{ needs.setup.outputs.VERSION }}_harmony_arm64_cpu
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: Setup OpenHarmony SDK
id: setup-ohos
uses: openharmony-rs/setup-ohos-sdk@v1.0.0
with:
# OpenHarmony 5.0.0 == API 12. Bump when a newer SDK is well tested.
version: '5.0.0'
- name: build
# package_scripts/harmony/build.sh already enables LLM + multi-modal +
# ARM82 + SME2 + BF16. It reads $OHOS_SDK_NATIVE (set below) to locate
# the OHOS cmake toolchain file.
env:
OHOS_SDK_NATIVE: ${{ steps.setup-ohos.outputs.ohos_sdk_native }}
run: ./package_scripts/harmony/build.sh -o ${{ env.PACKAGENAME }}
- name: package
run: |
rm -f ${{ env.PACKAGENAME }}.zip
zip -9 -y -r ${{ env.PACKAGENAME }}.zip ${{ env.PACKAGENAME }}
- name: upload-zip
uses: actions/upload-artifact@v4
with:
name: artifact-${{ env.PACKAGENAME }}
path: ${{ env.PACKAGENAME }}.zip
ios-release:
needs: [setup]
runs-on: macos-latest
env:
PACKAGENAME: mnn_${{ needs.setup.outputs.VERSION }}_ios_armv82_cpu_metal
steps:
- uses: actions/checkout@v3
with:
submodules: true
- name: build
# Pass release-specific cmake args via `$*` (forwarded to cmake by buildiOS.sh).
# - MNN_BUILD_LLM=ON implicitly enables MNN_LOW_MEMORY + MNN_SUPPORT_TRANSFORMER_FUSE
# - MNN_BUILD_LLM_OMNI=ON implicitly enables MNN_BUILD_OPENCV / MNN_BUILD_AUDIO / MNN_IMGCODECS
# which in turn auto-define LLM_SUPPORT_VISION / LLM_SUPPORT_AUDIO inside the llm engine.
run: |
brew install coreutils
./package_scripts/ios/buildiOS.sh \
-DMNN_BUILD_LLM=ON \
-DMNN_BUILD_LLM_OMNI=ON
- name: package
run: |
rm -f ${{ env.PACKAGENAME }}.zip
zip -9 -y -r ${{ env.PACKAGENAME }}.zip MNN-iOS-CPU-GPU/Static/MNN.framework
- name: upload-zip
uses: actions/upload-artifact@v4
with:
name: artifact-${{ env.PACKAGENAME }}
path: ${{ env.PACKAGENAME }}.zip
upload-release:
name: upload_to_release
needs: [linux-release, windows-release, macos-release, android-release, ios-release, harmony-release]
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
pattern: artifact-*
path: assert
merge-multiple: true
- name: show file
run: ls assert
- uses: xresloader/upload-to-github-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
file: assert/*.zip
tags: true
draft: true