shanshanzhong deac0adabd
Some checks failed
Build Windows / 编译 libcore (Windows) (20.15.1) (push) Successful in 19m38s
Build Windows / build (push) Failing after 7h0m26s
feat(CI): 添加Flutter安装脚本并改进Windows构建流程
添加install_flutter_simple.bat脚本用于在Windows上自动安装Flutter
改进docker.yml中的Windows构建步骤,增加Flutter路径检测和powershell支持
2025-11-08 22:01:00 -08:00

249 lines
7.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

name: Build Windows
run-name: 构建Win流程
on:
push:
branches:
- main
- dev
pull_request:
branches:
- main
- dev
jobs:
# 先编译 libcore
build-libcore:
name: 编译 libcore (Windows)
runs-on: client-server
container:
image: node:20
strategy:
matrix:
# 只有node支持版本号别名
node: ['20.15.1']
steps:
- name: 📥 Checkout 代码
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: 🔧 设置 Go 环境
uses: actions/setup-go@v5
with:
go-version: '1.23'
cache: true
cache-dependency-path: libcore/go.sum
- name: 🔧 安装 MinGW
run: |
# 在 GitHub 托管 runner有 sudo与 act/自托管容器(无 sudo均可运行
if command -v sudo >/dev/null 2>&1; then
sudo apt-get update
sudo apt-get install -y mingw-w64
else
echo "sudo 不存在,按 root 用户直接执行 apt-get"
export DEBIAN_FRONTEND=noninteractive
apt-get update || apt update
apt-get install -y mingw-w64 || apt install -y mingw-w64
fi
- name: 📦 编译 libcore.dll
working-directory: libcore
run: |
echo "🚀 开始编译 Windows libcore..."
make windows-amd64
if [ -f "bin/libcore.dll" ] && [ -f "bin/HiddifyCli.exe" ]; then
echo "✅ Windows libcore 编译成功"
ls -lh bin/
else
echo "❌ Windows libcore 编译失败"
exit 1
fi
- name: 📤 上传 Windows libcore
uses: actions/upload-artifact@v3
with:
name: libcore-windows
path: |
libcore/bin/libcore.dll
libcore/bin/HiddifyCli.exe
libcore/bin/webui/**
retention-days: 7
# 构建 Windows 应用
build:
runs-on: windows-latest
needs: build-libcore
steps:
- name: 🔧 Add Git to PATH (Windows)
if: ${{ runner.os == 'Windows' }}
shell: powershell
run: |
$paths = @(
'C:\Program Files\Git\cmd',
'C:\Program Files\Git\bin',
'C:\Program Files (x86)\Git\cmd',
'C:\Program Files (x86)\Git\bin'
)
foreach ($p in $paths) {
if (Test-Path $p) {
Add-Content -Path $env:GITHUB_PATH -Value $p
$env:PATH = "$p;$env:PATH"
Write-Host ("Added to PATH: {0}" -f $p)
}
}
$candidates = @(
'C:\Program Files\Git\cmd\git.exe',
'C:\Program Files\Git\bin\git.exe',
'C:\Program Files (x86)\Git\cmd\git.exe',
'C:\Program Files (x86)\Git\bin\git.exe'
)
$found = $false
foreach ($g in $candidates) {
if (Test-Path $g) {
& $g --version
$found = $true
break
}
}
if (-not $found) {
Write-Host "Git executable not found in common locations; continuing."
}
- name: 📥 Checkout 代码
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: 📥 下载 libcore
uses: actions/download-artifact@v3
with:
name: libcore-windows
path: .
- name: 🔧 复制 libcore 文件到正确位置并重命名
shell: cmd
run: call copy_libcore.bat
- name: 🔍 Verify jq Installation (ACT)
shell: powershell
run: |
# Check if jq is available
$jqFound = $false
try {
$version = jq --version 2>&1
if ($version -match 'jq-[\d\.]+') {
Write-Host "jq is already installed: $version"
$jqFound = $true
}
} catch {
Write-Host "jq not installed or not in PATH"
}
if (-not $jqFound) {
Write-Host "Preparing to install jq..."
# Check if Chocolatey is available
$chocoFound = $false
try {
choco --version 2>&1 | Out-Null
$chocoFound = $true
} catch {}
if (-not $chocoFound) {
Write-Host "Installing Chocolatey..."
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
# Refresh PATH
$env:PATH = [System.Environment]::GetEnvironmentVariable('PATH', 'Machine') + ';' + [System.Environment]::GetEnvironmentVariable('PATH', 'User')
Write-Host "Chocolatey installed successfully"
}
Write-Host "Installing jq using Chocolatey..."
choco install jq -y
if ($LASTEXITCODE -eq 0) {
Write-Host "jq installed successfully"
# Verify again
$version = jq --version 2>&1
Write-Host "jq version: $version"
} else {
Write-Host "jq installation failed, exit code: $LASTEXITCODE"
exit 1
}
}
- name: Add jq to PATH
shell: powershell
run: |
$jqPath = "C:\ProgramData\chocolatey\bin"
if (Test-Path $jqPath) {
Add-Content -Path $env:GITHUB_PATH -Value $jqPath
$env:PATH = "$jqPath;$env:PATH"
Write-Host "Added jq path to GITHUB_PATH and current PATH"
} else {
Write-Host "jq installation path not found"
exit 1
}
- name: Enable Windows desktop
shell: powershell
run: |
$flutterPath = Get-Command flutter -ErrorAction SilentlyContinue
if (-not $flutterPath) {
Write-Host "Flutter not found, checking common locations..."
$commonPaths = @(
"C:\flutter\bin\flutter.exe",
"C:\tools\flutter\bin\flutter.exe",
"${env:USERPROFILE}\flutter\bin\flutter.exe"
)
$flutterFound = $false
foreach ($path in $commonPaths) {
if (Test-Path $path) {
Write-Host "Found Flutter at: $path"
$env:PATH = "$(Split-Path $path);$env:PATH"
$flutterFound = $true
break
}
}
if (-not $flutterFound) {
Write-Host "ERROR: Flutter not found. Please install Flutter first."
exit 1
}
}
flutter config --enable-windows-desktop
- name: Get dependencies
shell: powershell
run: |
flutter pub get
- name: Generate code
shell: powershell
run: |
dart run build_runner build --delete-conflicting-outputs
- name: Build Windows Debug
shell: powershell
run: |
flutter build windows
- name: Build Windows Release
shell: powershell
run: |
flutter build windows --release
- name: Upload Debug build artifacts
uses: actions/upload-artifact@v3
with:
name: windows-debug-build
path: build/windows/runner/Debug/
- name: Upload Release build artifacts
uses: actions/upload-artifact@v3
with:
name: windows-release-build
path: build/windows/runner/Release/