Skip to content

ci(macos-x64): 增加macos-x64的运行器, 并做相关适配 #53

ci(macos-x64): 增加macos-x64的运行器, 并做相关适配

ci(macos-x64): 增加macos-x64的运行器, 并做相关适配 #53

Workflow file for this run

on:
push:
branches:
- cd-test
pull_request:
branches:
- cd-test
jobs:
build:
strategy:
matrix:
os: [windows-latest, ubuntu-latest, macos-13]
runs-on: ${{ matrix.os }}
outputs:
# region ------------Windows start
# ----------------------------------------------------------------------------------------X64
INSTALLER_NAME_X64_SETUP_EXE: ${{ env.INSTALLER_NAME_X64_SETUP_EXE }}
INSTALLER_NAME_X64_ZIP: ${{ env.INSTALLER_NAME_X64_ZIP }}
SHA256_X64_SETUP_EXE: ${{ env.SHA256_X64_SETUP_EXE }}
MD5_X64_SETUP_EXE: ${{ env.MD5_X64_SETUP_EXE }}
# ----------------------------------------------------------------------------------------arm64
# endregion
# -------------------Windows end
# region ------------Linux start
# ----------------------------------------------------------------------------------------X64
# ----------------------------------------------------------------------------------------X64_TARGZ
INSTALLER_NAME_X64_TARGZ: ${{ env.INSTALLER_NAME_X64_TARGZ }}
SHA256_X64_TARGZ: ${{ env.SHA256_X64_TARGZ }}
MD5_X64_TARGZ: ${{ env.MD5_X64_TARGZ }}
# ----------------------------------------------------------------------------------------X64_APPIMAGE
INSTALLER_NAME_X64_APPIMAGE: ${{ env.INSTALLER_NAME_X64_APPIMAGE }}
SHA256_X64_APPIMAGE: ${{ env.SHA256_X64_APPIMAGE }}
MD5_X64_APPIMAGE: ${{ env.MD5_X64_APPIMAGE }}
# ----------------------------------------------------------------------------------------X64_DEB
INSTALLER_NAME_X64_DEB: ${{ env.INSTALLER_NAME_X64_DEB }}
SHA256_X64_DEB: ${{ env.SHA256_X64_DEB }}
MD5_X64_DEB: ${{ env.MD5_X64_DEB }}
# ----------------------------------------------------------------------------------------arm64
# endregion
# -------------------Linux end
# region ------------MacOS start
# ----------------------------------------------------------------------------------------X64
# ----------------------------------------------------------------------------------------X64_dmg
INSTALLER_NAME_X64_DMG: ${{ env.INSTALLER_NAME_X64_DMG }}
SHA256_X64_DMG: ${{ env.SHA256_X64_DMG }}
MD5_X64_DMG: ${{ env.MD5_X64_DMG }}
# ----------------------------------------------------------------------------------------arm64
# ----------------------------------------------------------------------------------------arm64_dmg
INSTALLER_NAME_ARM64_DMG: ${{ env.INSTALLER_NAME_ARM64_DMG }}
SHA256_ARM64_DMG: ${{ env.SHA256_ARM64_DMG }}
MD5_ARM64_DMG: ${{ env.MD5_ARM64_DMG }}
# endregion
# -------------------MacOS end
steps:
- name: Checkout code
uses: actions/checkout@v4 # 将仓库代码复制到虚拟机文件系统中
- name: Set up Go
uses: actions/setup-go@v5 # 安装go依赖
with:
go-version: 1.22.0 # 指定go依赖版本
- name: Install Node.js
uses: actions/setup-node@v4 # 安装nodejs
with:
node-version: "16" # 指定nodejs 版本
- name: Install Quasar CLI
run: npm install -g @quasar/cli # 安装quasar/cli
- name: Install frontend dependencies
working-directory: frontend # 以项目根目录为起点,指定对应目录
run: npm install # 安装前端依赖
################################################# Win start ######################################################
# region
- name: Build Application (Windows x64)
if: matrix.os == 'windows-latest'
shell: bash # 我不喜欢powershell(即使是在windows下) # 这个指定, 应该会让我们使用git-bash。
run: | # 指定此run为多个命令依次执行
cd sdk
make win
- name: Find the generated installer (Windows x64)
if: matrix.os == 'windows-latest'
working-directory: frontend/dist/electron/Packaged
shell: bash # 由于我们下方要使用的find命令, powershell中没有(更重要的是, 我不喜欢powershell) # 这个指定, 应该会让我们使用git-bash。
run: |
# 由于find -name 'KeyTone-Setup-*-win.exe'得到的结果为./KeyTone-Setup-*-win.exe , 而我们不需要./ , 因此使用basename提取文件名
# 由于大部分人的计算机是x64架构的(现在x86的纯32位系统几乎没人用了, 因此我的应用只支持64位的机器), 所以默认不显示架构。(我们通过正则表达式来除掉这部分)(主要显示了3中形式太乱, 如amd64、x64、x86_64)
# * 这部分正则的原理是, 替换: 将 `从win末尾的任意字符开头至遇到第一个.后的所有内容` 使用`win.` 来替换。
# ----------------------------------------------------------------------------------------INSTALLER_NAME_X64_SETUP_EXE
INSTALLER_NAME_X64_SETUP_EXE=$(basename $(find -name 'KeyTone-*-win*exe'))
# ----------为避免出现amd64、x86_64、x64等多种x64的cpu架构表示方式, 我仅按x64为默认名来显示此类cpu架构名---start
# * 我们仅按x64为默认名来显示的话, 就存在其结果本身就是x64这个名称的情况, 那此时仍通过 mv 重命名就会发生报错了。
# * 因为, 在进行mv时, 遇到移动前后名称相同的情况, 是会报错的。
# * 所以, 我们为了不报错, 我们尝试通过`-f`来强制重命名来解决。(失败)<因为-f解决覆盖问题, 但无法处理此情况>
# * 最终, 借助shell中的判断语句来解决
if [ "$INSTALLER_NAME_X64_SETUP_EXE" != "$(echo $INSTALLER_NAME_X64_SETUP_EXE | sed 's/win[^.]*\./win-x64./')" ]; then
mv -f $INSTALLER_NAME_X64_SETUP_EXE $(echo $INSTALLER_NAME_X64_SETUP_EXE | sed 's/win[^.]*\./win-x64./')
INSTALLER_NAME_X64_SETUP_EXE=$(echo $INSTALLER_NAME_X64_SETUP_EXE | sed 's/win[^.]*\./win-x64./')
fi
# ------------为避免出现amd64、x86_64、x64等多种x64的cpu架构表示方式, 我仅按x64为默认名来显示此类cpu架构名---end
echo "INSTALLER_NAME_X64_SETUP_EXE=$INSTALLER_NAME_X64_SETUP_EXE" >> $GITHUB_ENV
# ---------------------------------------------------------------------------------------------------ZIP start
INSTALLER_NAME_NO_EXE=$(echo $INSTALLER_NAME_X64_SETUP_EXE | sed 's/\.exe$//')
# 定义好ZIP文件的文件名变量 `INSTALLER_NAME_X64_ZIP`
INSTALLER_NAME_X64_ZIP=$(echo ${INSTALLER_NAME_NO_EXE}_exe.zip)
# 上方定义必须有, 下方的语法仅是设置了 `>> $GITHUB_ENV` 而已, 并没有在当前步骤中定义变量。
# * 简单的说就是, 若缺失上方定义, 则本小节最后一步就会因找不到变量而执行失败。
echo "INSTALLER_NAME_X64_ZIP=$INSTALLER_NAME_X64_ZIP" >> $GITHUB_ENV
choco install zip -y
zip -j -9 ${INSTALLER_NAME_X64_ZIP} ${INSTALLER_NAME_X64_SETUP_EXE}
# -----------------------------------------------------------------------------------------------------ZIP end
- name: Calculate File Hashes (Windows x64)
if: matrix.os == 'windows-latest'
shell: bash
run: |
SHA256_X64_SETUP_EXE=$(sha256sum frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_X64_SETUP_EXE }} | awk '{print $1}')
MD5_X64_SETUP_EXE=$(md5sum frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_X64_SETUP_EXE }} | awk '{print $1}')
echo "SHA256_X64_SETUP_EXE=$SHA256_X64_SETUP_EXE" >> $GITHUB_ENV
echo "MD5_X64_SETUP_EXE=$MD5_X64_SETUP_EXE" >> $GITHUB_ENV
# ------------------------------------------------------/////////////////////
# - name: Build Application (Windows arm64)
# - name: Find the generated installer (Windows arm64)
# - name: Calculate File Hashes (Windows arm64)
# endregion
################################################# Win end ######################################################
############################################### Linux start ######################################################
# region
- name: Build Application (Linux x64)
if: matrix.os == 'ubuntu-latest'
shell: bash
run: | # 指定此run为多个命令依次执行
cd sdk
sudo apt-get update
sudo apt install gcc libc6-dev
sudo apt install libx11-dev xorg-dev libxtst-dev
sudo apt install xsel xclip
sudo apt install libpng++-dev
sudo apt install xcb libxcb-xkb-dev x11-xkb-utils libx11-xcb-dev libxkbcommon-x11-dev libxkbcommon-dev
sudo apt install libasound2-dev
make linux
- name: Find the generated installer (Linux x64)
if: matrix.os == 'ubuntu-latest'
working-directory: frontend/dist/electron/Packaged
shell: bash
run: |
# ----------------------------------------------------------------------------------------INSTALLER_NAME_X64_TARGZ
INSTALLER_NAME_X64_TARGZ=$(basename $(find -name 'KeyTone-*-linux*tar.gz'))
if [ "$INSTALLER_NAME_X64_TARGZ" != "$(echo $INSTALLER_NAME_X64_TARGZ | sed 's/linux[^.]*\./linux-x64./')" ]; then
mv -f $INSTALLER_NAME_X64_TARGZ $(echo $INSTALLER_NAME_X64_TARGZ | sed 's/linux[^.]*\./linux-x64./')
INSTALLER_NAME_X64_TARGZ=$(echo $INSTALLER_NAME_X64_TARGZ | sed 's/linux[^.]*\./linux-x64./')
fi
echo "INSTALLER_NAME_X64_TARGZ=$INSTALLER_NAME_X64_TARGZ" >> $GITHUB_ENV
# ----------------------------------------------------------------------------------------INSTALLER_NAME_X64_APPIMAGE
INSTALLER_NAME_X64_APPIMAGE=$(basename $(find -name 'KeyTone-*-linux*AppImage'))
if [ "$INSTALLER_NAME_X64_APPIMAGE" != "$(echo $INSTALLER_NAME_X64_APPIMAGE | sed 's/linux[^.]*\./linux-x64./')" ]; then
mv -f $INSTALLER_NAME_X64_APPIMAGE $(echo $INSTALLER_NAME_X64_APPIMAGE | sed 's/linux[^.]*\./linux-x64./')
INSTALLER_NAME_X64_APPIMAGE=$(echo $INSTALLER_NAME_X64_APPIMAGE | sed 's/linux[^.]*\./linux-x64./')
fi
echo "INSTALLER_NAME_X64_APPIMAGE=$INSTALLER_NAME_X64_APPIMAGE" >> $GITHUB_ENV
# ----------------------------------------------------------------------------------------INSTALLER_NAME_X64_DEB
INSTALLER_NAME_X64_DEB=$(basename $(find -name 'KeyTone-*-linux*deb'))
if [ "$INSTALLER_NAME_X64_DEB" != "$(echo $INSTALLER_NAME_X64_DEB | sed 's/linux[^.]*\./linux-x64./')" ]; then
mv -f $INSTALLER_NAME_X64_DEB $(echo $INSTALLER_NAME_X64_DEB | sed 's/linux[^.]*\./linux-x64./')
INSTALLER_NAME_X64_DEB=$(echo $INSTALLER_NAME_X64_DEB | sed 's/linux[^.]*\./linux-x64./')
fi
echo "INSTALLER_NAME_X64_DEB=$INSTALLER_NAME_X64_DEB" >> $GITHUB_ENV
- name: Calculate File Hashes (Linux x64)
if: matrix.os == 'ubuntu-latest'
shell: bash
run: |
# ----------------------------------------------------------------------------------------X64_TARGZ
SHA256_X64_TARGZ=$(sha256sum frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_X64_TARGZ }} | awk '{print $1}')
MD5_X64_TARGZ=$(md5sum frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_X64_TARGZ }} | awk '{print $1}')
echo "SHA256_X64_TARGZ=$SHA256_X64_TARGZ" >> $GITHUB_ENV
echo "MD5_X64_TARGZ=$MD5_X64_TARGZ" >> $GITHUB_ENV
# ----------------------------------------------------------------------------------------X64_APPIMAGE
SHA256_X64_APPIMAGE=$(sha256sum frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_X64_APPIMAGE }} | awk '{print $1}')
MD5_X64_APPIMAGE=$(md5sum frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_X64_APPIMAGE }} | awk '{print $1}')
echo "SHA256_X64_APPIMAGE=$SHA256_X64_APPIMAGE" >> $GITHUB_ENV
echo "MD5_X64_APPIMAGE=$MD5_X64_APPIMAGE" >> $GITHUB_ENV
# ----------------------------------------------------------------------------------------X64_DEB
SHA256_X64_DEB=$(sha256sum frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_X64_DEB }} | awk '{print $1}')
MD5_X64_DEB=$(md5sum frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_X64_DEB }} | awk '{print $1}')
echo "SHA256_X64_DEB=$SHA256_X64_DEB" >> $GITHUB_ENV
echo "MD5_X64_DEB=$MD5_X64_DEB" >> $GITHUB_ENV
# endregion
############################################### Linux end ######################################################
############################################### MacOS start ######################################################
# region
- name: Build Application (MacOS x64)
if: matrix.os == 'macos-13'
shell: bash
run: | # 指定此run为多个命令依次执行
cd sdk
xcode-select --install
make mac
- name: Find the generated installer (MacOS x64)
if: matrix.os == 'macos-13'
working-directory: frontend/dist/electron/Packaged
shell: bash
run: |
# ----------------------------------------------------------------------------------------INSTALLER_NAME_X64_DMG
INSTALLER_NAME_X64_DMG=$(basename $(find -name 'KeyTone-*-mac*dmg'))
if [ "$INSTALLER_NAME_X64_DMG" != "$(echo $INSTALLER_NAME_X64_DMG | sed 's/mac[^.]*\./mac-x64./')" ]; then
mv -f $INSTALLER_NAME_X64_DMG $(echo $INSTALLER_NAME_X64_DMG | sed 's/mac[^.]*\./mac-x64./')
INSTALLER_NAME_X64_DMG=$(echo $INSTALLER_NAME_X64_DMG | sed 's/mac[^.]*\./mac-x64./')
fi
echo "INSTALLER_NAME_X64_DMG=$INSTALLER_NAME_X64_DMG" >> $GITHUB_ENV
- name: Calculate File Hashes (MacOS x64)
if: matrix.os == 'macos-13'
shell: bash
run: |
SHA256_X64_DMG=$(sha256sum frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_X64_DMG }} | awk '{print $1}')
MD5_X64_DMG=$(md5sum frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_X64_DMG }} | awk '{print $1}')
echo "SHA256_X64_DMG=$SHA256_X64_DMG" >> $GITHUB_ENV
echo "MD5_X64_DMG=$MD5_X64_DMG" >> $GITHUB_ENV
# endregion
############################################### MacOS end ######################################################
- name: Upload Build Artifact (ALL)
# TIPS: Artifact 中, 通过手动点击, 下载的打包结果的名称(无论名称如何设置, 都会给你加载.zip后缀的, 这是其预期的行为)
# > 虽然单看大小并没有被压缩, 但确实是套了一层文件夹后的压缩格式, 而不是简单的仅更改了后缀名。可通过hash值验证:
# > * 此下载包的hash结果不符合校验值。
# > * 不进行解压, 仅通过手动删除掉.zip后缀的hash校验结果, 与改名前的原始下载包相同, 即此hash结果也不符合校验值。
# > * 对下载包进行解压, 解压结果中获得一个文件夹, 进入文件下后可看到的exe安装包, 对此exe安装包进行hash, 其结果符合hash校验值。
#
# TIPS: 但是通过actions/download-artifact@v3进行下载时, 不会出现像手动下载时那样的.zip后缀(因此我们无需在release作业的下载完成够的步骤中, 进行解压缩)。仍是可以直接通过hash值验证:
# * 在release中没有进行解压缩步骤的情况下, 下载结果直接是 .exe 的可执行安装程序, 对此安装包进行hash, 其结果符合hash校验值。
uses: actions/upload-artifact@v3
with:
name: INSTALLER_NAME_ALL
path: |
frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_X64_SETUP_EXE }}
frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_X64_ZIP }}
release:
runs-on: ubuntu-latest
needs: build # 我们release工作job的执行, 需要等待build的工作job执行结束。
steps:
- name: Checkout code
uses: actions/checkout@v4 # 将仓库代码复制到虚拟机文件系统中
- name: Download Build Artifact (ALL)
uses: actions/download-artifact@v3
with:
name: INSTALLER_NAME_ALL
- name: Create GitHub Release
id: create_release # id 项的作用是为这个步骤分配一个唯一的标识符。 使得你可以在后续的步骤中引用这个步骤的输出或状态(以step开头)。这样可以使工作流更加清晰和易于维护。
uses: actions/create-release@v1 # 安装用户自动创建release的脚本
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
with:
tag_name: ${{ github.ref }} # 选择此release的tag名称<准确来讲这是触发工作流的分支或标签的完整引用--即带前缀的`refs/heads/ 或 refs/tags/ 前缀`>(可以尝试手动创建一个release, 其界面上是有一个让你选择tag的选项框的)
release_name: Release ${{ github.ref_name }} # 这个是当前release的名称<这个并非像上面一样的完整引用--即不包括`refs/heads/ 或 refs/tags/ 前缀`>。(理论上github.ref_name的值: 如果当前actions是被push/tag触发的, 则会选择tag名; 若仅是push触发, 则会选择分支名)
draft: true # 此项为true, 表示发布的是仅自己可见的草稿(我们可以手动编辑检查后在手动发布)
prerelease: false # 此项若为true, 则会将release打上预发布标志
body: |
### Overview
### Security
##### The SHA256 hash sum
`${{ needs.build.outputs.INSTALLER_NAME_X64_SETUP_EXE }}` is:
* `${{ needs.build.outputs.SHA256_X64_SETUP_EXE }}`
`${{ needs.build.outputs.INSTALLER_NAME_X64_TARGZ }}` is:
* `${{ needs.build.outputs.SHA256_X64_TARGZ }}`
`${{ needs.build.outputs.INSTALLER_NAME_X64_APPIMAGE }}` is:
* `${{ needs.build.outputs.SHA256_X64_APPIMAGE }}`
`${{ needs.build.outputs.INSTALLER_NAME_X64_DEB }}` is:
* `${{ needs.build.outputs.SHA256_X64_DEB }}`
`${{ needs.build.outputs.INSTALLER_NAME_X64_DMG }}` is:
* `${{ needs.build.outputs.SHA256_X64_DMG }}`
##### The MD5 hash sum
`${{ needs.build.outputs.INSTALLER_NAME_X64_SETUP_EXE }}` is:
* `${{ needs.build.outputs.MD5_X64_SETUP_EXE }}`
`${{ needs.build.outputs.INSTALLER_NAME_X64_TARGZ }}` is:
* `${{ needs.build.outputs.MD5_X64_TARGZ }}`
`${{ needs.build.outputs.INSTALLER_NAME_X64_APPIMAGE }}` is:
* `${{ needs.build.outputs.MD5_X64_APPIMAGE }}`
`${{ needs.build.outputs.INSTALLER_NAME_X64_DEB }}` is:
* `${{ needs.build.outputs.MD5_X64_DEB }}`
`${{ needs.build.outputs.INSTALLER_NAME_X64_DMG }}` is:
* `${{ needs.build.outputs.MD5_X64_DMG }}`
### Changelogs
############################################ Upload Build Artifact to Release ########################### start
# region
# region ------------Windows start
- name: Upload Build Artifact to Release (Windows x64) (SETUP_EXE)
uses: actions/upload-release-asset@v1 # 安装用于上传最终打包结果到本次release的脚本
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }} # 这里就通过之前步骤的唯一id, 进行了进一步的操作(以将构建后的结果, 上传到此步骤的可供用户下载的地方)
asset_path: ./${{ needs.build.outputs.INSTALLER_NAME_X64_SETUP_EXE }}
asset_name: ${{ needs.build.outputs.INSTALLER_NAME_X64_SETUP_EXE }}
asset_content_type: application/octet-stream # asset_content_type 的作用是指定上传文件的 MIME 类型。在这个例子中,它被设置为 application/octet-stream,这是一种通用的二进制文件类型。这样做的目的是告诉 GitHub 这个文件的类型,以便在下载时正确处理它。
- name: Upload Build Artifact ZIP to Release (Windows x64)
uses: actions/upload-release-asset@v1 # 安装用于上传最终打包结果到本次release的脚本
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }} # 这里就通过之前步骤的唯一id, 进行了进一步的操作(以将构建后的结果, 上传到此步骤的可供用户下载的地方)
asset_path: ./${{ needs.build.outputs.INSTALLER_NAME_X64_ZIP }}
asset_name: ${{ needs.build.outputs.INSTALLER_NAME_X64_ZIP }}
asset_content_type: application/zip # asset_content_type 的作用是指定上传文件的 MIME 类型。在这个例子中,它被设置为 application/zip,这是一种通用的压缩文件类型。这样做的目的是告诉 GitHub 这个文件的类型,以便在下载时正确处理它。
# endregion
# -------------------Windows end
# region ------------Linux start
- name: Upload Build Artifact to Release (Linux x64) (TARGZ)
uses: actions/upload-release-asset@v1 # 安装用于上传最终打包结果到本次release的脚本
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./${{ needs.build.outputs.INSTALLER_NAME_X64_TARGZ }}
asset_name: ${{ needs.build.outputs.INSTALLER_NAME_X64_TARGZ }}
asset_content_type: application/gzip
- name: Upload Build Artifact to Release (Linux x64) (APPIMAGE)
uses: actions/upload-release-asset@v1 # 安装用于上传最终打包结果到本次release的脚本
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./${{ needs.build.outputs.INSTALLER_NAME_X64_APPIMAGE }}
asset_name: ${{ needs.build.outputs.INSTALLER_NAME_X64_APPIMAGE }}
asset_content_type: application/x-appimage
- name: Upload Build Artifact to Release (Linux x64) (DEB)
uses: actions/upload-release-asset@v1 # 安装用于上传最终打包结果到本次release的脚本
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./${{ needs.build.outputs.INSTALLER_NAME_X64_DEB }}
asset_name: ${{ needs.build.outputs.INSTALLER_NAME_X64_DEB }}
asset_content_type: application/x-debian-package
# endregion
# -------------------Linux end
# region ------------MacOS start
- name: Upload Build Artifact to Release (MacOS x64) (DMG)
uses: actions/upload-release-asset@v1 # 安装用于上传最终打包结果到本次release的脚本
env:
GITHUB_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./${{ needs.build.outputs.INSTALLER_NAME_X64_DMG }}
asset_name: ${{ needs.build.outputs.INSTALLER_NAME_X64_DMG }}
asset_content_type: application/gzip
# endregion
# -------------------MacOS end
# endregion
############################################ Upload Build Artifact to Release ############################# end
######################################################################################################### build win
# build_windows_x64:
# runs-on: windows-latest # 指定虚拟机
# build_windows_arm64: # TIPS: github actions 的官方运行器暂不提供arm架构下的, win和linux系统环境。 如有需要, 只能自定义运行器。
######################################################################################################### build linux
# build_linux_x64:
# runs-on: linux-latest # 指定虚拟机
# build_linux_arm64: # TIPS: github actions 的官方运行器暂不提供arm架构下的, win和linux系统环境。 如有需要, 只能自定义运行器。
######################################################################################################### build macos
# build_macos_x64:
# runs-on: macos-13 # 指定虚拟机
# build_macos_arm64:
# runs-on: macos-latest # 指定虚拟机 macos14
######################################################################################################### build macos