mirror of
https://git.fightbot.fun/hxuanyu/BingPaper.git
synced 2026-02-15 07:19:33 +08:00
新增编译脚本和 github 工作流配置文件
This commit is contained in:
53
scripts/build.bat
Normal file
53
scripts/build.bat
Normal file
@@ -0,0 +1,53 @@
|
||||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
set APP_NAME=BingPaper
|
||||
set OUTPUT_DIR=output
|
||||
|
||||
echo 开始构建 %APP_NAME% 多平台二进制文件...
|
||||
|
||||
if exist %OUTPUT_DIR% rd /s /q %OUTPUT_DIR%
|
||||
mkdir %OUTPUT_DIR%
|
||||
|
||||
set PLATFORMS=linux/amd64 linux/arm64 windows/amd64 windows/arm64 darwin/amd64 darwin/arm64
|
||||
|
||||
for %%p in (%PLATFORMS%) do (
|
||||
for /f "tokens=1,2 delims=/" %%a in ("%%p") do (
|
||||
set GOOS=%%a
|
||||
set GOARCH=%%b
|
||||
|
||||
set OUTPUT_NAME=%APP_NAME%-%%a-%%b
|
||||
set BINARY_NAME=!OUTPUT_NAME!
|
||||
if "%%a"=="windows" set BINARY_NAME=!OUTPUT_NAME!.exe
|
||||
|
||||
echo 正在编译 %%a/%%b...
|
||||
|
||||
set PACKAGE_DIR=%OUTPUT_DIR%\!OUTPUT_NAME!
|
||||
if not exist !PACKAGE_DIR! mkdir !PACKAGE_DIR!
|
||||
|
||||
env GOOS=%%a GOARCH=%%b CGO_ENABLED=0 go build -o !PACKAGE_DIR!\!BINARY_NAME! main.go
|
||||
|
||||
if !errorlevel! equ 0 (
|
||||
echo %%a/%%b 编译成功
|
||||
|
||||
xcopy /e /i /y web !PACKAGE_DIR!\web >nul
|
||||
copy /y config.example.yaml !PACKAGE_DIR!\ >nul
|
||||
copy /y README.md !PACKAGE_DIR!\ >nul
|
||||
|
||||
pushd %OUTPUT_DIR%
|
||||
tar -czf !OUTPUT_NAME!.tar.gz !OUTPUT_NAME!
|
||||
rd /s /q !OUTPUT_NAME!
|
||||
popd
|
||||
|
||||
echo %%a/%%b 打包完成: !OUTPUT_NAME!.tar.gz
|
||||
) else (
|
||||
echo %%a/%%b 编译失败
|
||||
if exist !PACKAGE_DIR! rd /s /q !PACKAGE_DIR!
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
echo ----------------------------------------
|
||||
echo 多平台打包完成!输出目录: %OUTPUT_DIR%
|
||||
dir /s /b %OUTPUT_DIR%
|
||||
pause
|
||||
67
scripts/build.ps1
Normal file
67
scripts/build.ps1
Normal file
@@ -0,0 +1,67 @@
|
||||
$AppName = "BingPaper"
|
||||
$OutputDir = "output"
|
||||
|
||||
Write-Host "开始构建 $AppName 多平台二进制文件..."
|
||||
|
||||
if (Test-Path $OutputDir) {
|
||||
Remove-Item -Recurse -Force $OutputDir
|
||||
}
|
||||
New-Item -ItemType Directory -Path $OutputDir | Out-Null
|
||||
|
||||
$Platforms = @(
|
||||
"linux/amd64",
|
||||
"linux/arm64",
|
||||
"windows/amd64",
|
||||
"windows/arm64",
|
||||
"darwin/amd64",
|
||||
"darwin/arm64"
|
||||
)
|
||||
|
||||
foreach ($Platform in $Platforms) {
|
||||
$parts = $Platform.Split("/")
|
||||
$OS = $parts[0]
|
||||
$Arch = $parts[1]
|
||||
|
||||
$OutputName = "$AppName-$OS-$Arch"
|
||||
$BinaryName = $OutputName
|
||||
if ($OS -eq "windows") {
|
||||
$BinaryName = "$OutputName.exe"
|
||||
}
|
||||
|
||||
Write-Host "正在编译 $OS/$Arch..."
|
||||
|
||||
$PackageDir = Join-Path $OutputDir $OutputName
|
||||
if (-not (Test-Path $PackageDir)) {
|
||||
New-Item -ItemType Directory -Path $PackageDir | Out-Null
|
||||
}
|
||||
|
||||
$env:GOOS = $OS
|
||||
$env:GOARCH = $Arch
|
||||
$env:CGO_ENABLED = "0"
|
||||
go build -o (Join-Path $PackageDir $BinaryName) main.go
|
||||
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Host " $OS/$Arch 编译成功"
|
||||
|
||||
Copy-Item -Recurse "web" $PackageDir\
|
||||
Copy-Item "config.example.yaml" $PackageDir\
|
||||
Copy-Item "README.md" $PackageDir\
|
||||
|
||||
$CurrentDir = Get-Location
|
||||
Set-Location $OutputDir
|
||||
tar -czf "${OutputName}.tar.gz" $OutputName
|
||||
Remove-Item -Recurse -Force $OutputName
|
||||
Set-Location $CurrentDir
|
||||
|
||||
Write-Host " $OS/$Arch 打包完成: ${OutputName}.tar.gz"
|
||||
} else {
|
||||
Write-Host " $OS/$Arch 编译失败"
|
||||
if (Test-Path $PackageDir) {
|
||||
Remove-Item -Recurse -Force $PackageDir
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Write-Host "----------------------------------------"
|
||||
Write-Host "多平台打包完成!输出目录: $OutputDir"
|
||||
Get-ChildItem -Recurse $OutputDir
|
||||
82
scripts/build.sh
Executable file
82
scripts/build.sh
Executable file
@@ -0,0 +1,82 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 获取脚本所在目录并切换到项目根目录
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
# 设置变量
|
||||
APP_NAME="BingPaper"
|
||||
OUTPUT_DIR="output"
|
||||
|
||||
# 定义目标平台
|
||||
PLATFORMS=(
|
||||
"linux/amd64"
|
||||
"linux/arm64"
|
||||
"windows/amd64"
|
||||
"windows/arm64"
|
||||
"darwin/amd64"
|
||||
"darwin/arm64"
|
||||
)
|
||||
|
||||
# 需要包含的额外文件/目录
|
||||
EXTRA_FILES=("web" "config.example.yaml" "README.md")
|
||||
|
||||
echo "开始构建 $APP_NAME 多平台二进制文件..."
|
||||
|
||||
# 清理 output 目录
|
||||
if [ -d "$OUTPUT_DIR" ]; then
|
||||
echo "正在清理 $OUTPUT_DIR 目录..."
|
||||
rm -rf "$OUTPUT_DIR"
|
||||
fi
|
||||
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
|
||||
# 循环编译各平台
|
||||
for PLATFORM in "${PLATFORMS[@]}"; do
|
||||
# 分离 OS 和 ARCH
|
||||
OS=$(echo $PLATFORM | cut -d'/' -f1)
|
||||
ARCH=$(echo $PLATFORM | cut -d'/' -f2)
|
||||
|
||||
# 设置输出名称
|
||||
OUTPUT_NAME="${APP_NAME}-${OS}-${ARCH}"
|
||||
if [ "$OS" = "windows" ]; then
|
||||
BINARY_NAME="${OUTPUT_NAME}.exe"
|
||||
else
|
||||
BINARY_NAME="${OUTPUT_NAME}"
|
||||
fi
|
||||
|
||||
echo "正在编译 ${OS}/${ARCH}..."
|
||||
|
||||
# 创建临时打包目录
|
||||
PACKAGE_DIR="${OUTPUT_DIR}/${OUTPUT_NAME}"
|
||||
mkdir -p "$PACKAGE_DIR"
|
||||
|
||||
# 现在已移除 CGO 依赖,使用 CGO_ENABLED=0 以支持轻松的跨平台编译
|
||||
GOOS=$OS GOARCH=$ARCH CGO_ENABLED=0 go build -o "${PACKAGE_DIR}/${BINARY_NAME}" main.go
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo " ${OS}/${ARCH} 编译成功"
|
||||
|
||||
# 复制额外文件
|
||||
for file in "${EXTRA_FILES[@]}"; do
|
||||
if [ -e "$file" ]; then
|
||||
cp -r "$file" "$PACKAGE_DIR/"
|
||||
fi
|
||||
done
|
||||
|
||||
# 压缩为 tar.gz
|
||||
tar -czf "${OUTPUT_DIR}/${OUTPUT_NAME}.tar.gz" -C "${OUTPUT_DIR}" "${OUTPUT_NAME}"
|
||||
|
||||
# 删除临时打包目录
|
||||
rm -rf "$PACKAGE_DIR"
|
||||
|
||||
echo " ${OS}/${ARCH} 打包完成: ${OUTPUT_NAME}.tar.gz"
|
||||
else
|
||||
echo " ${OS}/${ARCH} 编译失败"
|
||||
# 编译失败时清理临时目录
|
||||
rm -rf "$PACKAGE_DIR"
|
||||
fi
|
||||
done
|
||||
|
||||
echo "----------------------------------------"
|
||||
echo "多平台打包完成!输出目录: $OUTPUT_DIR"
|
||||
ls -R "$OUTPUT_DIR"
|
||||
44
scripts/tag.sh
Executable file
44
scripts/tag.sh
Executable file
@@ -0,0 +1,44 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 获取版本号
|
||||
TAG_NAME=$1
|
||||
|
||||
if [ -z "$TAG_NAME" ]; then
|
||||
echo "Usage: ./scripts/tag.sh <version>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 确保在 master 分支
|
||||
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
||||
if [ "$CURRENT_BRANCH" != "master" ]; then
|
||||
echo "Error: Must be on master branch to tag. Current branch: $CURRENT_BRANCH"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查是否有未提交的代码
|
||||
if [ -n "$(git status --porcelain)" ]; then
|
||||
echo "Error: You have uncommitted changes. Please commit or stash them first."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 拉取最新代码
|
||||
echo "Updating master branch..."
|
||||
git pull origin master
|
||||
|
||||
# 检查本地和远端是否一致
|
||||
LOCAL=$(git rev-parse @)
|
||||
REMOTE=$(git rev-parse @{u})
|
||||
|
||||
if [ "$LOCAL" != "$REMOTE" ]; then
|
||||
echo "Error: Local branch is not in sync with remote. Please push your changes first."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 创建并推送 tag
|
||||
echo "Creating tag $TAG_NAME..."
|
||||
git tag -f "$TAG_NAME"
|
||||
|
||||
echo "Pushing tag $TAG_NAME to remote..."
|
||||
git push origin "$TAG_NAME" -f
|
||||
|
||||
echo "Done! GitHub Action should be triggered shortly."
|
||||
Reference in New Issue
Block a user