diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 7b32cf5a..c99a34c6 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -10,7 +10,7 @@ jobs: build: strategy: matrix: - os: [windows-latest, ubuntu-latest, macos-15, macos-latest] + os: [windows-latest, windows-11-arm, ubuntu-latest, macos-15, macos-latest] runs-on: ${{ matrix.os }} # 注意:GitHub Secrets 不会“自动变成环境变量”。 # 必须在 workflow 里显式把 secrets.EXTRA_LDFLAGS 映射到 env.EXTRA_LDFLAGS,make 才能继承到。 @@ -24,6 +24,10 @@ jobs: SHA256_X64_SETUP_EXE: ${{ env.SHA256_X64_SETUP_EXE }} MD5_X64_SETUP_EXE: ${{ env.MD5_X64_SETUP_EXE }} # ----------------------------------------------------------------------------------------arm64 + INSTALLER_NAME_ARM64_SETUP_EXE: ${{ env.INSTALLER_NAME_ARM64_SETUP_EXE }} + INSTALLER_NAME_ARM64_ZIP: ${{ env.INSTALLER_NAME_ARM64_ZIP }} + SHA256_ARM64_SETUP_EXE: ${{ env.SHA256_ARM64_SETUP_EXE }} + MD5_ARM64_SETUP_EXE: ${{ env.MD5_ARM64_SETUP_EXE }} # endregion # -------------------Windows end @@ -73,7 +77,7 @@ jobs: - name: Install Node.js uses: actions/setup-node@v4 # 安装nodejs with: - node-version: "18" # 指定nodejs 版本 + node-version: "20" # 指定nodejs 版本 - name: Install Quasar CLI run: npm install -g @quasar/cli # 安装quasar/cli @@ -135,11 +139,50 @@ jobs: # ------------------------------------------------------///////////////////// - # - name: Build Application (Windows arm64) + - name: Install cgo toolchain (Windows arm64) + if: matrix.os == 'windows-11-arm' + shell: bash + run: | + choco install zig -y - # - name: Find the generated installer (Windows arm64) + - name: Build Application (Windows arm64) + if: matrix.os == 'windows-11-arm' + shell: bash + run: | + cd sdk + export GOOS=windows + export GOARCH=arm64 + export CGO_ENABLED=1 + export CC="zig cc -target aarch64-windows-gnu" + export CXX="zig c++ -target aarch64-windows-gnu" + make win - # - name: Calculate File Hashes (Windows arm64) + - name: Find the generated installer (Windows arm64) + if: matrix.os == 'windows-11-arm' + working-directory: frontend/dist/electron/Packaged + shell: bash + run: | + INSTALLER_NAME_ARM64_SETUP_EXE=$(basename $(find -name 'KeyTone-*-win*exe')) + if [ "$INSTALLER_NAME_ARM64_SETUP_EXE" != "$(echo $INSTALLER_NAME_ARM64_SETUP_EXE | sed 's/win[^.]*\./win-arm64./')" ]; then + mv -f $INSTALLER_NAME_ARM64_SETUP_EXE $(echo $INSTALLER_NAME_ARM64_SETUP_EXE | sed 's/win[^.]*\./win-arm64./') + INSTALLER_NAME_ARM64_SETUP_EXE=$(echo $INSTALLER_NAME_ARM64_SETUP_EXE | sed 's/win[^.]*\./win-arm64./') + fi + echo "INSTALLER_NAME_ARM64_SETUP_EXE=$INSTALLER_NAME_ARM64_SETUP_EXE" >> $GITHUB_ENV + + INSTALLER_NAME_NO_EXE=$(echo $INSTALLER_NAME_ARM64_SETUP_EXE | sed 's/\.exe$//') + INSTALLER_NAME_ARM64_ZIP=$(echo ${INSTALLER_NAME_NO_EXE}_exe.zip) + echo "INSTALLER_NAME_ARM64_ZIP=$INSTALLER_NAME_ARM64_ZIP" >> $GITHUB_ENV + choco install zip -y + zip -j -9 ${INSTALLER_NAME_ARM64_ZIP} ${INSTALLER_NAME_ARM64_SETUP_EXE} + + - name: Calculate File Hashes (Windows arm64) + if: matrix.os == 'windows-11-arm' + shell: bash + run: | + SHA256_ARM64_SETUP_EXE=$(sha256sum frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_ARM64_SETUP_EXE }} | awk '{print $1}') + MD5_ARM64_SETUP_EXE=$(md5sum frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_ARM64_SETUP_EXE }} | awk '{print $1}') + echo "SHA256_ARM64_SETUP_EXE=$SHA256_ARM64_SETUP_EXE" >> $GITHUB_ENV + echo "MD5_ARM64_SETUP_EXE=$MD5_ARM64_SETUP_EXE" >> $GITHUB_ENV # endregion ################################################# Win end ###################################################### @@ -293,6 +336,8 @@ jobs: path: | frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_X64_SETUP_EXE }} frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_X64_ZIP }} + frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_ARM64_SETUP_EXE }} + frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_ARM64_ZIP }} release: runs-on: ubuntu-latest @@ -329,6 +374,10 @@ jobs: * `${{ needs.build.outputs.SHA256_X64_SETUP_EXE }}` + `${{ needs.build.outputs.INSTALLER_NAME_ARM64_SETUP_EXE }}` is: + + * `${{ needs.build.outputs.SHA256_ARM64_SETUP_EXE }}` + `${{ needs.build.outputs.INSTALLER_NAME_X64_TARGZ }}` is: * `${{ needs.build.outputs.SHA256_X64_TARGZ }}` @@ -355,6 +404,10 @@ jobs: * `${{ needs.build.outputs.MD5_X64_SETUP_EXE }}` + `${{ needs.build.outputs.INSTALLER_NAME_ARM64_SETUP_EXE }}` is: + + * `${{ needs.build.outputs.MD5_ARM64_SETUP_EXE }}` + `${{ needs.build.outputs.INSTALLER_NAME_X64_TARGZ }}` is: * `${{ needs.build.outputs.MD5_X64_TARGZ }}` @@ -402,6 +455,26 @@ jobs: asset_name: ${{ needs.build.outputs.INSTALLER_NAME_X64_ZIP }} asset_content_type: application/zip # asset_content_type 的作用是指定上传文件的 MIME 类型。在这个例子中,它被设置为 application/zip,这是一种通用的压缩文件类型。这样做的目的是告诉 GitHub 这个文件的类型,以便在下载时正确处理它。 + - name: Upload Build Artifact to Release (Windows arm64) (SETUP_EXE) + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.PERSONAL_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: artifacts/${{ needs.build.outputs.INSTALLER_NAME_ARM64_SETUP_EXE }} + asset_name: ${{ needs.build.outputs.INSTALLER_NAME_ARM64_SETUP_EXE }} + asset_content_type: application/octet-stream + + - name: Upload Build Artifact ZIP to Release (Windows arm64) + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.PERSONAL_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: artifacts/${{ needs.build.outputs.INSTALLER_NAME_ARM64_ZIP }} + asset_name: ${{ needs.build.outputs.INSTALLER_NAME_ARM64_ZIP }} + asset_content_type: application/zip + # endregion # -------------------Windows end @@ -469,7 +542,8 @@ jobs: ######################################################################################################### build win # build_windows_x64: # runs-on: windows-latest # 指定虚拟机 - # build_windows_arm64: # TIPS: github actions 的官方运行器暂不提供arm架构下的, win和linux系统环境。 如有需要, 只能自定义运行器。 + # build_windows_arm64: + # runs-on: windows-11-arm # 指定虚拟机 ######################################################################################################### build linux # build_linux_x64: # runs-on: linux-latest # 指定虚拟机 diff --git a/README.md b/README.md index 77cdd8a2..5c8f0c82 100644 --- a/README.md +++ b/README.md @@ -119,7 +119,7 @@ You can obtain **KeyTone** through the following methods: The project requires the following development environment: * Go 1.24.5 -* Node.js 18.x +* Node.js 20.x * Quasar CLI ### Setup Steps on Windows diff --git a/README.zh-CN.md b/README.zh-CN.md index 98cffe0f..2858d84d 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -121,7 +121,7 @@ KeyTone 赋予你自由创作的舞台,让每一次按键敲击都成为独一 本项目开发环境依赖如下: * Go 1.24.5 -* Node.js 18.x +* Node.js 20.x * Quasar CLI ### Windows 下环境搭建步骤 diff --git a/frontend/quasar.config.js b/frontend/quasar.config.js index 10b7c80d..f4e72822 100644 --- a/frontend/quasar.config.js +++ b/frontend/quasar.config.js @@ -268,7 +268,6 @@ module.exports = configure(function (/* ctx */) { 'nsis', // 普通安装包 { target: 'appx', - arch: ['x64'], }, ], },