From 5f97a8c0ade5c9804656acca39831e2849d530d7 Mon Sep 17 00:00:00 2001 From: fangsmile <892739385@qq.com> Date: Tue, 16 Jun 2026 11:07:22 +0800 Subject: [PATCH 1/2] ci: harden release workflow output --- .github/workflows/release.yml | 73 +++++++++++-------------- common/scripts/apply-release-version.js | 3 +- 2 files changed, 34 insertions(+), 42 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8f57dc6743..78b806c2a9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -205,38 +205,19 @@ jobs: const baseUrl = process.env.CHANGELOG_API_URL; const token = process.env.CHANGELOG_API_TOKEN; - function writeFallback() { - const date = payload.date; - const enLines = [ - `# v${version}`, - '', - date, - '', - '**🆕 New Features**', - '', - `- TODO: Fill in change details for v${version}.`, - '', - ]; - const zhLines = [ - `# v${version}`, - '', - date, - '', - '**🆕 新增功能**', - '', - `- TODO:补充 v${version} 的更新内容。`, - '', - ]; - fs.mkdirSync('.changelog', { recursive: true }); - fs.writeFileSync('.changelog/en.md', enLines.join('\n') + '\n', 'utf8'); - fs.writeFileSync('.changelog/zh.md', zhLines.join('\n') + '\n', 'utf8'); - console.log('Wrote fallback changelog blocks for version', version); + function failChangelog(message) { + console.error(message); + process.exit(1); + } + + function validateBlock(block, lang) { + if (!block || /TODO/i.test(block)) { + throw new Error(`Invalid ${lang} changelog block: empty or contains TODO`); + } } if (!baseUrl || !token) { - console.log('CHANGELOG_API_URL or CHANGELOG_API_TOKEN not configured, using fallback template.'); - writeFallback(); - process.exit(0); + failChangelog('CHANGELOG_API_URL or CHANGELOG_API_TOKEN not configured.'); } const url = new URL('/api/changelog/vtable/generate', baseUrl); @@ -269,24 +250,23 @@ jobs: if (!en || !zh) { throw new Error('Missing en/zh blocks in response'); } + validateBlock(String(en), 'en'); + validateBlock(String(zh), 'zh'); fs.mkdirSync('.changelog', { recursive: true }); fs.writeFileSync('.changelog/en.md', String(en).trimEnd() + '\n', 'utf8'); fs.writeFileSync('.changelog/zh.md', String(zh).trimEnd() + '\n', 'utf8'); console.log('Changelog blocks generated via API. traceId:', parsed.traceId || '(none)'); } catch (e) { - console.error('Failed to parse API response, fallback to template:', e.message || e); - writeFallback(); + failChangelog(`Failed to parse API response: ${e.message || e}`); } } else { - console.error('Changelog API returned non-2xx status:', res.statusCode, data); - writeFallback(); + failChangelog(`Changelog API returned non-2xx status: ${res.statusCode} ${data}`); } }); }); req.on('error', (err) => { - console.error('Changelog API request failed, fallback to template:', err.message || err); - writeFallback(); + failChangelog(`Changelog API request failed: ${err.message || err}`); }); req.write(body); @@ -295,6 +275,8 @@ jobs: - name: Prepend changelog blocks into release docs (release) if: startsWith(github.ref_name, 'release/') + env: + RELEASE_VERSION: ${{ steps.semver_release.outputs.main }} run: | set -euo pipefail mkdir -p docs/assets/changelog/en docs/assets/changelog/zh @@ -303,12 +285,19 @@ jobs: block_file=".changelog/${lang}.md" target_file="docs/assets/changelog/${lang}/release.md" if [ -f "$block_file" ]; then - if [ -f "$target_file" ]; then - cp "$target_file" "${target_file}.bak" - cat "$block_file" "${target_file}.bak" > "$target_file" - else - cp "$block_file" "$target_file" - fi + node -e ' + const fs = require("fs"); + const [blockFile, targetFile, version] = process.argv.slice(1); + const block = fs.readFileSync(blockFile, "utf8").trimEnd() + "\n\n"; + const oldContent = fs.existsSync(targetFile) ? fs.readFileSync(targetFile, "utf8") : ""; + const heading = `# v${version}`; + let contentWithoutSameVersion = oldContent; + if (oldContent.startsWith(`${heading}\n`) || oldContent.startsWith(`${heading}\r\n`)) { + const nextVersionIndex = oldContent.slice(1).search(/\n# v\d/); + contentWithoutSameVersion = nextVersionIndex >= 0 ? oldContent.slice(nextVersionIndex + 2) : ""; + } + fs.writeFileSync(targetFile, block + contentWithoutSameVersion.replace(/^\n+/, ""), "utf8"); + ' "$block_file" "$target_file" "$RELEASE_VERSION" else echo "Missing changelog block for $lang, skip." fi @@ -392,6 +381,8 @@ jobs: if git diff --quiet; then echo 'No changes to commit for release branch.' else + rm -rf .changelog + find docs/assets/changelog -name '*.bak' -delete git add . git commit -m "build: release version ${{ steps.package_version_release.outputs.current_version }} [skip ci]" -n git push --no-verify origin ${{ github.ref_name }} diff --git a/common/scripts/apply-release-version.js b/common/scripts/apply-release-version.js index b9fd22a462..a3c81ae866 100644 --- a/common/scripts/apply-release-version.js +++ b/common/scripts/apply-release-version.js @@ -4,7 +4,8 @@ const parseVersion = require('./parse-version'); function run() { - const preReleaseName = process.argv.slice(2)[0]; + const preReleaseNameArg = process.argv.slice(2)[0]; + const preReleaseName = preReleaseNameArg === 'none' ? '' : preReleaseNameArg; const nextVersionOrNextBump = process.argv.slice(2)[1]; const buildName = process.argv.slice(2)[2]; const nextBump = checkAndUpdateNextBump(nextVersionOrNextBump); From f685a8e71342df2aca8cc4a297042bed3cb5cb80 Mon Sep 17 00:00:00 2001 From: fangsmile <892739385@qq.com> Date: Tue, 16 Jun 2026 11:17:21 +0800 Subject: [PATCH 2/2] ci: use vtable changelog api secrets --- .github/workflows/release.yml | 4 ++-- .../fix-collapse-scroll-bottom_2026-06-15-08-21.json | 11 +++++++++++ ...e-4984-group-sticky-collapse_2026-05-20-02-00.json | 11 +++++++++++ .../vtable/fix-issue-5027_2026-05-21-07-15.json | 11 +++++++++++ ...sue-5137-filter-column-order_2026-05-20-02-27.json | 11 +++++++++++ .../fix-issue-5137-regression_2026-06-11-07-35.json | 11 +++++++++++ ...e-5146-shift-arrow-selection_2026-05-25-16-36.json | 11 +++++++++++ 7 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 common/changes/@visactor/vtable/fix-collapse-scroll-bottom_2026-06-15-08-21.json create mode 100644 common/changes/@visactor/vtable/fix-issue-4984-group-sticky-collapse_2026-05-20-02-00.json create mode 100644 common/changes/@visactor/vtable/fix-issue-5027_2026-05-21-07-15.json create mode 100644 common/changes/@visactor/vtable/fix-issue-5137-filter-column-order_2026-05-20-02-27.json create mode 100644 common/changes/@visactor/vtable/fix-issue-5137-regression_2026-06-11-07-35.json create mode 100644 common/changes/@visactor/vtable/fix-issue-5146-shift-arrow-selection_2026-05-25-16-36.json diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 78b806c2a9..0efebefa6a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -145,8 +145,8 @@ jobs: - name: Generate changelog blocks from changefiles (release) if: startsWith(github.ref_name, 'release/') env: - CHANGELOG_API_URL: ${{ secrets.VCHART_CHANGELOG_API_URL }} - CHANGELOG_API_TOKEN: ${{ secrets.VCHART_CHANGELOG_API_TOKEN }} + CHANGELOG_API_URL: ${{ secrets.VTABLE_CHANGELOG_API_URL }} + CHANGELOG_API_TOKEN: ${{ secrets.VTABLE_CHANGELOG_API_TOKEN }} RELEASE_VERSION: ${{ steps.semver_release.outputs.main }} run: | node <<'NODE' diff --git a/common/changes/@visactor/vtable/fix-collapse-scroll-bottom_2026-06-15-08-21.json b/common/changes/@visactor/vtable/fix-collapse-scroll-bottom_2026-06-15-08-21.json new file mode 100644 index 0000000000..e4d13ddd9a --- /dev/null +++ b/common/changes/@visactor/vtable/fix-collapse-scroll-bottom_2026-06-15-08-21.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "Merge pull request #5144 from VisActor/fix/issue-5027\n\nfix: avoid selection gap with frozen rows\n", + "type": "none", + "packageName": "@visactor/vtable" + } + ], + "packageName": "@visactor/vtable", + "email": "892739385@qq.com" +} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/fix-issue-4984-group-sticky-collapse_2026-05-20-02-00.json b/common/changes/@visactor/vtable/fix-issue-4984-group-sticky-collapse_2026-05-20-02-00.json new file mode 100644 index 0000000000..422bad3dcb --- /dev/null +++ b/common/changes/@visactor/vtable/fix-issue-4984-group-sticky-collapse_2026-05-20-02-00.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "fix: preserve sticky group position after toggle\n\n", + "type": "none", + "packageName": "@visactor/vtable" + } + ], + "packageName": "@visactor/vtable", + "email": "892739385@qq.com" +} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/fix-issue-5027_2026-05-21-07-15.json b/common/changes/@visactor/vtable/fix-issue-5027_2026-05-21-07-15.json new file mode 100644 index 0000000000..7ee1609801 --- /dev/null +++ b/common/changes/@visactor/vtable/fix-issue-5027_2026-05-21-07-15.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "fix: avoid selection gap with frozen rows\n\n", + "type": "none", + "packageName": "@visactor/vtable" + } + ], + "packageName": "@visactor/vtable", + "email": "892739385@qq.com" +} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/fix-issue-5137-filter-column-order_2026-05-20-02-27.json b/common/changes/@visactor/vtable/fix-issue-5137-filter-column-order_2026-05-20-02-27.json new file mode 100644 index 0000000000..2ebebd87ee --- /dev/null +++ b/common/changes/@visactor/vtable/fix-issue-5137-filter-column-order_2026-05-20-02-27.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "fix: preserve hidden column order after filter update\n\n", + "type": "none", + "packageName": "@visactor/vtable" + } + ], + "packageName": "@visactor/vtable", + "email": "892739385@qq.com" +} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/fix-issue-5137-regression_2026-06-11-07-35.json b/common/changes/@visactor/vtable/fix-issue-5137-regression_2026-06-11-07-35.json new file mode 100644 index 0000000000..a250ad7b9e --- /dev/null +++ b/common/changes/@visactor/vtable/fix-issue-5137-regression_2026-06-11-07-35.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "fix: resolve regression from #5137 fix which broke nested header drag and exposed internal state\n\n", + "type": "none", + "packageName": "@visactor/vtable" + } + ], + "packageName": "@visactor/vtable", + "email": "892739385@qq.com" +} \ No newline at end of file diff --git a/common/changes/@visactor/vtable/fix-issue-5146-shift-arrow-selection_2026-05-25-16-36.json b/common/changes/@visactor/vtable/fix-issue-5146-shift-arrow-selection_2026-05-25-16-36.json new file mode 100644 index 0000000000..fb0e0a9c56 --- /dev/null +++ b/common/changes/@visactor/vtable/fix-issue-5146-shift-arrow-selection_2026-05-25-16-36.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "packageName": "@visactor/vtable", + "comment": "Fix an issue where keyboard multi-selection with Shift plus arrow keys stopped expanding after the second cell (GitHub #5146)", + "type": "patch" + } + ], + "packageName": "@visactor/vtable", + "email": "892739385@qq.com" +}