From c8657b9b3e48d6d448a4d371029af66e6c9e7599 Mon Sep 17 00:00:00 2001 From: Javier Briones <1674192+jvbriones@users.noreply.github.com> Date: Fri, 1 May 2026 13:38:41 +0200 Subject: [PATCH 1/3] chore: use single header row for post merge spreadsheet --- .../scripts/post-merge-validation-tracker.mjs | 33 +++++-------------- 1 file changed, 9 insertions(+), 24 deletions(-) diff --git a/.github/scripts/post-merge-validation-tracker.mjs b/.github/scripts/post-merge-validation-tracker.mjs index b693e6a0..39a5055f 100644 --- a/.github/scripts/post-merge-validation-tracker.mjs +++ b/.github/scripts/post-merge-validation-tracker.mjs @@ -76,8 +76,8 @@ function headerRowFor(type) { function platformLabelFor(type) { const t = String(type).toLowerCase(); - if (t === 'mobile') return '📱 Mobile'; - if (t === 'extension') return '🔌 Extension'; + if (t === 'mobile') return '📱 Mobile - Pull requests'; + if (t === 'extension') return '🔌 Extension - Pull requests'; return t; } @@ -129,7 +129,7 @@ async function createSheetFromTemplateOrBlank(authClient, sheetsList, title, pla }, }); const newSheetId = duplicateRes.data.replies?.[0]?.duplicateSheet?.properties?.sheetId; - // Write platform label in A1 and platform-specific labels; keep row 2 headers from template to preserve formatting + // Write platform label in A1 await sheets.spreadsheets.values.update({ spreadsheetId, auth: authClient, @@ -137,15 +137,7 @@ async function createSheetFromTemplateOrBlank(authClient, sheetsList, title, pla valueInputOption: 'USER_ENTERED', requestBody: { values: [[platformLabelFor(platformType)]] }, }); - // Overwrite entire row 2 with headerRowFor(type) - await sheets.spreadsheets.values.update({ - spreadsheetId, - auth: authClient, - range: `${title}!A2:H2`, - valueInputOption: 'USER_ENTERED', - requestBody: { values: [headerRowFor(platformType)] }, - }); - // Insert a blank row at index 2 (0-based) so data can start at row 4 + // Insert a blank row at index 1 (0-based) so data can start at row 3 await sheets.spreadsheets.batchUpdate({ spreadsheetId, auth: authClient, @@ -159,7 +151,7 @@ async function createSheetFromTemplateOrBlank(authClient, sheetsList, title, pla }, { insertDimension: { - range: { sheetId: newSheetId, dimension: 'ROWS', startIndex: 2, endIndex: 3 }, + range: { sheetId: newSheetId, dimension: 'ROWS', startIndex: 1, endIndex: 2 }, inheritFromBefore: false, }, }, @@ -186,7 +178,7 @@ async function createSheetFromTemplateOrBlank(authClient, sheetsList, title, pla }, }); const sheetId = addRes.data.replies?.[0]?.addSheet?.properties?.sheetId; - // Write platform label in A1 and dynamic headers in row 2 + // Write platform label in A1 await sheets.spreadsheets.values.update({ spreadsheetId, auth: authClient, @@ -194,13 +186,6 @@ async function createSheetFromTemplateOrBlank(authClient, sheetsList, title, pla valueInputOption: 'USER_ENTERED', requestBody: { values: [[platformLabelFor(platformType)]] }, }); - await sheets.spreadsheets.values.update({ - spreadsheetId, - auth: authClient, - range: `${title}!A2:H2`, - valueInputOption: 'USER_ENTERED', - requestBody: { values: [headerRowFor(platformType)] }, - }); await sheets.spreadsheets.batchUpdate({ spreadsheetId, auth: authClient, @@ -224,7 +209,7 @@ async function readRows(authClient, title) { const res = await sheets.spreadsheets.values.get({ spreadsheetId, auth: authClient, - range: `${title}!A3:J`, + range: `${title}!A2:J`, }); return res.data.values || []; } catch (e) { @@ -238,7 +223,7 @@ async function appendRows(authClient, title, rows) { await sheets.spreadsheets.values.append({ spreadsheetId, auth: authClient, - range: `${title}!A4:J`, + range: `${title}!A3:J`, valueInputOption: 'USER_ENTERED', insertDataOption: 'INSERT_ROWS', requestBody: { values: rows }, @@ -838,7 +823,7 @@ async function processTab(authClient, title, entries, platformType) { requests: [ { deleteDimension: { - range: { sheetId, dimension: 'ROWS', startIndex: 2, endIndex: 3 }, + range: { sheetId, dimension: 'ROWS', startIndex: 1, endIndex: 2 }, }, }, ], From 933fa29bbd2d0b43c2229f0d97e063c18537d9b9 Mon Sep 17 00:00:00 2001 From: Javier Briones <1674192+jvbriones@users.noreply.github.com> Date: Mon, 4 May 2026 10:40:29 +0200 Subject: [PATCH 2/3] chore: use single header row for post merge spreadsheet --- .../scripts/post-merge-validation-tracker.mjs | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/.github/scripts/post-merge-validation-tracker.mjs b/.github/scripts/post-merge-validation-tracker.mjs index 39a5055f..691f2469 100644 --- a/.github/scripts/post-merge-validation-tracker.mjs +++ b/.github/scripts/post-merge-validation-tracker.mjs @@ -58,12 +58,20 @@ function tabTitleFor(repo, releaseLabel) { return `pre-${releaseLabel} (${repoType(repo)})`; } +function platformLabelFor(type) { + const t = String(type).toLowerCase(); + if (t === 'mobile') return '📱 Mobile - Pull requests'; + if (t === 'extension') return '🔌 Extension - Pull requests'; + return t; +} + function headerRowFor(type) { - const isMobile = String(type).toLowerCase() === 'mobile'; + const t = String(type).toLowerCase(); + const isMobile = t === 'mobile'; const colG = isMobile ? 'Validated (Android)' : 'Validated (Chrome)'; const colH = isMobile ? 'Validated (iOS)' : 'Validated (Firefox)'; return [ - 'Pull Request', + platformLabelFor(type), 'Merged Time (UTC)', 'Author', 'PR Size', @@ -74,13 +82,6 @@ function headerRowFor(type) { ]; } -function platformLabelFor(type) { - const t = String(type).toLowerCase(); - if (t === 'mobile') return '📱 Mobile - Pull requests'; - if (t === 'extension') return '🔌 Extension - Pull requests'; - return t; -} - async function ensureSheetExists(authClient, title, platformType) { const meta = await sheets.spreadsheets.get({ spreadsheetId, @@ -178,13 +179,13 @@ async function createSheetFromTemplateOrBlank(authClient, sheetsList, title, pla }, }); const sheetId = addRes.data.replies?.[0]?.addSheet?.properties?.sheetId; - // Write platform label in A1 + // Write all column headers into row 1 (no template to provide them) await sheets.spreadsheets.values.update({ spreadsheetId, auth: authClient, - range: `${title}!A1:A1`, + range: `${title}!A1:H1`, valueInputOption: 'USER_ENTERED', - requestBody: { values: [[platformLabelFor(platformType)]] }, + requestBody: { values: [headerRowFor(platformType)] }, }); await sheets.spreadsheets.batchUpdate({ spreadsheetId, From 6e2f2298ef821f78b0223e223a8941f31fa75b13 Mon Sep 17 00:00:00 2001 From: Javier Briones <1674192+jvbriones@users.noreply.github.com> Date: Mon, 4 May 2026 10:56:39 +0200 Subject: [PATCH 3/3] chore: use single header row for post merge spreadsheet --- .github/scripts/post-merge-validation-tracker.mjs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/scripts/post-merge-validation-tracker.mjs b/.github/scripts/post-merge-validation-tracker.mjs index 691f2469..29709d52 100644 --- a/.github/scripts/post-merge-validation-tracker.mjs +++ b/.github/scripts/post-merge-validation-tracker.mjs @@ -130,13 +130,13 @@ async function createSheetFromTemplateOrBlank(authClient, sheetsList, title, pla }, }); const newSheetId = duplicateRes.data.replies?.[0]?.duplicateSheet?.properties?.sheetId; - // Write platform label in A1 + // Write all platform-specific column headers into row 1 (preserves template cell formatting) await sheets.spreadsheets.values.update({ spreadsheetId, auth: authClient, - range: `${title}!A1:A1`, + range: `${title}!A1:H1`, valueInputOption: 'USER_ENTERED', - requestBody: { values: [[platformLabelFor(platformType)]] }, + requestBody: { values: [headerRowFor(platformType)] }, }); // Insert a blank row at index 1 (0-based) so data can start at row 3 await sheets.spreadsheets.batchUpdate({