From b73e744684f98816051d863932c5e50e2529128a Mon Sep 17 00:00:00 2001 From: alastair-simon Date: Tue, 12 May 2026 18:51:16 +0200 Subject: [PATCH 1/6] fix: throw error when icons fail to sync --- packages/icon-kit/src/index.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/packages/icon-kit/src/index.ts b/packages/icon-kit/src/index.ts index c316c0715..919d19bb4 100644 --- a/packages/icon-kit/src/index.ts +++ b/packages/icon-kit/src/index.ts @@ -56,14 +56,16 @@ client spinner.text = `Optimized ${0} out of ${iconMap.size} icons`; const styling = [] as { name: string; width: string; height: string }[]; + const failedIcons: { iconName: string; error: Error }[] = []; await PromisePool.for(Array.from(iconMap.keys())) .withConcurrency(25) .onTaskFinished((iconName, pool) => { spinner.text = `Optimized ${pool.processedCount()} out of ${iconMap.size} icons`; }) - .handleError((error) => { - console.log(error); + .handleError((error, iconName) => { + logger.info(`Failed to process icon: "${iconName}"`, { error }); + failedIcons.push({ iconName, error: error as Error }); }) .process(async (iconName: string) => { const icon = iconMap.get(iconName); @@ -143,6 +145,18 @@ client }); }); + if (failedIcons.length > 0) { + spinner.warn( + `Completed with ${failedIcons.length} failed icon(s) out of ${iconMap.size}:` + ); + failedIcons.forEach(({ iconName, error }) => { + console.error(` ✗ ${iconName}: ${error.message}`); + }); + throw new Error( + `Sync failed: ${failedIcons.length} icon(s) could not be processed` + ); + } + spinner.text = "Finished writing icons to filesystem"; spinner.text = "Creating stylesheet"; From 2356618d656b77e255eba14ab66f82b70fbb6397 Mon Sep 17 00:00:00 2001 From: alastair-simon Date: Tue, 12 May 2026 19:06:45 +0200 Subject: [PATCH 2/6] fix: use puppeteer install.js to download correct Chromium revision --- .github/workflows/update-icons.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/update-icons.yml b/.github/workflows/update-icons.yml index e505a326e..db2e62204 100644 --- a/.github/workflows/update-icons.yml +++ b/.github/workflows/update-icons.yml @@ -25,8 +25,8 @@ jobs: - name: Install dependencies run: pnpm i --frozen-lockfile --prefer-offline - - name: Install puppeteer - run: npx @puppeteer/browsers install chrome + - name: Install puppeteer chromium + run: node node_modules/puppeteer/install.js - name: Update icons run: pnpm --filter @shopware-ag/meteor-icon-kit run start From d8f114465db721a002350d3250fdb6381b16bfb4 Mon Sep 17 00:00:00 2001 From: alastair-simon Date: Tue, 12 May 2026 19:48:40 +0200 Subject: [PATCH 3/6] fix: patch svgo-autocrop --- .github/workflows/update-icons.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/update-icons.yml b/.github/workflows/update-icons.yml index db2e62204..9850b2734 100644 --- a/.github/workflows/update-icons.yml +++ b/.github/workflows/update-icons.yml @@ -28,6 +28,10 @@ jobs: - name: Install puppeteer chromium run: node node_modules/puppeteer/install.js + - name: Patch svgo-autocrop for CI + run: | + sed -i 's/Puppeteer\.launch()/Puppeteer.launch({ args: ["--no-sandbox", "--disable-setuid-sandbox"] })/' node_modules/svgo-autocrop/lib/Browser.js + - name: Update icons run: pnpm --filter @shopware-ag/meteor-icon-kit run start From 1e9088984b48763fc2d78f6550aa7b825b81d701 Mon Sep 17 00:00:00 2001 From: alastair-simon Date: Tue, 12 May 2026 19:53:20 +0200 Subject: [PATCH 4/6] fix: lint error index.ts --- packages/icon-kit/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/icon-kit/src/index.ts b/packages/icon-kit/src/index.ts index 919d19bb4..e8eb7e9c1 100644 --- a/packages/icon-kit/src/index.ts +++ b/packages/icon-kit/src/index.ts @@ -65,7 +65,7 @@ client }) .handleError((error, iconName) => { logger.info(`Failed to process icon: "${iconName}"`, { error }); - failedIcons.push({ iconName, error: error as Error }); + failedIcons.push({ iconName, error }); }) .process(async (iconName: string) => { const icon = iconMap.get(iconName); From 162486b78aa53c9dab1e0a5fa0d5e8bc6f6a4718 Mon Sep 17 00:00:00 2001 From: alastair-simon Date: Tue, 12 May 2026 20:07:45 +0200 Subject: [PATCH 5/6] chore: upgrade GitHub Actions to current stable versions --- .github/workflows/update-icons.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/update-icons.yml b/.github/workflows/update-icons.yml index 9850b2734..ebd78ea06 100644 --- a/.github/workflows/update-icons.yml +++ b/.github/workflows/update-icons.yml @@ -13,11 +13,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v6 + uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 - - uses: actions/setup-node@v6 + - uses: actions/setup-node@v4 with: node-version: "24" cache: "pnpm" @@ -36,7 +36,7 @@ jobs: run: pnpm --filter @shopware-ag/meteor-icon-kit run start - name: Create Pull Request - uses: peter-evans/create-pull-request@v4 + uses: peter-evans/create-pull-request@v7 with: commit-message: Update icons committer: Dennis Mader <${{ secrets.ICON_KIT__COMMITTER }}> From fa74720cb9a351b8d94c9cc1e47c2c7f92bbeddc Mon Sep 17 00:00:00 2001 From: alastair-simon Date: Mon, 8 Jun 2026 15:52:13 +0200 Subject: [PATCH 6/6] fix: pin and verify puppeteer chromium path in update-icons workflow --- .github/workflows/update-icons.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/update-icons.yml b/.github/workflows/update-icons.yml index ebd78ea06..362d84e21 100644 --- a/.github/workflows/update-icons.yml +++ b/.github/workflows/update-icons.yml @@ -28,6 +28,16 @@ jobs: - name: Install puppeteer chromium run: node node_modules/puppeteer/install.js + - name: Pin puppeteer chromium path + run: | + CHROMIUM="$(node -e 'console.log(require("puppeteer").executablePath())')" + echo "Resolved Chromium: $CHROMIUM" + if [ ! -x "$CHROMIUM" ]; then + echo "::error::Chromium not found at $CHROMIUM after puppeteer install" + exit 1 + fi + echo "PUPPETEER_EXECUTABLE_PATH=$CHROMIUM" >> "$GITHUB_ENV" + - name: Patch svgo-autocrop for CI run: | sed -i 's/Puppeteer\.launch()/Puppeteer.launch({ args: ["--no-sandbox", "--disable-setuid-sandbox"] })/' node_modules/svgo-autocrop/lib/Browser.js