From 327c7ba6897b33f062cd1f7a684c26033919ff18 Mon Sep 17 00:00:00 2001 From: Robert DeLuca Date: Thu, 1 Oct 2026 22:36:58 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Keep=20Swift=20preview=20names?= =?UTF-8?q?=20stable=20across=20schemes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use Xcode preview names without the selected scheme so builds from different schemes compare against the same screenshot identities. --- clients/swift/src/upload.js | 4 +--- clients/swift/tests-js/upload.test.js | 20 ++++++++++++++++---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/clients/swift/src/upload.js b/clients/swift/src/upload.js index cdc0bd6b..ca039408 100644 --- a/clients/swift/src/upload.js +++ b/clients/swift/src/upload.js @@ -93,9 +93,7 @@ export function buildCloudRunOptions(vizzlyConfig = {}, gitInfo = {}) { } function previewNames(manifest) { - let baseNames = manifest.previews.map( - preview => `${manifest.scheme} - ${preview.name}` - ); + let baseNames = manifest.previews.map(preview => preview.name); let baseCounts = new Map(); for (let name of baseNames) { baseCounts.set(name, (baseCounts.get(name) ?? 0) + 1); diff --git a/clients/swift/tests-js/upload.test.js b/clients/swift/tests-js/upload.test.js index a90a0ad1..2b4aade4 100644 --- a/clients/swift/tests-js/upload.test.js +++ b/clients/swift/tests-js/upload.test.js @@ -76,7 +76,7 @@ describe('Swift preview uploads', () => { assert.deepEqual( records.map(record => record.name), - ['Example - Card - Example.Card', 'Example - Card - Example.CompactCard'] + ['Card - Example.Card', 'Card - Example.CompactCard'] ); assert.deepEqual(records[0].properties, { browser: 'SwiftUI Preview', @@ -92,13 +92,25 @@ describe('Swift preview uploads', () => { }); }); + it('keeps screenshot names stable across Xcode schemes', () => { + let manifest = previewManifest('/tmp/previews'); + let names = buildPreviewUploadRecords(manifest).map(record => record.name); + + manifest.scheme = 'Example Staging'; + + assert.deepEqual( + buildPreviewUploadRecords(manifest).map(record => record.name), + names + ); + }); + it('normalizes Xcode preview names for the Vizzly screenshot contract', () => { let manifest = previewManifest('/tmp/previews'); manifest.previews[0].name = 'Card / Dark'; let [record] = buildPreviewUploadRecords(manifest); - assert.equal(record.name, 'Example - Card - Dark'); + assert.equal(record.name, 'Card - Dark'); }); it('keeps names unique when different Xcode names normalize alike', () => { @@ -110,7 +122,7 @@ describe('Swift preview uploads', () => { assert.deepEqual( records.map(record => record.name), - ['Example - Card - Dark - first-id', 'Example - Card - Dark - second-id'] + ['Card - Dark - first-id', 'Card - Dark - second-id'] ); }); @@ -211,7 +223,7 @@ describe('Swift preview uploads', () => { ['/screenshot', '/screenshot', '/flush'] ); assert.equal(requests[0].body.buildId, 'build-123'); - assert.equal(requests[0].body.name, 'Example - Card - Example.Card'); + assert.equal(requests[0].body.name, 'Card - Example.Card'); assert.equal(requests[0].body.type, 'file-path'); assert.equal(requests[0].body.threshold, 2.5); assert.equal(requests[0].body.minClusterSize, 3);