Files
Fig/.gitea/workflows/build.yml

156 lines
5.9 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: Release Build
on:
push:
tags: ["*"]
workflow_dispatch:
inputs:
version:
description: "版本号 (例如: v1.0.0)"
required: true
default: "dev-build"
jobs:
build-linux-x64:
runs-on: ubuntu
container:
image: git.fig-lang.cn/puqiar/fig-ci:base-latest
options: --network=host
steps:
- name: 验证构建环境
run: |
echo "=== 环境验证开始 ==="
xmake --version
clang++ --version | head -1
echo "=== 环境验证通过 ==="
- name: 检出代码
run: |
git clone https://git.fig-lang.cn/${{ github.repository }} .
git checkout ${{ github.ref }}
- name: 设置版本
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
VERSION="${{ inputs.version }}"
else
VERSION="${GITHUB_REF#refs/tags/}"
fi
echo "构建版本: $VERSION"
echo "VERSION=$VERSION" >> $GITHUB_ENV
- name: 构建项目 (Linux)
run: |
echo "开始构建Linux版本..."
xmake f -p linux -a x86_64 -m release -y
xmake build -j$(nproc)
echo "Linux构建成功。"
- name: 打包Linux发布文件
run: |
PACKAGE_NAME="Fig-${{ env.VERSION }}-linux-x86_64"
mkdir -p "${PACKAGE_NAME}"
cp build/linux/x86_64/release/Fig "${PACKAGE_NAME}/"
if [ -d "src/Module/Library" ]; then
cp -r src/Module/Library "${PACKAGE_NAME}/"
echo "已包含Library目录。"
fi
tar -czf "${PACKAGE_NAME}.tar.gz" "${PACKAGE_NAME}"
sha256sum "${PACKAGE_NAME}.tar.gz" > "${PACKAGE_NAME}.sha256"
echo "Linux打包完成: ${PACKAGE_NAME}.tar.gz"
- name: 发布Linux版本到Gitea
env:
GITEA_TOKEN: ${{ secrets.CI_TOKEN }}
run: |
VERSION="${{ env.VERSION }}"
API="https://git.fig-lang.cn/api/v1/repos/${{ github.repository }}"
echo "正在为Linux版本创建/更新发布 $VERSION ..."
# 创建发布 (如果已存在,忽略错误)
curl -sS -X POST -H "Authorization: token $GITEA_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"tag_name\":\"$VERSION\",\"name\":\"Fig $VERSION\",\"draft\":false,\"prerelease\":false}" \
"$API/releases" 2>/dev/null || echo "发布已存在,继续上传..."
curl -sS -X POST -H "Authorization: token $GITEA_TOKEN" \
-H "Content-Type: application/octet-stream" \
--data-binary @Fig-$VERSION-linux-x86_64.tar.gz \
"$API/releases/$VERSION/assets?name=Fig-$VERSION-linux-x86_64.tar.gz"
curl -sS -X POST -H "Authorization: token $GITEA_TOKEN" \
-H "Content-Type: text/plain" \
--data-binary @Fig-$VERSION-linux-x86_64.sha256 \
"$API/releases/$VERSION/assets?name=Fig-$VERSION-linux-x86_64.sha256"
echo "✅ Linux版本发布完成"
build-windows-x64:
# 关键:指定运行在带有 windows 标签的 Runner 上
runs-on: windows
# 移除 container 配置,因为将在宿主机直接运行
# container: ... # 删除这整个 container 部分
steps:
- name: 检出代码
run: |
git clone https://git.fig-lang.cn/${{ github.repository }} .
git checkout ${{ github.ref }}
- name: 设置版本
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
VERSION="${{ inputs.version }}"
else
VERSION="${GITHUB_REF#refs/tags/}"
fi
echo "VERSION=$VERSION" >> $env:GITHUB_ENV
echo "Windows构建版本: $VERSION"
- name: 安装 xmake (Windows)
run: |
# 这里可以是你预先准备好的离线包或从你的Gitea下载
# 例如,如果你已将 xmake Windows 版放在仓库中
# 或者使用简单的网络下载确保Runner能访问
curl -fsSL https://xmake.io/shget.text -o xmake.ps1
powershell -ExecutionPolicy Bypass -File xmake.ps1
- name: 构建项目 (Windows Native)
run: |
xmake f -p windows -a x86_64 -m release -y
xmake build -j${env:NUMBER_OF_PROCESSORS}
- name: 打包Windows发布文件
run: |
$VERSION = $env:VERSION
$PACKAGE_NAME = "Fig-${VERSION}-windows-x86_64"
New-Item -ItemType Directory -Force -Path $PACKAGE_NAME
Copy-Item build\windows\x86_64\release\Fig.exe $PACKAGE_NAME\
if (Test-Path "src\Module\Library") {
Copy-Item -Recurse src\Module\Library $PACKAGE_NAME\
}
Compress-Archive -Path $PACKAGE_NAME -DestinationPath "${PACKAGE_NAME}.zip"
Get-FileHash "${PACKAGE_NAME}.zip" -Algorithm SHA256 | Out-File "${PACKAGE_NAME}.sha256"
echo "Windows打包完成."
- name: 发布Windows版本到Gitea
env:
GITEA_TOKEN: ${{ secrets.CI_TOKEN }}
run: |
VERSION="${{ env.VERSION }}"
API="https://git.fig-lang.cn/api/v1/repos/${{ github.repository }}"
echo "正在上传Windows版本到发布 $VERSION ..."
# 直接上传到同一个ReleaseRelease已由Linux任务创建
curl -sS -X POST -H "Authorization: token $GITEA_TOKEN" \
-H "Content-Type: application/octet-stream" \
--data-binary @Fig-$VERSION-windows-x86_64.zip \
"$API/releases/$VERSION/assets?name=Fig-$VERSION-windows-x86_64.zip"
curl -sS -X POST -H "Authorization: token $GITEA_TOKEN" \
-H "Content-Type: text/plain" \
--data-binary @Fig-$VERSION-windows-x86_64.sha256 \
"$API/releases/$VERSION/assets?name=Fig-$VERSION-windows-x86_64.sha256"
echo "✅ Windows版本发布完成"