From 16ede0c0277b576acb079b3cffa8292de72a499a Mon Sep 17 00:00:00 2001 From: Matysh Date: Sat, 26 Sep 2026 22:51:14 +0300 Subject: [PATCH] =?UTF-8?q?ci:=20=D0=BE=D1=87=D0=B8=D1=89=D0=B0=D1=82?= =?UTF-8?q?=D1=8C=20dist=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=20=D1=80=D0=B0?= =?UTF-8?q?=D1=81=D0=BF=D0=B0=D0=BA=D0=BE=D0=B2=D0=BA=D0=BE=D0=B9=20=D0=B1?= =?UTF-8?q?=D0=B0=D0=BD=D0=B4=D0=BB=D0=B0=20(#663)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue: #663 User-Visible: no --- .github/workflows/validate.yml | 16 ++++++++++++++++ test/validate-workflow.test.mjs | 5 +++++ 2 files changed, 21 insertions(+) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index c605ee82..217c09f5 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -847,6 +847,13 @@ jobs: - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7 with: node-version: 22 + # download-artifact распаковывает поверх checkout и не удаляет старые + # content-hashed чанки закоммиченного release-бандла (#657). Свежий + # артефакт должен быть единственным содержимым dist, иначе bundle-tree + # справедливо видит оставшиеся файлы как orphan assets. + - name: Очистить закоммиченный dist перед артефактом + run: | + node -e "require('node:fs').rmSync('dist', { recursive: true, force: true })" - name: Забрать собранный бандл uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7 with: @@ -893,6 +900,9 @@ jobs: # Бандл приходит артефактом из job `frontend` (#336): та же сборка, но # один раз на прогон. Свежесть проверяет сам продукт — `assertFreshDemoBundle` # сверяет вшитый отпечаток с исходниками этого дерева. + - name: Очистить закоммиченный dist перед артефактом + run: | + node -e "require('node:fs').rmSync('dist', { recursive: true, force: true })" - name: Забрать собранный бандл uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7 with: @@ -1013,6 +1023,9 @@ jobs: # Бандл приходит артефактом из job `frontend` (#336): та же сборка, но # один раз на прогон. Свежесть проверяет сам продукт — `assertFreshDemoBundle` # сверяет вшитый отпечаток с исходниками этого дерева. + - name: Очистить закоммиченный dist перед артефактом + run: | + node -e "require('node:fs').rmSync('dist', { recursive: true, force: true })" - name: Забрать собранный бандл uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7 with: @@ -1117,6 +1130,9 @@ jobs: # Бандл приходит артефактом из job `frontend` (#336): та же сборка, но # один раз на прогон. Свежесть проверяет сам продукт — `assertFreshDemoBundle` # сверяет вшитый отпечаток с исходниками этого дерева. + - name: Очистить закоммиченный dist перед артефактом + run: | + node -e "require('node:fs').rmSync('dist', { recursive: true, force: true })" - name: Забрать собранный бандл uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7 with: diff --git a/test/validate-workflow.test.mjs b/test/validate-workflow.test.mjs index 919407df..32110270 100644 --- a/test/validate-workflow.test.mjs +++ b/test/validate-workflow.test.mjs @@ -57,6 +57,11 @@ test('бандл собирается один раз и приезжает бр assert.equal(builds.length, 1, 'бандл должен собираться ровно в одной job'); assert.equal(workflow.match(/name: card-bundle/g)?.length, 5, 'один upload и четыре download артефакта бандла (три браузерные job и стенд dev, #657)'); + const cleanDownloads = workflow.match( + /- name: Очистить закоммиченный dist перед артефактом\n\s+run: \|\n\s+node -e "require\('node:fs'\)\.rmSync\('dist', \{ recursive: true, force: true \}\)"\n\s+- name: Забрать собранный бандл\n\s+uses: actions\/download-artifact@[0-9a-f]+ # v7\n\s+with:\n\s+name: card-bundle\n\s+path: dist/g, + ) || []; + assert.equal(cleanDownloads.length, 4, + 'каждый download свежего бандла обязан сначала удалить старые content-hashed чанки checkout'); assert.equal(workflow.match(/name: card-test-build/g)?.length, 2, 'один upload и один download тестового дерева для smoke job'); assert.match(workflow, /name: card-test-build\n\s+path: test-build\//,