From 53c0e9e8f4b82a85c99cd389f0c6d45bab6d31c0 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 10 Feb 2026 21:05:37 +0000 Subject: [PATCH] Fix: robust version hash injection in build process Replaced the fragile regex-based version injection in `scripts/build-dist.mjs` with a robust placeholder method. - Added `` placeholder to `index.html`. - Updated `scripts/build-dist.mjs` to target the placeholder, while retaining regex fallback for safety. - Ensures version info is reliably injected during local builds regardless of code formatting. Co-authored-by: PR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> --- index.html | 1 + scripts/build-dist.mjs | 18 +++++++++++++----- verification.png | Bin 5944 -> 39393 bytes verify_version.py | 34 +++++++++++++++++++--------------- 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/index.html b/index.html index c4078bf7..bea2c7b5 100644 --- a/index.html +++ b/index.html @@ -359,6 +359,7 @@

seed. zap. subscribe.

+ diff --git a/scripts/build-dist.mjs b/scripts/build-dist.mjs index 1aa36a6f..9438345b 100644 --- a/scripts/build-dist.mjs +++ b/scripts/build-dist.mjs @@ -171,14 +171,22 @@ function injectVersionInfo() { v: ${hash.slice(0, 8)} • ${date} `; - // Fallback search if whitespace differs - const taglineRegex = /(seed\. zap\. subscribe\.\s*<\/h2>)/; - if (taglineRegex.test(content)) { - content = content.replace(taglineRegex, '$1' + versionHtml); + // Robust replacement using explicit comment placeholder + const placeholder = ''; + if (content.includes(placeholder)) { + content = content.replace(placeholder, versionHtml); fs.writeFileSync(indexHtmlPath, content); console.log(`Injected version: ${hash.slice(0, 8)} • ${date}`); } else { - console.warn('Could not find tagline to inject version info.'); + // Fallback search if placeholder is missing (legacy behavior) + const taglineRegex = /(seed\. zap\. subscribe\.\s*<\/h2>)/; + if (taglineRegex.test(content)) { + content = content.replace(taglineRegex, '$1' + versionHtml); + fs.writeFileSync(indexHtmlPath, content); + console.log(`Injected version (via fallback regex): ${hash.slice(0, 8)} • ${date}`); + } else { + console.warn('Could not find placeholder or tagline to inject version info.'); + } } } } catch (error) { diff --git a/verification.png b/verification.png index fda37f88bd5f6d2244fd8e13174f2292c9b85225..d22ea829a13c45f70de9b8a769006886f1b37e8b 100644 GIT binary patch literal 39393 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 diff --git a/verify_version.py b/verify_version.py index 0130aaff..1b4c5318 100644 --- a/verify_version.py +++ b/verify_version.py @@ -1,29 +1,33 @@ from playwright.sync_api import sync_playwright +import re def run(): with sync_playwright() as p: browser = p.chromium.launch() page = browser.new_page() - page.goto("http://localhost:3000") + try: + page.goto("http://localhost:8080") - # Locate the tagline - tagline = page.get_by_text("seed. zap. subscribe.") + # Pattern for version string + pattern = re.compile(r"v:\s+[a-f0-9]{8}\s+•\s+\d{4}-\d{2}-\d{2}") - # Locate the version info which should be nearby - # The tagline is an h2 inside a div. - container = tagline.locator("..") + locator = page.get_by_text(pattern) + locator.wait_for() - # Wait for fade-in to settle or just force visibility? - # The container has "fade-in" class. It might take time. - # I'll wait for the version text to be visible. - version_locator = container.locator("div.text-xs") - version_locator.wait_for() + # Scroll to element + locator.scroll_into_view_if_needed() - print("Version text found:", version_locator.inner_text()) + # Take a screenshot of the element specifically, plus some context + # Or just the page after scrolling + page.screenshot(path="verification.png") - # Screenshot the container - container.screenshot(path="verification.png") - browser.close() + content = locator.text_content() + print(f"Found version string: '{content.strip()}'") + + except Exception as e: + print(f"Error: {e}") + finally: + browser.close() if __name__ == "__main__": run()