ci(feat): 开始定制release的内容, 先尝试定制我们最终程序包的散列值内容。 #42
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build and Package Windows Application | |
on: | |
push: | |
branches: | |
- test-github-actions | |
pull_request: | |
branches: | |
- test-github-actions | |
jobs: | |
build: | |
runs-on: windows-latest # 指定虚拟机 | |
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 # 安装前端依赖 | |
- name: Build Windows Application | |
shell: bash # 我不喜欢powershell(即使是在windows下) # 这个指定, 应该会让我们使用git-bash。 | |
run: | # 指定此run为多个命令依次执行 | |
cd sdk | |
make all | |
- name: Find the generated installer && ZIP the generated installer | |
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提取文件名 | |
INSTALLER_NAME=$(basename $(find -name 'KeyTone-Setup-*-win.exe')) | |
echo "INSTALLER_NAME=$INSTALLER_NAME" >> $GITHUB_ENV | |
INSTALLER_NAME_NO_EXE=$(echo $INSTALLER_NAME | sed 's/\.exe$//') | |
echo "INSTALLER_NAME_NO_EXE=$INSTALLER_NAME_NO_EXE" >> $GITHUB_ENV | |
choco install zip -y | |
zip -j -9 ${INSTALLER_NAME_NO_EXE}_exe.zip ${INSTALLER_NAME} | |
- name: Upload Build Artifact | |
uses: actions/upload-artifact@v3 # 安装用于上传最终打包结果到执行完毕界面的脚本 | |
with: | |
name: ${{ env.INSTALLER_NAME_NO_EXT }}_exe # Artifact 中, 下载的打包结果的名称(无论名称如何设置, 都会给你加载.zip后缀的, 这是其预期的行为)<而且实质上只是套了一层壳, 并没有进行压缩--其实就算进行压缩了也小不到哪里其, 毕竟已经是压缩过的安装包文件了>。 | |
path: frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME }} | |
- name: Calculate File Hashes | |
id: hashes | |
run: | | |
# Calculate SHA256 and MD5 hash of the installer | |
SHA256=$(certutil -hashfile frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME }} SHA256 | findstr /v "CertUtil") | |
MD5=$(certutil -hashfile frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME }} MD5 | findstr /v "CertUtil") | |
# Save the hashes to environment variables | |
echo "SHA256=$SHA256" >> $GITHUB_ENV | |
echo "MD5=$MD5" >> $GITHUB_ENV | |
################################################################################################################## | |
# 开始构建Release | |
################################################################################################################## | |
- 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: | | |
### Security | |
The SHA256 hash sum for ${{ env.INSTALLER_NAME }} is: | |
* ${{ env.SHA256 }} | |
The MD5 hash sum for ${{ env.INSTALLER_NAME }} is: | |
* ${{ env.MD5 }} | |
- name: Upload Build Artifact to Release | |
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: frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME }} | |
asset_name: ${{ env.INSTALLER_NAME }} | |
asset_content_type: application/octet-stream # asset_content_type 的作用是指定上传文件的 MIME 类型。在这个例子中,它被设置为 application/octet-stream,这是一种通用的二进制文件类型。这样做的目的是告诉 GitHub 这个文件的类型,以便在下载时正确处理它。 | |
- name: Upload Build Artifact ZIP to Release | |
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: frontend/dist/electron/Packaged/${{ env.INSTALLER_NAME_NO_EXE}}_exe.zip | |
asset_name: ${{ env.INSTALLER_NAME_NO_EXE }}_exe.zip | |
asset_content_type: application/zip # asset_content_type 的作用是指定上传文件的 MIME 类型。在这个例子中,它被设置为 application/zip,这是一种通用的压缩文件类型。这样做的目的是告诉 GitHub 这个文件的类型,以便在下载时正确处理它。 |