测试构建
This commit is contained in:
@@ -0,0 +1,234 @@
|
|||||||
|
name: Build and Release
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main, beta ]
|
||||||
|
pull_request:
|
||||||
|
branches: [ main, beta ]
|
||||||
|
release:
|
||||||
|
types: [ published ]
|
||||||
|
|
||||||
|
env:
|
||||||
|
DOTNET_VERSION: '4.7.2'
|
||||||
|
PROJECT_PATH: 'Ink Canvas'
|
||||||
|
INNO_SETUP_VERSION: '6.2.2'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: windows-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- platform: 'x86'
|
||||||
|
runtime: 'win-x86'
|
||||||
|
configuration: 'Release'
|
||||||
|
arch_suffix: 'x86'
|
||||||
|
- platform: 'x64'
|
||||||
|
runtime: 'win-x64'
|
||||||
|
configuration: 'Release'
|
||||||
|
arch_suffix: 'x64'
|
||||||
|
- platform: 'ARM64'
|
||||||
|
runtime: 'win-arm64'
|
||||||
|
configuration: 'Release'
|
||||||
|
arch_suffix: 'arm64'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup .NET Framework
|
||||||
|
uses: actions/setup-dotnet@v4
|
||||||
|
with:
|
||||||
|
dotnet-version: '4.7.2'
|
||||||
|
|
||||||
|
- name: Get version from project
|
||||||
|
id: get_version
|
||||||
|
run: |
|
||||||
|
$version = (Get-Content "${{ env.PROJECT_PATH }}/InkCanvasForClass.csproj" | Select-String '<Version>(.*)</Version>' | ForEach-Object { $_.Matches[0].Groups[1].Value })
|
||||||
|
echo "version=$version" >> $env:GITHUB_OUTPUT
|
||||||
|
echo "Version: $version"
|
||||||
|
|
||||||
|
- name: Restore NuGet packages
|
||||||
|
run: nuget restore "${{ env.PROJECT_PATH }}/InkCanvasForClass.csproj"
|
||||||
|
|
||||||
|
- name: Build solution
|
||||||
|
run: msbuild "${{ env.PROJECT_PATH }}/InkCanvasForClass.csproj" /p:Configuration=${{ matrix.configuration }} /p:Platform=${{ matrix.platform }} /p:OutputPath=./publish/${{ matrix.platform }}/ /p:PublishUrl=./publish/${{ matrix.platform }}/
|
||||||
|
|
||||||
|
- name: Copy additional files
|
||||||
|
run: |
|
||||||
|
# 复制配置文件和其他必要文件
|
||||||
|
if (Test-Path "${{ env.PROJECT_PATH }}/InkCanvasForClass.exe.config") {
|
||||||
|
Copy-Item "${{ env.PROJECT_PATH }}/InkCanvasForClass.exe.config" -Destination "./publish/${{ matrix.platform }}/"
|
||||||
|
}
|
||||||
|
# 复制Resources文件夹
|
||||||
|
if (Test-Path "${{ env.PROJECT_PATH }}/Resources") {
|
||||||
|
Copy-Item "${{ env.PROJECT_PATH }}/Resources" -Destination "./publish/${{ matrix.platform }}/" -Recurse
|
||||||
|
}
|
||||||
|
# 复制其他必要文件
|
||||||
|
Copy-Item "${{ env.PROJECT_PATH }}/*.dll" -Destination "./publish/${{ matrix.platform }}/" -ErrorAction SilentlyContinue
|
||||||
|
Copy-Item "${{ env.PROJECT_PATH }}/*.json" -Destination "./publish/${{ matrix.platform }}/" -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
- name: Install Inno Setup
|
||||||
|
if: matrix.platform != 'ARM64'
|
||||||
|
run: |
|
||||||
|
$url = "https://files.jrsoftware.org/is/6/innosetup-${{ env.INNO_SETUP_VERSION }}.exe"
|
||||||
|
$output = "innosetup.exe"
|
||||||
|
Invoke-WebRequest -Uri $url -OutFile $output
|
||||||
|
Start-Process -FilePath $output -ArgumentList "/SILENT" -Wait
|
||||||
|
echo "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" >> $env:GITHUB_PATH
|
||||||
|
|
||||||
|
- name: Create Inno Setup script for current architecture
|
||||||
|
if: matrix.platform != 'ARM64'
|
||||||
|
run: |
|
||||||
|
$scriptContent = @"
|
||||||
|
; 自动生成的 Inno Setup 脚本
|
||||||
|
#define MyAppName "InkCanvasForClass CE"
|
||||||
|
#define MyAppVersion "${{ steps.get_version.outputs.version }}"
|
||||||
|
#define MyAppPublisher "CJK_mkp"
|
||||||
|
#define MyAppURL "https://inkcanvasforclass.github.io"
|
||||||
|
#define MyAppExeName "InkCanvasForClass.exe"
|
||||||
|
#define MyAppAssocName MyAppName + ""
|
||||||
|
#define MyAppAssocExt ".exe"
|
||||||
|
#define MyAppAssocKey StringChange(MyAppAssocName, " ", "") + MyAppAssocExt
|
||||||
|
|
||||||
|
[Setup]
|
||||||
|
AppId={{CA801226-FD02-4C78-BCF8-753B38E70CB3}
|
||||||
|
AppName={#MyAppName}
|
||||||
|
AppVersion={#MyAppVersion}
|
||||||
|
AppPublisher={#MyAppPublisher}
|
||||||
|
AppPublisherURL={#MyAppURL}
|
||||||
|
AppSupportURL={#MyAppURL}
|
||||||
|
AppUpdatesURL={#MyAppURL}
|
||||||
|
DefaultDirName={autopf}\{#MyAppName}
|
||||||
|
UninstallDisplayIcon={app}\{#MyAppExeName}
|
||||||
|
ChangesAssociations=yes
|
||||||
|
DefaultGroupName={#MyAppName}
|
||||||
|
AllowNoIcons=yes
|
||||||
|
PrivilegesRequiredOverridesAllowed=dialog
|
||||||
|
OutputDir=./installers
|
||||||
|
OutputBaseFilename=InkCanvasForClass-CE-${{ matrix.arch_suffix }}-Setup
|
||||||
|
SolidCompression=yes
|
||||||
|
WizardStyle=modern
|
||||||
|
ArchitecturesAllowed=x86 x64compatible
|
||||||
|
ArchitecturesInstallIn64BitMode=x64compatible
|
||||||
|
|
||||||
|
[Languages]
|
||||||
|
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
|
||||||
|
|
||||||
|
[Tasks]
|
||||||
|
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
||||||
|
|
||||||
|
[Files]
|
||||||
|
Source: "./publish/${{ matrix.platform }}\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
|
Source: "./publish/${{ matrix.platform }}\InkCanvasForClass.exe.config"; DestDir: "{app}"; Flags: ignoreversion
|
||||||
|
Source: "./publish/${{ matrix.platform }}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||||
|
|
||||||
|
[Registry]
|
||||||
|
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocExt}\OpenWithProgids"; ValueType: string; ValueName: "{#MyAppAssocKey}"; ValueData: ""; Flags: uninsdeletevalue
|
||||||
|
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}"; ValueType: string; ValueName: ""; ValueData: "{#MyAppAssocName}"; Flags: uninsdeletekey
|
||||||
|
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyAppExeName},0"
|
||||||
|
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocKey}\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""
|
||||||
|
|
||||||
|
[Icons]
|
||||||
|
Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
|
||||||
|
Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}"
|
||||||
|
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
|
||||||
|
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
|
||||||
|
|
||||||
|
[Run]
|
||||||
|
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
|
||||||
|
"@
|
||||||
|
$scriptContent | Out-File -FilePath "installer-${{ matrix.platform }}.iss" -Encoding UTF8
|
||||||
|
|
||||||
|
- name: Create installer using Inno Setup
|
||||||
|
if: matrix.platform != 'ARM64'
|
||||||
|
run: |
|
||||||
|
mkdir -p ./installers
|
||||||
|
iscc installer-${{ matrix.platform }}.iss
|
||||||
|
|
||||||
|
- name: Create ARM64 portable package
|
||||||
|
if: matrix.platform == 'ARM64'
|
||||||
|
run: |
|
||||||
|
Compress-Archive -Path "./publish/${{ matrix.platform }}/*" -DestinationPath "./installers/InkCanvasForClass-CE-arm64-Portable.zip"
|
||||||
|
|
||||||
|
- name: Upload artifacts
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: InkCanvas-${{ matrix.platform }}
|
||||||
|
path: |
|
||||||
|
./publish/${{ matrix.platform }}/
|
||||||
|
./installers/
|
||||||
|
retention-days: 30
|
||||||
|
|
||||||
|
create-release:
|
||||||
|
needs: build
|
||||||
|
runs-on: windows-latest
|
||||||
|
if: github.event_name == 'release'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Download all artifacts
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
path: ./artifacts
|
||||||
|
|
||||||
|
- name: Get version from project
|
||||||
|
id: get_version
|
||||||
|
run: |
|
||||||
|
$version = (Get-Content "${{ env.PROJECT_PATH }}/InkCanvasForClass.csproj" | Select-String '<Version>(.*)</Version>' | ForEach-Object { $_.Matches[0].Groups[1].Value })
|
||||||
|
echo "version=$version" >> $env:GITHUB_OUTPUT
|
||||||
|
echo "Version: $version"
|
||||||
|
|
||||||
|
- name: Prepare release files
|
||||||
|
run: |
|
||||||
|
# 创建发布目录
|
||||||
|
mkdir -p ./release
|
||||||
|
|
||||||
|
# 复制x86安装包
|
||||||
|
if (Test-Path "./artifacts/InkCanvas-x86/installers") {
|
||||||
|
Copy-Item "./artifacts/InkCanvas-x86/installers/*" -Destination "./release/" -Recurse
|
||||||
|
}
|
||||||
|
|
||||||
|
# 复制x64安装包
|
||||||
|
if (Test-Path "./artifacts/InkCanvas-x64/installers") {
|
||||||
|
Copy-Item "./artifacts/InkCanvas-x64/installers/*" -Destination "./release/" -Recurse
|
||||||
|
}
|
||||||
|
|
||||||
|
# 复制ARM64便携版
|
||||||
|
if (Test-Path "./artifacts/InkCanvas-ARM64/installers") {
|
||||||
|
Copy-Item "./artifacts/InkCanvas-ARM64/installers/*" -Destination "./release/" -Recurse
|
||||||
|
}
|
||||||
|
|
||||||
|
# 列出所有文件
|
||||||
|
Get-ChildItem -Path "./release" -Recurse | ForEach-Object { Write-Host "Release file: $($_.FullName)" }
|
||||||
|
|
||||||
|
- name: Create Release
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
with:
|
||||||
|
tag_name: v${{ steps.get_version.outputs.version }}
|
||||||
|
name: InkCanvasForClass CE v${{ steps.get_version.outputs.version }}
|
||||||
|
body: |
|
||||||
|
## InkCanvasForClass CE v${{ steps.get_version.outputs.version }}
|
||||||
|
|
||||||
|
### 下载
|
||||||
|
- **x86 (32位)**: 适用于32位Windows系统
|
||||||
|
- **x64 (64位)**: 适用于64位Windows系统
|
||||||
|
- **ARM64**: 适用于ARM64 Windows系统(便携版)
|
||||||
|
|
||||||
|
### 安装说明
|
||||||
|
1. 下载对应您系统架构的安装包
|
||||||
|
2. 运行安装程序并按照提示完成安装
|
||||||
|
3. ARM64版本为便携版,解压后直接运行即可
|
||||||
|
|
||||||
|
### 系统要求
|
||||||
|
- Windows 7/10/11
|
||||||
|
- .NET Framework 4.7.2 或更高版本
|
||||||
|
|
||||||
|
files: |
|
||||||
|
./release/*
|
||||||
|
draft: false
|
||||||
|
prerelease: false
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
Reference in New Issue
Block a user