Files
Fig/.gitea/workflows/build.yml
2026-01-03 16:25:56 +08:00

132 lines
5.0 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
# 关键修复1使用 host 网络模式,容器与宿主机共享网络栈
container:
image: ubuntu:22.04
options: --network=host
steps:
# 1. 安装基础工具
- name: 安装基础工具
run: |
apt-get update
apt-get install -y wget xz-utils tar git
echo "基础工具安装完成。"
# 2. 【关键修复】离线安装xmake (修正版)
- name: 安装xmake
run: |
echo "=== 开始安装 xmake ==="
# 尝试从系统仓库安装现在网络通了应该能访问Ubuntu官方源
if apt-get install -y xmake 2>/dev/null; then
echo "[成功] 通过系统包管理器安装 xmake。"
else
echo "系统仓库安装失败或版本太旧,尝试下载预编译包..."
# 使用一个已知的、具体的版本号
INSTALL_VERSION="v2.9.8"
PACKAGE_URL="https://github.com/xmake-io/xmake/releases/download/${INSTALL_VERSION}/xmake-${INSTALL_VERSION}.linux-x86_64.tar.gz"
echo "尝试从固定地址下载: ${PACKAGE_URL}"
# 设置超时和重试
if wget -q --timeout=30 --tries=3 -O xmake.tar.gz "${PACKAGE_URL}"; then
echo "[成功] 下载预编译包完成。"
tar -xzf xmake.tar.gz
cd xmake-* 2>/dev/null || cd xmake.* 2>/dev/null
./install
cd ..
else
echo "[错误] 预编译包下载失败。这通常意味着容器网络即使是host模式仍无法访问GitHub。"
echo "最后的保底方案:请将 'xmake-v2.9.8.linux-x86_64.tar.gz' 预先放置在仓库根目录,并取消下方注释。"
# 取消以下4行注释以启用完全离线的最终方案
# tar -xzf xmake-v2.9.8.linux-x86_64.tar.gz
# cd xmake-v2.9.8.linux-x86_64
# ./install
# cd ..
# 如果启用了上方离线方案,请将下一行的 exit 1 注释掉
exit 1
fi
fi
# 验证安装
echo "=== 验证 xmake 安装 ==="
/usr/local/bin/xmake --version || $HOME/.local/bin/xmake --version || xmake --version
echo "=== xmake 安装阶段完成 ==="
# 3. 检出代码
- name: 检出代码
run: |
git clone https://git.fig-lang.cn/${{ github.repository }} .
git checkout ${{ github.ref }}
# 4. 确定版本号
- 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
# 5. 构建项目
- name: 构建项目
run: |
# 确保在PATH中找到xmake
export PATH="$HOME/.local/bin:/usr/local/bin:$PATH"
xmake f -p linux -a x86_64 -m release -y
xmake build -j$(nproc)
echo "构建成功。"
# 6. 打包
- name: 打包发布文件
run: |
export PATH="$HOME/.local/bin:/usr/local/bin:$PATH"
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 "打包完成。"
# 7. 发布到Gitea
- name: 发布到Gitea
env:
GITEA_TOKEN: ${{ secrets.CI_TOKEN }}
run: |
VERSION="${{ env.VERSION }}"
API="https://git.fig-lang.cn/api/v1/repos/${{ github.repository }}"
curl -sS -X POST -H "Authorization: token $GITEA_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"tag_name\":\"$VERSION\",\"name\":\"Fig $VERSION\"}" \
"$API/releases" 2>/dev/null || true
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 "✅ 发布完成!"