diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index ad10abd..e4aa208 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -5,71 +5,119 @@ on: workflow_dispatch: inputs: version: - description: '版本号' + description: '版本号 (如:v1.0.0)' required: true + default: 'dev-build' jobs: build: - runs-on: ubuntu + runs-on: ubuntu # 保持与你Runner匹配的标签 + container: + image: alpine:latest # 轻量且快速启动的基础镜像 steps: - - name: Checkout + - name: 检出代码 run: | - apt-get update && apt-get install -y git curl + apk add --no-cache git git clone https://git.fig-lang.cn/${{ github.repository }} . - git checkout ${{ github.ref }} - - - name: Install Dependencies + git checkout ${{ github.sha }} + + - name: 安装所有依赖 run: | - apt-get update - apt-get install -y curl wget gcc g++ make build-essential - - - name: Install xmake + # 更新源并一次性安装所有必要包 + apk update && apk upgrade + apk add --no-cache \ + curl \ + wget \ + gcc \ + g++ \ + make \ + cmake \ + automake \ + autoconf \ + libtool \ + linux-headers \ + musl-dev \ + git \ + zip \ + tar + + - name: 安装 xmake run: | - curl -fsSL https://xmake.io/shget.text | bash - echo "$HOME/.local/bin" >> $GITHUB_PATH - - - name: Get Version + wget -q https://xmake.io/shget.text -O install.sh + sh install.sh + echo "/root/.local/bin" >> $GITHUB_PATH + xmake --version + + - name: 确定版本号 run: | if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then - VERSION="${{ inputs.version }}" + echo "VERSION=${{ inputs.version }}" >> $GITHUB_ENV else - VERSION="${GITHUB_REF#refs/tags/}" + echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV fi - echo "VERSION=$VERSION" >> $GITHUB_ENV - - - name: Build + echo "构建版本: ${{ env.VERSION }}" + + - name: 构建项目 (Linux x86_64) run: | xmake f -p linux -a x86_64 -m release - xmake -j$(nproc) - - - name: Package + xmake build -v -j$(nproc) + + - name: 打包发布文件 run: | - apt-get install -y zip - mkdir -p Fig-${{ env.VERSION }}-linux-x86_64 - cp build/linux/x86_64/release/Fig Fig-${{ env.VERSION }}-linux-x86_64/ - cp -r src/Module/Library Fig-${{ env.VERSION }}-linux-x86_64/ - tar -czf Fig-${{ env.VERSION }}-linux-x86_64.tar.gz Fig-${{ env.VERSION }}-linux-x86_64 - sha256sum Fig-${{ env.VERSION }}-linux-x86_64.tar.gz > Fig-${{ env.VERSION }}-linux-x86_64.sha256 + # 创建带版本号的目录 + PACKAGE_DIR="Fig-${{ env.VERSION }}-linux-x86_64" + mkdir -p "${PACKAGE_DIR}" - - name: Upload to Release + # 复制可执行文件和库 + cp build/linux/x86_64/release/Fig "${PACKAGE_DIR}/" + cp -r src/Module/Library "${PACKAGE_DIR}/" 2>/dev/null || echo "Library目录不存在,跳过" + + # 创建压缩包 + tar -czf "${PACKAGE_DIR}.tar.gz" "${PACKAGE_DIR}" + + # 生成校验和 + sha256sum "${PACKAGE_DIR}.tar.gz" > "${PACKAGE_DIR}.sha256" + + # 列出生成的文件 + ls -lh Fig-*.tar.gz Fig-*.sha256 + + - name: 发布到Gitea env: - TOKEN: ${{ secrets.CI_TOKEN }} + GITEA_TOKEN: ${{ secrets.CI_TOKEN }} run: | - apt-get install -y curl - curl -X POST \ - -H "Authorization: token $TOKEN" \ - -H "Content-Type: application/json" \ - -d "{\"tag_name\":\"${{ env.VERSION }}\",\"name\":\"Fig ${{ env.VERSION }}\"}" \ - https://git.fig-lang.cn/api/v1/repos/${{ github.repository }}/releases || true + VERSION="${{ env.VERSION }}" + REPO_URL="https://git.fig-lang.cn/api/v1/repos/${{ github.repository }}" + echo "正在上传版本 $VERSION 的发布文件..." + + # 尝试创建发布 (如果已存在则忽略错误) curl -X POST \ - -H "Authorization: token $TOKEN" \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\":\"${VERSION}\",\"name\":\"Fig ${VERSION}\",\"draft\":false,\"prerelease\":false}" \ + "${REPO_URL}/releases" 2>/dev/null || echo "发布可能已存在,继续上传文件..." + + # 上传主程序包 + echo "上传 Fig-${VERSION}-linux-x86_64.tar.gz..." + curl -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/octet-stream" \ - --data-binary @Fig-${{ env.VERSION }}-linux-x86_64.tar.gz \ - "https://git.fig-lang.cn/api/v1/repos/${{ github.repository }}/releases/${{ env.VERSION }}/assets?name=Fig-${{ env.VERSION }}-linux-x86_64.tar.gz" - + --data-binary @Fig-${VERSION}-linux-x86_64.tar.gz \ + "${REPO_URL}/releases/${VERSION}/assets?name=Fig-${VERSION}-linux-x86_64.tar.gz" + + # 上传校验文件 + echo "上传 Fig-${VERSION}-linux-x86_64.sha256..." curl -X POST \ - -H "Authorization: token $TOKEN" \ + -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: text/plain" \ - --data-binary @Fig-${{ env.VERSION }}-linux-x86_64.sha256 \ - "https://git.fig-lang.cn/api/v1/repos/${{ github.repository }}/releases/${{ env.VERSION }}/assets?name=Fig-${{ env.VERSION }}-linux-x86_64.sha256" \ No newline at end of file + --data-binary @Fig-${VERSION}-linux-x86_64.sha256 \ + "${REPO_URL}/releases/${VERSION}/assets?name=Fig-${VERSION}-linux-x86_64.sha256" + + echo "发布完成!" + + - name: 输出完成信息 + run: | + echo "✅ 构建成功完成!" + echo "版本号: ${{ env.VERSION }}" + echo "文件: Fig-${{ env.VERSION }}-linux-x86_64.tar.gz" + echo "校验: Fig-${{ env.VERSION }}-linux-x86_64.sha256" \ No newline at end of file