From 29483997eadc4b7cd4472b93aec4e596d83bd5f8 Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Tue, 7 Jul 2026 11:57:12 +0300 Subject: [PATCH] ci: match ios release signing blocks --- .github/workflows/mobile-release.yml | 27 ++++++--------------------- 1 file changed, 6 insertions(+), 21 deletions(-) diff --git a/.github/workflows/mobile-release.yml b/.github/workflows/mobile-release.yml index 4408ccf8..71b7432a 100644 --- a/.github/workflows/mobile-release.yml +++ b/.github/workflows/mobile-release.yml @@ -218,27 +218,12 @@ jobs: for (const { bundle, profile } of replacements) { if (!profile) throw new Error(`Missing provisioning profile name for ${bundle}`); const marker = `PRODUCT_BUNDLE_IDENTIFIER = ${bundle};`; - let blockStart = -1; - let blockEnd = -1; - let searchFrom = 0; - while (true) { - const candidate = project.indexOf(marker, searchFrom); - if (candidate === -1) break; - const candidateStart = project.lastIndexOf('\n\t\t', candidate); - const candidateEnd = project.indexOf('\n\t\t};', candidate); - const config = project.slice(candidateStart, candidateEnd); - if (config.includes('name = Release;')) { - blockStart = project.indexOf('buildSettings = {', candidateStart); - blockEnd = project.indexOf('\n\t\t\t\t};', candidate); - break; - } - searchFrom = candidate + marker.length; - } - if (blockStart === -1 || blockEnd === -1) throw new Error(`Could not find ${bundle} build settings block`); + const escapedMarker = marker.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + const releaseBlockPattern = new RegExp(`\\n\\t\\t[^\\n]+/\\* Release \\*/ = \\{[\\s\\S]*?${escapedMarker}[\\s\\S]*?\\n\\t\\t\\};`); + const match = project.match(releaseBlockPattern); + if (!match) throw new Error(`Could not find ${bundle} Release build settings block`); - const before = project.slice(0, blockStart); - let block = project.slice(blockStart, blockEnd); - const after = project.slice(blockEnd); + let block = match[0]; block = block.replace(/CODE_SIGN_STYLE = Automatic;/, 'CODE_SIGN_STYLE = Manual;'); if (!block.includes('DEVELOPMENT_TEAM = ')) { @@ -251,7 +236,7 @@ jobs: block = block.replace(`${marker}\n`, `${marker}\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = "${profile}";\n`); } - project = `${before}${block}${after}`; + project = project.replace(match[0], block); } writeFileSync(projectPath, project);