Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 80 additions & 6 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 才能继承到。
Expand All @@ -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

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 ######################################################
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 }}`
Expand All @@ -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 }}`
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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 # 指定虚拟机
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ KeyTone 赋予你自由创作的舞台,让每一次按键敲击都成为独一
本项目开发环境依赖如下:

* Go 1.24.5
* Node.js 18.x
* Node.js 20.x
* Quasar CLI

### Windows 下环境搭建步骤
Expand Down
1 change: 0 additions & 1 deletion frontend/quasar.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,6 @@ module.exports = configure(function (/* ctx */) {
'nsis', // 普通安装包
{
target: 'appx',
arch: ['x64'],
},
],
},
Expand Down
Loading