deps: zbiorcza aktualizacja 8 PR-ów dependabota (uv + actions + yarn) — zamyka 4 CVE i odblokowuje pip-audit - #809
Open
mpasternak wants to merge 4 commits into
Open
deps: zbiorcza aktualizacja 8 PR-ów dependabota (uv + actions + yarn) — zamyka 4 CVE i odblokowuje pip-audit#809mpasternak wants to merge 4 commits into
mpasternak wants to merge 4 commits into
Conversation
Trzy PR-y dependabota z ekosystemu github-actions, scalone recznie zamiast mergowania po kolei. Wszystkie to podmiana SHA przy zachowanym pinowaniu do commita + komentarz z tagiem (polityka repo: akcje pinowane po SHA, nie po ruchomym tagu). * anthropics/claude-code-action 1.0.193 -> 1.0.216 (#806) .github/workflows/claude.yml * actions/deploy-pages 5.0.0 -> 5.0.1 (#805) .github/workflows/docs.yml * docker/setup-buildx-action 4.2.0 -> 4.3.0 (#788) build-docker-images.yml (2x), promote.yml, release-candidate.yml, tests.yml Weryfikacja: po podmianie w drzewie nie zostal ani jeden ze starych SHA (grep po .github/ pusty). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011aZqYiv56cwAudG2CPS3k5
Zaleznosc przechodnia (przez postcss-modules-*), wiec `yarn upgrade postcss-selector-parser` jej nie rusza — podniesiony wpis w yarn.lock wprost, wersja/resolved/integrity wziete z PR-a dependabota. Weryfikacja: `yarn install --frozen-lockfile` przechodzi (lock rozwiazuje sie bez zmian, integrity zgadza sie z tarballem z rejestru), a node_modules/postcss-selector-parser/package.json raportuje 7.1.5. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011aZqYiv56cwAudG2CPS3k5
…ruffa Cztery PR-y dependabota z ekosystemu uv, scalone recznie w jedna zmiane. Powod: kazdy z nich rusza uv.lock, wiec mergowanie po kolei wymusza rebase i osobny przebieg CI dla kazdego kolejnego. Grupa python-minor-and-patch (#807), 12 pakietow: simplejson 4.1.1 -> 4.1.2 django-flexible-reports 0.4.2 -> 0.5.0 django-tables2 3.0.0 -> 3.0.1 nh3 0.3.6 -> 0.3.7 cryptography 50.0.0 -> 50.0.1 (tylko lock) crispy-bootstrap5 2026.3 -> 2026.9 xhtml2pdf 0.2.17 -> 0.2.18 gunicorn 26.0.0 -> 26.2.0 django-oauth-toolkit 3.4.0 -> 3.4.1 pytest-rerunfailures 16.5 -> 16.6.1 ruff 0.16.3 -> 0.16.6 djlint 1.44.2 -> 1.45.0 (tylko lock) Pozostale trzy PR-y: uvicorn[standard] 0.52.3 -> 0.52.4 (#790) pypdf 6.15.0 -> 6.16.1 (#799) webob 1.8.10 -> 1.8.11 (#794) BEZPIECZENSTWO — pypdf i webob zamykaja 4 fixable CVE, ktore od kilku dni wywalaja gate `pip-audit` (job "pip-audit scan"), blokujac takze niezwiazane PR-y (m.in. #804): pypdf 6.15.0 CVE-2026-84309 / -84310 / -84311 fix: 6.16.1 webob 1.8.10 CVE-2026-54770 fix: 1.8.11 Weryfikacja lokalna, dokladnie ta komenda co w CI (uv export --no-dev | pip-audit --disable-pip --no-deps): przed zmiana "Found 4 known vulnerabilities in 2 packages", po zmianie "No known vulnerabilities found". RUFF — bump 0.16.3 -> 0.16.6 wymaga rownoleglej zmiany rev w .pre-commit-config.yaml. To sa dwa fizycznie rozne binaria (pre-commit buduje wlasne srodowisko z wheela spod `rev:`), a dependabot tego sprzezenia nie widzi, bo sledzi tylko ekosystem uv. Pilnuje tego bramka bin/check-ruff-pin-sync.py — sam PR #807 by ja wywalil. Po synchronizacji skrypt zwraca 0. Ruff 0.16.6 nie wnosi nowych naruszen: na tym drzewie 0.16.3 i 0.16.6 daja identyczny wynik — 122 errors z tym samym rozkladem regul oraz 124 pliki do reformatu. Caly ten dlug jest pre-existing na dev i zgodnie z konwencja repo (lint changed-files-only) zostaje nietkniety. COOLDOWN — `uv lock --upgrade-package` celuje w najnowsze wydanie, co po cichu omija 3-dniowy cooldown z .github/dependabot.yml (ochrona przed atakami typu LiteLLM). Dwa pakiety przestrzelilo i zostaly przypiete do wersji, ktore odlezaly swoje: djlint 1.46.1 wydany dzis (2026-09-08) -> przypiety 1.45.0 (2026-09-03) pypdf 6.18.0 wydany wczoraj -> przypiety 6.16.1 (2026-08-14) WERSJA uv UZYTA DO PRZELICZENIA LOCKA — celowo `uv@0.11.29`, czyli pin z CI (setup-uv w jobach `lockfile` / `lint` / `pip-audit`), a NIE lokalne uv 0.11.14 ani 0.11.15 z hooka uv-pre-commit. Powod: przy przeliczaniu locka starsze uv rozpisuje marker `platform_python_implementation != 'PyPy'` na cala rozwiazana grafe zaleznosci — 13 wystapien rosnie do ~700, a diff uv.lock puchnie z ~500 do ~1900 linii czystego szumu. Wersje pakietow wychodza identyczne (sprawdzone: 367 pakietow, zero roznic w parach nazwa/wersja), wiec to wylacznie metadane, ale zasmiecaja review pliku, ktory trzeba czytac uwaznie. Zweryfikowane empirycznie: to samo `--upgrade-package simplejson` na czystym dev daje 700 markerow pod 0.11.14 i 0.11.15, a 13 pod 0.11.29. UWAGA: komentarz przy hooku uv-pre-commit w .pre-commit-config.yaml ("Trzymaj z grubsza w parze z wersja uv w uzyciu (obecnie 0.11.14)") jest wiec juz nieaktualny i doradza dokladnie to, co produkuje churn. Lock na dev pochodzi z nowszego uv. Aktualizacja tego komentarza i pinu hooka to osobna zmiana, poza zakresem tego PR-a. Reszta lockfile bez zmian — uzyty celowany `--upgrade-package` dla 15 pakietow, nie zbiorczy `uv lock --upgrade`. Diff uv.lock to 15 zmian wersji + ich sdist/wheels, 11 linii `requires-dist` (lustro zmian w pyproject.toml) i jedna usunieta zaleznosc `packaging`, ktora gunicorn 26.2.0 porzucil u siebie. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011aZqYiv56cwAudG2CPS3k5
…ice z requires-python Linia `environments` w [tool.uv] jest load-bearing, a stala bez slowa wyjasnienia. Wjechala commitem 0f3f049 o wiadomosci "Prepare fix, maybe" (2025-10-14) — razem z `urllib3>=2.2.3` i `vcrpy>=6.0.2`, i to byl wlasnie ten fix, tylko nigdzie nieopisany. Odtworzenie powodu zajelo osobne sledztwo, wiec zapisuje je przy samej linii. POWOD HISTORYCZNY. uv robi universal resolution: jeden lock ma byc poprawny dla kazdej platformy i kazdego interpretera, takze takiego, ktorego nigdy nie uruchomimy. vcrpy 6.0.2 deklarowalo: urllib3; platform_python_implementation != "PyPy" and python_version >= "3.10" urllib3<2; platform_python_implementation == "PyPy" czyli galaz PyPy zadala urllib3<2, nie do pogodzenia z urllib3>=2.2.3. Wykluczenie PyPy kasuje te galaz i odblokowuje rezolucje. STAN OBECNY — zweryfikowany, nie zgadniety. Przeskanowany caly graf z uv.lock (364 pakiety z rejestru, 3 pominiete jako editable/git, zero bledow pobrania metadanych). Warunki `== "PyPy"` wystepuja w czterech miejscach: celery 5.6.3 brotlipy>=0.7.0 extra == "brotli" fonttools 4.62.1 munkres extra == "all" fonttools 4.62.1 munkres extra == "interpolatable" jaraco-functools 4.4.0 mypy<1.19 extra == "type" Wszystkie cztery siedza za extrasami, ktorych nie wlaczamy — brotlipy, munkres ani mypy nie wystepuja w uv.lock, a z fonttools bierzemy wylacznie extra `woff`. vcrpy 8.3.0 nie ma juz swojego warunku. Zdjecie wykluczenia daje dzis DOKLADNIE te same wersje: 367 pakietow, zero roznic w parach nazwa/wersja. Zostaje mimo to — kosztuje 13 linii resolution-markers w naglowku locka i chroni przed powtorka klasy problemu, ktora juz raz zablokowala rezolucje. Bez niego cryptography, pynacl i uvicorn[standard] odzyskuja markery PyPy na krawedziach do cffi/uvloop, wiec lock i tak nie robi sie prostszy. DOLNA GRANICA. `python_version >= '3.10'` -> `>= '3.11'`. Byla martwa (przeciecie z requires-python = ">=3.11,<3.15" i tak dawalo 3.11), ale mylnie sugerowala wsparcie dla 3.10. uv.lock po tej zmianie jest BIT W BIT identyczny (`uv lock` nie ruszyl pliku, `uv lock --check` przechodzi) — to zmiana czysto opisowa. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011aZqYiv56cwAudG2CPS3k5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Zbiorcza aktualizacja zaległych zależności — zastępuje 8 otwartych PR-ów
dependabota: #807, #806, #805, #799, #798, #794, #790, #788.
Dlaczego zbiorczo, a nie merge po kolei
Cztery z tych PR-ów (#807, #799, #794, #790) ruszają ten sam plik
uv.lock. Zmergowanie pierwszego unieważnia pozostałe trzy — dependabotmusi je przerebase'ować, każdy z osobnym pełnym przebiegiem CI. Jedna
zmiana rozwiązuje lock raz.
Do tego #807 sam z siebie nie przeszedłby bramki repo: podbija
ruff==0.16.3 -> 0.16.6wpyproject.toml, ale dependabot śledzi tylkoekosystemy
uv/github-actions/docker, więc nie widzi drugiego pinuruffa w
.pre-commit-config.yaml. Pilnuje ichbin/check-ruff-pin-sync.py.Tutaj oba są podniesione razem.
🔒 Bezpieczeństwo — 4 fixable CVE, odblokowuje gate
pip-auditpypdfiwebobzamykają cztery CVE, które od kilku dni wywalają jobpip-audit scani blokują też niezwiązane PR-y (m.in. #804):Weryfikacja lokalna dokładnie tą komendą, co w CI (
uv export --no-dev→pip-audit --disable-pip --no-deps):Found 4 known vulnerabilities in 2 packagesNo known vulnerabilities foundCo się zmienia
Python —
uv(#807, #799, #794, #790)Użyty celowany
uv lock --upgrade-package(15 pakietów), nie zbiorczyuv lock --upgrade— reszta lockfile bez ruchu.GitHub Actions (#806, #805, #788)
anthropics/claude-code-action1.0.193 → 1.0.216actions/deploy-pages5.0.0 → 5.0.1docker/setup-buildx-action4.2.0 → 4.3.0 (5 miejsc w 4 workflowach)Pinowanie po SHA zachowane, komentarze z tagiem zaktualizowane.
npm / yarn (#798)
postcss-selector-parser7.1.1 → 7.1.5 (zależność przechodnia przezpostcss-modules-*, więcyarn upgradejej nie rusza)django-oauth-toolkit3.4.1Dependabot oznaczył to jako semver-patch, ale release jest „dominated by
security hardening" i zmienia zachowanie:
redirect_uriwg RFC 9700 §2.1 — żądanie nie może jużnieść query/path params, credentials ani fragmentu, których nie ma
w zarejestrowanym URI.
redirect_to_uri_allowed()→check_redirect_to_uri_allowed(); kodowijający starą nazwę przestaje wpływać na decyzję.
REFRESH_TOKEN_EXPIRE_SECONDSegzekwowane przy okazaniu refreshtokena, nie tylko przez zamiatanie
cleartokens.collectstatic.Sprawdzone w tym repo:
src/oauth_mcp/views_dcr.pyzapisujeredirect_urisdokładnie tak, jak zadeklarował klient (allowlista wzorców tylko
filtruje), a klient odsyła ten sam URI w
/authorize→ exact match sięspina. Pokryte testami
oauth_mcp/tests/test_authorize.py,test_flow_integration.py,test_consent.py.src/jakiegokolwiek wywołania/owinięciaredirect_to_uri_allowedaniredirect_uri_allowed→ nie dotyczy.settings/base.pyma jużREFRESH_TOKEN_EXPIRE_SECONDS = 7 dniz komentarzem „(NIE None!)" — nowe egzekwowanie realizuje intencję, która
do tej pory działała tylko przy zamiataniu. Efekt w produkcji: refresh
tokeny starsze niż 7 dni będą odrzucane od razu przy odświeżeniu.
collectstaticleci w build stage obrazu (kontrakt static files)oraz w
make assets→ pokryte.Pozostałe dwa nieoczywiste bumpy sprawdzone w changelogach:
django-flexible-reports0.5.0 to czysty dodatek (Report.set_order_by,ColumnOrdernietknięty),crispy-bootstrap52026.9 to samo „Confirmedsupport for Django 6.1" bez zmian w kodzie.
Cooldown — dwa pakiety cofnięte
uv lock --upgrade-packageceluje w najnowsze wydanie, co po cichu omija3-dniowy cooldown z
.github/dependabot.yml(ochrona przed atakami typuLiteLLM). Dwa pakiety przestrzeliły i zostały przypięte do wersji, które
odleżały swoje:
uvchciał🔎 Znalezione po drodze: pin
uvw.pre-commit-config.yamljest nieaktualnyLock przeliczony celowo przez
uv@0.11.29— pin z CI (setup-uvw jobach
lockfile/lint/pip-audit), a nie lokalnymuv 0.11.14ani
0.11.15z hookauv-pre-commit.Powód: przy przeliczaniu locka starsze
uvrozpisuje markerplatform_python_implementation != 'PyPy'na całą rozwiązaną grafę —13 wystąpień rośnie do ~700, a diff
uv.lockpuchnie z ~500 do ~1900linii czystego szumu. Wersje pakietów wychodzą identyczne (sprawdzone:
367 pakietów, zero różnic w parach nazwa/wersja;
uv pip listpouv syncteż bit w bit ten sam), więc to wyłącznie metadane — ale zaśmiecają review
pliku, który trzeba czytać uważnie.
Zweryfikowane empirycznie — to samo
uv lock --upgrade-package simplejsonna czystym
dev:!= 'PyPy'uv-pre-commit)Komentarz przy hooku
uv-pre-commitmówi „Trzymaj z grubsza w parzez wersją uv w użyciu (obecnie 0.11.14)" — doradza dokładnie to, co
produkuje churn, bo lock na
devpochodzi z nowszegouv.Aktualizacja tego komentarza i pinu hooka to osobna zmiana, świadomie
poza zakresem tego PR-a.
Zakres problemu jest przy tym węższy, niż brzmi — sprawdzone wprost:
uv 0.11.15)uv lockpyproject.toml→ wymuszone przeliczenieCzyli hook nie psuje zwykłych commitów; odpala się dopiero w PR-ach, które
realnie ruszają zależności — czyli takich jak ten.
📌 Dorzucone: dokumentacja
[tool.uv] environments(commiteda88c665)Przy okazji analizy locka wyszło, że linia
environmentsw[tool.uv]jest load-bearing, ale nieudokumentowana. Weszła commitem
0f3f049e0o wiadomości „Prepare fix, maybe" (2025-10-14) — razem z
urllib3>=2.2.3i
vcrpy>=6.0.2, i to był właśnie ten fix, tylko nigdzie nieopisany.Powód:
uvrobi universal resolution — jeden lock ma być poprawny dlakażdego interpretera, także nigdy nieuruchamianego. vcrpy 6.0.2 miało:
Gałąź PyPy żądała
urllib3<2, nie do pogodzenia zurllib3>=2.2.3.Wykluczenie PyPy kasuje tę gałąź.
Czy dziś jeszcze potrzebne — sprawdzone, nie zgadnięte. Przeskanowany
cały graf z
uv.lock: 364 pakiety z rejestru (3 pominięte jakoeditable/git), zero błędów pobrania metadanych. Warunki
== "PyPy"są w czterech miejscach:
brotlipy>=0.7.0extra == "brotli"munkresextra == "all"munkresextra == "interpolatable"mypy<1.19extra == "type"Wszystkie cztery są uśpione — te extras nie są włączone;
brotlipy,munkresanimypynie występują wuv.lock, a z fonttools bierzemywyłącznie
[woff]. vcrpy 8.3.0 nie ma już swojego warunku.Zdjęcie wykluczenia daje dziś dokładnie te same wersje (367 pakietów,
zero różnic). Zostaje mimo to jako tanie ubezpieczenie — kosztuje 13 linii
resolution-markers, a bez niegocryptography,pynacliuvicorn[standard]i tak odzyskują markery PyPy na krawędziach docffi/uvloop, więc lock nie robi się prostszy.Dodatkowo dolna granica
python_version >= '3.10'→>= '3.11'. Byłamartwa (przecięcie z
requires-python = ">=3.11,<3.15"i tak dawało 3.11),ale mylnie sugerowała wsparcie dla 3.10.
uv.lockpo tej zmianie jestbit w bit identyczny — zmiana czysto opisowa.
Weryfikacja
pip-audit(komenda z CI)No known vulnerabilities found(przed: 4 CVE)uv lock --check(uv 0.11.29, jak w CI)bin/check-ruff-pin-sync.pyyarn install --frozen-lockfilenode_modulesraportuje 7.1.5zizmorna zmienionych workflowachactionlintrelease-candidate.yml— identycznie na dev (pre-existing, patrz niżej)make tests(pełne, lokalnie)EXIT: 0make tests-without-playwrightna finalnym lockuuv@0.11.29Zestaw zainstalowanych pakietów przed i po przeliczeniu locka jest
identyczny (
uv pip list --format=freeze— zero różnic), więc pełnyprzebieg
make testspowyżej pozostaje ważnym dowodem; mimo to suitaPythona została powtórzona na finalnym locku.
.test_durationscelowo nie jest w tym PR —make testsodświeża goprzez
--store-durations, ale to 5679 linii szumu z timingów tej maszyny,bez związku z aktualizacją zależności.
Uwaga poboczna (NIE naprawiane w tym PR)
Wyciszenie SC2086 w
.github/actionlint.yamljest zawężone dotests.yml, ale ten sam zamierzony wzorzec$COMPOSE_FILESdorobił sięw międzyczasie
release-candidate.yml. Hookactionlintfailuje więclokalnie każdemu, kto dotknie tego pliku — findings są pre-existing
(7 na dev, 7 tutaj), a
actionlintnie jest checkiem CI (joblintodpala po nazwie tylko
ruffiruff-format), więc tego PR-a nieblokuje. Poszerzenie wyciszenia to osobna zmiana.
Zamknięcie PR-ów dependabota
Po zmergowaniu dependabot sam zamknie #807, #806, #805, #799, #798,
#794, #790 i #788 — wykryje, że zależności są już podniesione na gałęzi
bazowej. Ręczne zamykanie nie jest potrzebne.
🤖 Generated with Claude Code
https://claude.ai/code/session_011aZqYiv56cwAudG2CPS3k5