sdds-infra: Avoid poison cache from fork#2812
Conversation
📝 WalkthroughWalkthroughThe prepare-environment composite action now detects fork trust context and gates npm and Cypress cache writes conditionally: trusted runs cache and restore, untrusted runs restore only. Dependencies install unconditionally, Cypress binaries verify before patching, and four workflows delegate to the remote action. Theme-builder switches from pull_request_target to pull_request triggering. ChangesCache Safety and Workflow Security Updates
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~22 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
|
Theme Builder app deployed! https://plasma.sberdevices.ru/pr/plasma-theme-builder-pr-2812/ |
08346c2 to
05c5e1c
Compare
| pull_request: | ||
| branches: | ||
| - master | ||
| pull_request_target: |
There was a problem hiding this comment.
[note]: Нет никого смысла запускать сборку builder для pr через fork
05c5e1c to
1892548
Compare
What/why changed
Postmortem: https://tanstack.com/blog/npm-supply-chain-compromise-postmortem.
А что у нас?
У нас тот же паттерн, на пример в
documentation-deploy-pr.ymlходит наpull_request_targetи через цепочкуchange-detection/publish-commonиспользует один и тот жеprepare-environment, который писал в общий cache.Fork PR мог положить туда подменённые tarball'ы под ключом
hashFiles(package-lock.json), а следующий доверенный запуск (publish-canary, deploy с dev) подтянул бы их к себе. Этот PR закрывает вектор.Что меняется?
prepare-environment/action.yml— основной фикс:event_name == pull_request_targetиhead.repo != base.repo(fork) — контекст помечаетсяuntrusted=true.actions/cache(restore + post-save). В untrusted —actions/cache/restore(только чтение, без post-step save). Запись отрублена на уровне типа action'а, а не permissions: cache использует runner-internal token,permissions:его не ограничивает (как раз грабли TanStack).npm-trusted-…). Fork PR'ы переиспользуют доверенный кэш.restore-keys. Partial-match по мутированному lockfile позволил бы подмешать чужие tarball'ы к проверенному кешу.node_modulescache. Это уже распакованные/исполнимые артефакты — отравленныйnode_modulesисполняется на первой же команде. Кэшируем только~/.npm(tarball'ы, валидируются по integrity из lockfile) и~/.cache/Cypress(бинарь, дополнительно проверяетсяcypress verify).actions/setup-node,actions/cache) — рекомендация из postmortem, исключает скрытую подмену тэга.npx cypress verify— доп. интегрити-проверка бинаря против установленного пакета (ловит рассинхрон/повреждение кэша).📦 Published PR as canary version:
Canary Versions✨ Test out this PR locally via:
npm install @salutejs/plasma-asdk@0.377.1-canary.2812.26529554789.0 npm install @salutejs/plasma-b2c@1.619.1-canary.2812.26529554789.0 npm install @salutejs/plasma-core@1.227.1-canary.2812.26529554789.0 npm install @salutejs/plasma-giga@0.346.1-canary.2812.26529554789.0 npm install @salutejs/plasma-homeds@0.346.1-canary.2812.26529554789.0 npm install @salutejs/plasma-hope@1.373.1-canary.2812.26529554789.0 npm install @salutejs/plasma-icons@1.238.1-canary.2812.26529554789.0 npm install @salutejs/plasma-new-hope@0.363.1-canary.2812.26529554789.0 npm install @salutejs/plasma-tokens-b2b@1.55.1-canary.2812.26529554789.0 npm install @salutejs/plasma-tokens-b2c@0.66.1-canary.2812.26529554789.0 npm install @salutejs/plasma-tokens-web@1.70.1-canary.2812.26529554789.0 npm install @salutejs/plasma-tokens@1.139.1-canary.2812.26529554789.0 npm install @salutejs/plasma-typo@0.43.1-canary.2812.26529554789.0 npm install @salutejs/plasma-ui@1.349.1-canary.2812.26529554789.0 npm install @salutejs/plasma-web@1.621.1-canary.2812.26529554789.0 npm install @salutejs/sdds-bizcom@0.351.1-canary.2812.26529554789.0 npm install @salutejs/sdds-cs@0.355.1-canary.2812.26529554789.0 npm install @salutejs/sdds-dfa@0.349.1-canary.2812.26529554789.0 npm install @salutejs/sdds-finai@0.342.1-canary.2812.26529554789.0 npm install @salutejs/sdds-insol@0.346.1-canary.2812.26529554789.0 npm install @salutejs/sdds-netology@0.350.1-canary.2812.26529554789.0 npm install @salutejs/sdds-os@0.21.1-canary.2812.26529554789.0 npm install @salutejs/sdds-platform-ai@0.350.1-canary.2812.26529554789.0 npm install @salutejs/sdds-sbcom@0.351.1-canary.2812.26529554789.0 npm install @salutejs/sdds-scan@0.349.1-canary.2812.26529554789.0 npm install @salutejs/sdds-serv@0.350.1-canary.2812.26529554789.0 npm install @salutejs/core-themes@0.30.1-canary.2812.26529554789.0 npm install @salutejs/plasma-themes@0.51.1-canary.2812.26529554789.0 npm install @salutejs/sdds-themes@0.66.1-canary.2812.26529554789.0 npm install @salutejs/sdds-api-tests@0.8.1-canary.2812.26529554789.0 npm install @salutejs/plasma-cy-utils@0.157.1-canary.2812.26529554789.0 npm install @salutejs/plasma-sb-utils@0.227.1-canary.2812.26529554789.0 npm install @salutejs/plasma-tokens-utils@0.51.1-canary.2812.26529554789.0 # or yarn add @salutejs/plasma-asdk@0.377.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-b2c@1.619.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-core@1.227.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-giga@0.346.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-homeds@0.346.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-hope@1.373.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-icons@1.238.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-new-hope@0.363.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-tokens-b2b@1.55.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-tokens-b2c@0.66.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-tokens-web@1.70.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-tokens@1.139.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-typo@0.43.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-ui@1.349.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-web@1.621.1-canary.2812.26529554789.0 yarn add @salutejs/sdds-bizcom@0.351.1-canary.2812.26529554789.0 yarn add @salutejs/sdds-cs@0.355.1-canary.2812.26529554789.0 yarn add @salutejs/sdds-dfa@0.349.1-canary.2812.26529554789.0 yarn add @salutejs/sdds-finai@0.342.1-canary.2812.26529554789.0 yarn add @salutejs/sdds-insol@0.346.1-canary.2812.26529554789.0 yarn add @salutejs/sdds-netology@0.350.1-canary.2812.26529554789.0 yarn add @salutejs/sdds-os@0.21.1-canary.2812.26529554789.0 yarn add @salutejs/sdds-platform-ai@0.350.1-canary.2812.26529554789.0 yarn add @salutejs/sdds-sbcom@0.351.1-canary.2812.26529554789.0 yarn add @salutejs/sdds-scan@0.349.1-canary.2812.26529554789.0 yarn add @salutejs/sdds-serv@0.350.1-canary.2812.26529554789.0 yarn add @salutejs/core-themes@0.30.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-themes@0.51.1-canary.2812.26529554789.0 yarn add @salutejs/sdds-themes@0.66.1-canary.2812.26529554789.0 yarn add @salutejs/sdds-api-tests@0.8.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-cy-utils@0.157.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-sb-utils@0.227.1-canary.2812.26529554789.0 yarn add @salutejs/plasma-tokens-utils@0.51.1-canary.2812.26529554789.0Summary by CodeRabbit