diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index f306e2c..ba94785 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -68,17 +68,14 @@ jobs: echo "正在为Linux版本创建/更新发布 $VERSION ..." - # 1. 创建发布并捕获响应,提取 Release ID 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}') - # 从响应中提取 Release ID RELEASE_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d':' -f2) if [ -z "$RELEASE_ID" ] || [ "$RELEASE_ID" = "0" ]; then - # 如果创建失败或已存在,尝试通过标签获取 Release ID 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) @@ -91,7 +88,6 @@ jobs: echo "使用发布 ID: $RELEASE_ID 进行上传" - # 2. 使用 Release ID 上传资产 curl -sS -X POST -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/octet-stream" \ --data-binary @Fig-$VERSION-linux-x86_64.tar.gz \ @@ -138,103 +134,115 @@ jobs: Write-Host '警告: git 未找到' } " + - name: 检出代码 run: | + # 确保Git在PATH中 + $env:Path = "C:\Program Files\Git\cmd;$env:Path" git clone https://git.fig-lang.cn/${{ github.repository }} . git checkout ${{ github.ref }} - name: 设置版本 run: | - if ("${{ github.event_name }}" -eq "workflow_dispatch") { - $VERSION = "${{ inputs.version }}" - } else { - $VERSION = "${{ github.ref }}".Replace("refs/tags/", "") - } - echo "VERSION=$VERSION" | Out-File -FilePath $env:GITHUB_ENV -Append - echo "Windows构建版本: $VERSION" + powershell -Command " + if ('${{ github.event_name }}' -eq 'workflow_dispatch') { + `$VERSION = '${{ inputs.version }}' + } else { + `$VERSION = '${{ github.ref }}' -replace 'refs/tags/', '' + } + # 设置环境变量 + Add-Content -Path `$env:GITHUB_ENV -Value \"VERSION=`$VERSION\" + Write-Host \"Windows构建版本: `$VERSION\" + " - name: 构建项目 (Windows Native) run: | - xmake f -p windows -a x86_64 -m release -y - xmake build -j${env:NUMBER_OF_PROCESSORS} - echo "Windows构建成功。" + powershell -Command " + xmake f -p windows -p mingw -a x86_64 -m release -y + xmake build -j`$env:NUMBER_OF_PROCESSORS + Write-Host 'Windows构建成功。' + " - name: 打包Windows发布文件 run: | - $VERSION = $env:VERSION - $PACKAGE_NAME = "Fig-${VERSION}-windows-x86_64" - New-Item -ItemType Directory -Force -Path $PACKAGE_NAME - - # 尝试查找可执行文件 (可能是 Fig 或 Fig.exe) - if (Test-Path "build\windows\x86_64\release\Fig.exe") { - Copy-Item build\windows\x86_64\release\Fig.exe $PACKAGE_NAME\ - } elseif (Test-Path "build\windows\x86_64\release\Fig") { - Copy-Item build\windows\x86_64\release\Fig $PACKAGE_NAME\Fig.exe - } else { - echo "错误:未找到构建输出文件" - Get-ChildItem -Recurse -Path build -Include "Fig*" | Select-Object -First 5 - exit 1 - } - - 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" -Encoding UTF8 - echo "Windows打包完成: ${PACKAGE_NAME}.zip" + powershell -Command " + `$VERSION = `$env:VERSION + `$PACKAGE_NAME = \"Fig-`$VERSION-windows-x86_64\" + New-Item -ItemType Directory -Force -Path `$PACKAGE_NAME + + # 尝试查找可执行文件 + if (Test-Path 'build\windows\x86_64\release\Fig.exe') { + Copy-Item 'build\windows\x86_64\release\Fig.exe' `$PACKAGE_NAME\ + } elseif (Test-Path 'build\windows\x86_64\release\Fig') { + Copy-Item 'build\windows\x86_64\release\Fig' `$PACKAGE_NAME\Fig.exe + } else { + Write-Host '错误:未找到构建输出文件' + Get-ChildItem -Recurse -Path build -Include 'Fig*' | Select-Object -First 5 + exit 1 + } + + 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\" -Encoding UTF8 + Write-Host \"Windows打包完成: `$PACKAGE_NAME.zip\" + " - 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 ..." - - # 1. 尝试通过标签获取 Release ID - $RELEASE_RESPONSE = Invoke-RestMethod -Uri "$API/releases/tags/$VERSION" -Headers @{ - Authorization = "token $env:GITEA_TOKEN" - } -ErrorAction SilentlyContinue - - if ($RELEASE_RESPONSE -and $RELEASE_RESPONSE.id) { - $RELEASE_ID = $RELEASE_RESPONSE.id - echo "找到已有发布 ID: $RELEASE_ID" - } else { - # 如果不存在,则创建新发布 - echo "发布不存在,正在创建..." - $CREATE_BODY = @{ - tag_name = $VERSION - name = "Fig $VERSION" - draft = $false - prerelease = $false - } | ConvertTo-Json + powershell -Command " + `$VERSION = `$env:VERSION + `$API = 'https://git.fig-lang.cn/api/v1/repos/${{ github.repository }}' - $CREATE_RESPONSE = Invoke-RestMethod -Method Post -Uri "$API/releases" -Headers @{ - Authorization = "token $env:GITEA_TOKEN" - 'Content-Type' = 'application/json' - } -Body $CREATE_BODY -ErrorAction SilentlyContinue + Write-Host \"正在上传Windows版本到发布 `$VERSION ...\" - if ($CREATE_RESPONSE -and $CREATE_RESPONSE.id) { - $RELEASE_ID = $CREATE_RESPONSE.id - echo "创建新发布 ID: $RELEASE_ID" + # 1. 尝试通过标签获取 Release ID + `$RELEASE_RESPONSE = Invoke-RestMethod -Uri \"`$API/releases/tags/`$VERSION\" -Headers @{ + Authorization = \"token `$env:GITEA_TOKEN\" + } -ErrorAction SilentlyContinue + + if (`$RELEASE_RESPONSE -and `$RELEASE_RESPONSE.id) { + `$RELEASE_ID = `$RELEASE_RESPONSE.id + Write-Host \"找到已有发布 ID: `$RELEASE_ID\" } else { - echo "错误:无法获取或创建发布" - exit 1 + # 如果不存在,则创建新发布 + Write-Host '发布不存在,正在创建...' + `$CREATE_BODY = @{ + tag_name = `$VERSION + name = \"Fig `$VERSION\" + draft = `$false + prerelease = `$false + } | ConvertTo-Json + + `$CREATE_RESPONSE = Invoke-RestMethod -Method Post -Uri \"`$API/releases\" -Headers @{ + Authorization = \"token `$env:GITEA_TOKEN\" + 'Content-Type' = 'application/json' + } -Body `$CREATE_BODY -ErrorAction SilentlyContinue + + if (`$CREATE_RESPONSE -and `$CREATE_RESPONSE.id) { + `$RELEASE_ID = `$CREATE_RESPONSE.id + Write-Host \"创建新发布 ID: `$RELEASE_ID\" + } else { + Write-Host '错误:无法获取或创建发布' + exit 1 + } } - } - - # 2. 使用 Release ID 上传资产 - echo "正在上传 ZIP 文件..." - Invoke-RestMethod -Method Post -Uri "$API/releases/$RELEASE_ID/assets?name=Fig-$VERSION-windows-x86_64.zip" -Headers @{ - Authorization = "token $env:GITEA_TOKEN" - 'Content-Type' = 'application/octet-stream' - } -InFile "Fig-$VERSION-windows-x86_64.zip" -ErrorAction SilentlyContinue - - echo "正在上传校验文件..." - Invoke-RestMethod -Method Post -Uri "$API/releases/$RELEASE_ID/assets?name=Fig-$VERSION-windows-x86_64.sha256" -Headers @{ - Authorization = "token $env:GITEA_TOKEN" - 'Content-Type' = 'text/plain' - } -InFile "Fig-$VERSION-windows-x86_64.sha256" -ErrorAction SilentlyContinue - - echo "✅ Windows版本发布完成!" \ No newline at end of file + + # 2. 使用 Release ID 上传资产 + Write-Host '正在上传 ZIP 文件...' + Invoke-RestMethod -Method Post -Uri \"`$API/releases/`$RELEASE_ID/assets?name=Fig-`$VERSION-windows-x86_64.zip\" -Headers @{ + Authorization = \"token `$env:GITEA_TOKEN\" + 'Content-Type' = 'application/octet-stream' + } -InFile \"Fig-`$VERSION-windows-x86_64.zip\" -ErrorAction SilentlyContinue + + Write-Host '正在上传校验文件...' + Invoke-RestMethod -Method Post -Uri \"`$API/releases/`$RELEASE_ID/assets?name=Fig-`$VERSION-windows-x86_64.sha256\" -Headers @{ + Authorization = \"token `$env:GITEA_TOKEN\" + 'Content-Type' = 'text/plain' + } -InFile \"Fig-`$VERSION-windows-x86_64.sha256\" -ErrorAction SilentlyContinue + + Write-Host '✅ Windows版本发布完成!' + " \ No newline at end of file