diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 4ce0d66..2ec8bf6 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -29,16 +29,22 @@ jobs: git clone https://git.fig-lang.cn/${{ github.repository }} . git checkout ${{ github.ref }} - - name: 设置版本 + - name: 设置版本和提交信息 run: | if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then VERSION="${{ inputs.version }}" else - VERSION="${GITHUB_REF#refs/tags/}" + VERSION="${{ github.ref_name }}" fi echo "构建版本: $VERSION" echo "VERSION=$VERSION" >> $GITHUB_ENV + # 拿提交消息 + COMMIT_MSG=$(git log -1 --pretty=%B) + echo "COMMIT_MSG<> $GITHUB_ENV + echo "$COMMIT_MSG" >> $GITHUB_ENV + echo "EOF" >> $GITHUB_ENV + - name: 构建项目 (Linux) run: | echo "开始构建Linux版本..." @@ -83,48 +89,74 @@ jobs: GITEA_TOKEN: ${{ secrets.CI_TOKEN }} run: | VERSION="${{ env.VERSION }}" + if [ -z "$VERSION" ]; then + VERSION="${{ github.ref_name }}" + fi + COMMIT_MSG="${{ env.COMMIT_MSG }}" API="https://git.fig-lang.cn/api/v1/repos/${{ github.repository }}" - echo "正在为Linux版本创建/更新发布 $VERSION ..." + echo "正在检查版本 $VERSION 的发布状态..." - RESPONSE=$(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 '{"id":0}') + # 准备 JSON 数据 + VERSION="$VERSION" COMMIT_MSG="$COMMIT_MSG" python3 -c "import json, os; print(json.dumps({'tag_name': os.environ.get('VERSION', ''), 'name': 'Fig ' + os.environ.get('VERSION', ''), 'body': os.environ.get('COMMIT_MSG', ''), 'draft': False, 'prerelease': False}))" > release_body.json - RELEASE_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d':' -f2) + # 1. 尝试获取已有发布 + RESPONSE_TAG=$(curl -sS -H "Authorization: token $GITEA_TOKEN" "$API/releases/tags/$VERSION" 2>/dev/null || echo '{"id":0}') + RELEASE_ID=$(echo "$RESPONSE_TAG" | grep -o '"id":[0-9]*' | head -1 | cut -d':' -f2) - if [ -z "$RELEASE_ID" ] || [ "$RELEASE_ID" = "0" ]; then - echo "尝试通过标签获取已有发布的ID..." - RELEASE_ID=$(curl -sS -H "Authorization: token $GITEA_TOKEN" \ - "$API/releases/tags/$VERSION" | grep -o '"id":[0-9]*' | head -1 | cut -d':' -f2) + if [ -n "$RELEASE_ID" ] && [ "$RELEASE_ID" != "0" ]; then + echo "✅ 找到已有发布 (ID: $RELEASE_ID),正在更新说明..." + curl -sS -X PATCH -H "Authorization: token $GITEA_TOKEN" \ + -H "Content-Type: application/json" \ + -d @release_body.json \ + "$API/releases/$RELEASE_ID" > /dev/null + else + echo "未找到已有发布,准备创建新发布..." + RESPONSE=$(curl -sS -X POST -H "Authorization: token $GITEA_TOKEN" \ + -H "Content-Type: application/json" \ + -d @release_body.json \ + "$API/releases" 2>/dev/null || echo '{"id":0}') + + RELEASE_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d':' -f2) + + if [ -z "$RELEASE_ID" ] || [ "$RELEASE_ID" = "0" ]; then + # 再次尝试获取,防止并发冲突 + RESPONSE_TAG=$(curl -sS -H "Authorization: token $GITEA_TOKEN" "$API/releases/tags/$VERSION" 2>/dev/null || echo '{"id":0}') + RELEASE_ID=$(echo "$RESPONSE_TAG" | grep -o '"id":[0-9]*' | head -1 | cut -d':' -f2) + fi fi - if [ -z "$RELEASE_ID" ]; then - echo "错误:无法获取或创建发布 ID" + if [ -z "$RELEASE_ID" ] || [ "$RELEASE_ID" = "0" ]; then + echo "❌ 错误:无法获取或创建发布 ID" exit 1 fi - echo "使用发布 ID: $RELEASE_ID 进行上传" + echo "✅ 使用发布 ID: $RELEASE_ID 进行上传" - # 上传语言包 + # 上传资产 + PACKAGE_ZIP="Fig-$VERSION-linux-x86_64.tar.gz" + PACKAGE_SHA="Fig-$VERSION-linux-x86_64.sha256" + + echo "正在上传 $PACKAGE_ZIP ..." 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/$RELEASE_ID/assets?name=Fig-$VERSION-linux-x86_64.tar.gz" + --data-binary "@$PACKAGE_ZIP" \ + "$API/releases/$RELEASE_ID/assets?name=$PACKAGE_ZIP" > /dev/null + echo "正在上传 $PACKAGE_SHA ..." curl -sS -X POST -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: text/plain" \ - --data-binary @Fig-$VERSION-linux-x86_64.sha256 \ - "$API/releases/$RELEASE_ID/assets?name=Fig-$VERSION-linux-x86_64.sha256" + --data-binary "@$PACKAGE_SHA" \ + "$API/releases/$RELEASE_ID/assets?name=$PACKAGE_SHA" > /dev/null - # 🔧 新增:上传Linux安装器 - if [ -f "Installer/ConsoleInstaller/dist/linux/FigSetup-Linux" ]; then + # 🔧 上传Linux安装器 + INSTALLER="Installer/ConsoleInstaller/dist/linux/FigSetup-Linux" + if [ -f "$INSTALLER" ]; then echo "正在上传Linux安装器..." curl -sS -X POST -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/octet-stream" \ - --data-binary @Installer/ConsoleInstaller/dist/linux/FigSetup-Linux \ - "$API/releases/$RELEASE_ID/assets?name=FigSetup-Linux" + --data-binary "@$INSTALLER" \ + "$API/releases/$RELEASE_ID/assets?name=FigSetup-Linux" > /dev/null fi echo "✅ Linux版本发布完成!" @@ -151,9 +183,9 @@ jobs: run: | $env:Path = "C:\Program Files\Git\cmd;$env:Path" git clone https://git.fig-lang.cn/$env:GITHUB_REPOSITORY . - git checkout $env:GITHUB_REF + git checkout ${{ github.ref }} - - name: 设置版本 + - name: 设置版本和提交信息 run: | [Console]::OutputEncoding = [System.Text.Encoding]::UTF8 if ($env:GITHUB_EVENT_NAME -eq 'workflow_dispatch') { @@ -161,10 +193,16 @@ jobs: if (-not $VERSION) { $VERSION = $env:VERSION_INPUT } if (-not $VERSION) { $VERSION = "dev-build" } } else { - $VERSION = $env:GITHUB_REF_NAME + $VERSION = "${{ github.ref_name }}" } Write-Host "构建版本: $VERSION" - "VERSION=$VERSION" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 + + # 确保无 BOM 的 UTF8 + [System.IO.File]::AppendAllText($env:GITHUB_ENV, "VERSION=$VERSION`n") + + # 提交消息 + $COMMIT_MSG = git log -1 --pretty=%B + [System.IO.File]::AppendAllText($env:GITHUB_ENV, "COMMIT_MSG<