From c14e24569c1a815ec4fe2cf0d177ad1b826ce9ea Mon Sep 17 00:00:00 2001 From: zhengyubai Date: Tue, 21 Jul 2026 19:49:18 +0900 Subject: [PATCH] fix(release): verify package versions from raw binaries --- scripts/release/verify-package-managers.sh | 10 ++++------ test/scripts/package_script_test.go | 23 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/scripts/release/verify-package-managers.sh b/scripts/release/verify-package-managers.sh index 886afbbc..2d517273 100755 --- a/scripts/release/verify-package-managers.sh +++ b/scripts/release/verify-package-managers.sh @@ -53,8 +53,6 @@ while [ "$#" -gt 0 ]; do esac done -[ -z "$EXPECTED_VERSION" ] || need_cmd strings - TMP_ROOT="$(mktemp -d "${TMPDIR:-/tmp}/dws-package-verify-XXXXXX")" HOME_AGENT_PARENTS=" .claude @@ -145,8 +143,8 @@ verify_npm() { if [ -n "$EXPECTED_VERSION" ]; then vendor_bin="$npm_prefix/lib/node_modules/dingtalk-workspace-cli/vendor/dws" need_file "$vendor_bin" - strings "$vendor_bin" | grep -Fqx "v$EXPECTED_VERSION" || \ - err "npm-installed binary does not embed expected version v$EXPECTED_VERSION" + LC_ALL=C grep -aFq "v$EXPECTED_VERSION" "$vendor_bin" || \ + err "npm-installed binary does not contain expected version marker v$EXPECTED_VERSION" EXPECTED_VERSION="$EXPECTED_VERSION" node -e ' const pkg = require(process.argv[1]); if (pkg.version !== process.env.EXPECTED_VERSION) process.exit(1); @@ -193,8 +191,8 @@ verify_brew() { [ -x "$prefix/bin/dws" ] || err "brew install did not create $prefix/bin/dws" "$prefix/bin/dws" --help >/dev/null if [ -n "$EXPECTED_VERSION" ]; then - strings "$prefix/bin/dws" | grep -Fqx "v$EXPECTED_VERSION" || \ - err "Homebrew-installed binary does not embed expected version v$EXPECTED_VERSION" + LC_ALL=C grep -aFq "v$EXPECTED_VERSION" "$prefix/bin/dws" || \ + err "Homebrew-installed binary does not contain expected version marker v$EXPECTED_VERSION" fi need_file "$prefix/share/dingtalk-workspace-cli-local/skills/dws/SKILL.md" } diff --git a/test/scripts/package_script_test.go b/test/scripts/package_script_test.go index bf060e3c..2c400a22 100644 --- a/test/scripts/package_script_test.go +++ b/test/scripts/package_script_test.go @@ -46,6 +46,29 @@ var expectedReleaseAdmissionContexts = []string{ "Mock MCP", } +func TestPackageManagerVersionVerificationReadsRawBinary(t *testing.T) { + t.Parallel() + + scriptPath, err := filepath.Abs(filepath.Join("..", "..", "scripts", "release", "verify-package-managers.sh")) + if err != nil { + t.Fatalf("Abs(verify-package-managers.sh) error = %v", err) + } + data, err := os.ReadFile(scriptPath) + if err != nil { + t.Fatalf("ReadFile(%s) error = %v", scriptPath, err) + } + script := string(data) + for _, binary := range []string{`"$vendor_bin"`, `"$prefix/bin/dws"`} { + want := `LC_ALL=C grep -aFq "v$EXPECTED_VERSION" ` + binary + if !strings.Contains(script, want) { + t.Errorf("package-manager verifier is missing raw binary marker check %q", want) + } + } + if strings.Contains(script, `strings "$vendor_bin"`) || strings.Contains(script, `strings "$prefix/bin/dws"`) { + t.Fatal("package-manager verifier still requires the version marker to occupy a strings(1) line") + } +} + func seedDistArchive(t *testing.T, path string) { t.Helper() file, err := os.Create(path)