From 4036041819056e3fd51e776056b6a6c6c0835969 Mon Sep 17 00:00:00 2001 From: Art_Sakura <1754798088@qq.com> Date: Thu, 29 Oct 2026 14:45:51 +0800 Subject: [PATCH] =?UTF-8?q?fixed=20#=20=E6=9B=B4=E6=96=B0=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release.yml | 26 ++++++++++++----- extension.js | 2 +- tools/UPDATE.md | 10 +++++++ tools/resolve_release_version.ps1 | 46 +++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+), 8 deletions(-) create mode 100644 tools/resolve_release_version.ps1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c37d5be..c7ca9be 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,12 +1,12 @@ name: Release extension on: + push: + branches: + - "**" + paths: + - "extension.js" workflow_dispatch: - inputs: - version: - description: "版本号,例如 2.0.1.2 或 2.0.1.2-rc.1" - required: true - type: string permissions: contents: write @@ -17,23 +17,33 @@ concurrency: jobs: release: + if: github.ref == format('refs/heads/{0}', github.event.repository.default_branch) runs-on: windows-latest defaults: run: shell: pwsh env: - RELEASE_VERSION: ${{ inputs.version }} DEFAULT_BRANCH: ${{ github.event.repository.default_branch }} + BEFORE_SHA: ${{ github.event.before }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - name: Check out source uses: actions/checkout@v4 with: - ref: ${{ github.event.repository.default_branch }} + ref: ${{ github.sha }} fetch-depth: 0 + - name: Read current version and detect change + id: version + run: | + ./tools/resolve_release_version.ps1 ` + -Root $env:GITHUB_WORKSPACE ` + -EventName $env:GITHUB_EVENT_NAME ` + -PreviousRef $env:BEFORE_SHA + - name: Generate manifest and create tag + if: steps.version.outputs.should_release == 'true' run: | $ErrorActionPreference = 'Stop' $version = $env:RELEASE_VERSION @@ -118,6 +128,7 @@ jobs: Write-Host "已创建包含清单的标签:$tag" - name: Build ZIP from tag + if: steps.version.outputs.should_release == 'true' run: | $ErrorActionPreference = 'Stop' $version = $env:RELEASE_VERSION @@ -179,6 +190,7 @@ jobs: Write-Host "安装包:$package" - name: Publish GitHub Release + if: steps.version.outputs.should_release == 'true' run: | $ErrorActionPreference = 'Stop' if (!$env:GITHUB_TOKEN) { diff --git a/extension.js b/extension.js index ca3cccd..840cd89 100644 --- a/extension.js +++ b/extension.js @@ -6,7 +6,7 @@ import { configureDiagnostics } from "./diagnostics/index.js"; export const type = "extension"; export let shuYing = new Object(); -const shuYingLocalVersion = "2.0.2.3-rc.6"; +const shuYingLocalVersion = "2.0.2.3-rc.7"; shuYing.name = "术樱包"; shuYing.editable = false; diff --git a/tools/UPDATE.md b/tools/UPDATE.md index a363c00..40cf559 100644 --- a/tools/UPDATE.md +++ b/tools/UPDATE.md @@ -17,6 +17,16 @@ 3. 发布工作流为每个模块生成独立清单,并将清单提交到发布标签。 4. 完整 ZIP 安装包仍包含所有模块,供离线或整包安装使用。 +修改 `extension.js` 中的 `shuYingLocalVersion`,提交并推送到 GitHub +默认分支后,工作流会比较推送前后的版本号。版本号变化时自动生成和校验 +清单、创建 `v版本号` 标签,并打包发布;同版本的代码修改不重复发布。 +手动运行 GitHub 发布工作流也读取该次提交的版本号,无需再次填写版本。 + +版本格式为 `2.0.2.4` 或 `2.0.2.4-rc.1`;带 `-rc.N` 的 Release +标记为测试版,其他标记为正式版。已有同名标签时停止,避免覆盖旧发布。 +Gitea 保持接收同一发布标签后打包的流程;使用 Gitea 更新源时,需将该 +标签同步到 Gitea,单独推送分支代码不会触发 Gitea 发布。 + 客户端从标签的 raw 文件路径读取清单。因此 Gitea 发布必须使用已经包含 `dist/manifest.json` 和 `dist/modules/*.json` 的同一标签;当前 Gitea 工作流 会生成并上传附件,但不会改写触发它的标签。 diff --git a/tools/resolve_release_version.ps1 b/tools/resolve_release_version.ps1 new file mode 100644 index 0000000..c7d0649 --- /dev/null +++ b/tools/resolve_release_version.ps1 @@ -0,0 +1,46 @@ +param( + [Parameter(Mandatory = $true)][string]$Root, + [string]$EventName = 'workflow_dispatch', + [string]$PreviousRef = '' +) + +$ErrorActionPreference = 'Stop' + +function Read-Version([string]$Ref) { + $source = git show "${Ref}:extension.js" + if ($LASTEXITCODE -ne 0) { throw "Cannot read extension.js at $Ref" } + $matches = [regex]::Matches(($source -join "`n"), + '(?m)^\s*const\s+shuYingLocalVersion\s*=\s*"([^"\r\n]+)"\s*;') + if ($matches.Count -ne 1) { throw "Expected one version at $Ref" } + return $matches[0].Groups[1].Value +} + +Push-Location -LiteralPath $Root +try { + $version = Read-Version 'HEAD' + if ($version -cnotmatch '^\d+\.\d+\.\d+\.\d+(-rc\.\d+)?$') { + throw "Invalid release version: $version" + } + $changed = $true + if ($EventName -eq 'push') { + if ($PreviousRef -notmatch '^[0-9a-fA-F]{40}$') { + throw 'Push event must provide its previous commit SHA' + } + if ($PreviousRef -notmatch '^0+$') { + $previous = Read-Version $PreviousRef + $changed = $previous -ne $version + } + } + if (!$env:GITHUB_OUTPUT -or !$env:GITHUB_ENV) { + throw 'Actions output and environment files are required' + } + $utf8 = New-Object System.Text.UTF8Encoding($false) + $release = $changed.ToString().ToLowerInvariant() + [IO.File]::AppendAllText($env:GITHUB_OUTPUT, + "should_release=$release`n", $utf8) + [IO.File]::AppendAllText($env:GITHUB_ENV, + "RELEASE_VERSION=$version`nRELEASE_TAG=v$version`n", $utf8) + Write-Host "Version: $version; release required: $release" +} finally { + Pop-Location +}