Przemysław Zalewski

Utrzymanie, aktualizacje i CI/CD

Programista DevOps, który aktualizuje i migruje bez przestojów

Zależności kilka wersji głównych w tyle, Postgres 14 bez wsparcia od 12 listopada 2026, a wdrożyć umie tylko jedna osoba? Aktualizuję falami, które da się cofnąć, migruję bazy i hosting bez wielkiego wybuchu i stawiam CI/CD w GitHub Actions i Dockerze, które uruchomi każdy w zespole. Platforma list supresji, którą prowadziłem, wdrażała się blue/green bez przestoju przy 300+ GB w Postgresie. Wklej niżej package.json i dostań plan aktualizacji za darmo.

Rozmowy w tym tygodniu · start pracy 3 listopada 2026 · Wrocław, zdalnie

Przemysław Zalewski
15+lat tworzenia oprogramowania
8000+commitów w jednym produkcie, blisko połowa wszystkich merge’ów
300+ GBdanych produkcyjnych na platformie, którą prowadziłem
8platform Sandtime.io, gdzie byłem founding engineerem

Brzmi znajomo?

Problemy z utrzymaniem i CI/CD, które rozwiązuję w 2026

npm audit pokazuje setki podatności. Od czego zacząć?

Raport OSSRA 2026 firmy Black Duck (25 lutego 2026) policzył średnio 581 podatności open source w badanym kodzie, o 107% więcej niż rok wcześniej. W 92% projektów znalazł komponenty, które są co najmniej cztery lata za bieżącymi wersjami (Black Duck).

Aktualizuję falami, które da się cofnąć: najpierw poprawki i drobne wersje, potem narzędzia, frameworki i środowisko uruchomieniowe. Każda fala to pull request pilnowany przez Twoje testy. Typową aplikację często kończę w jeden wieczór, a planer na tej stronie pokaże Twoje fale jeszcze przed rozmową. W latach 2018⁠–⁠2026 zrobiłem około dziewięciu na dziesięć zmian zależności, wersji środowiska i łatek bezpieczeństwa w kilkunastu repozytoriach.

npm install się sypie, bo skrypty postinstall przestały działać

8 lipca 2026 npm 12 stał się ogólnie dostępny. Blokuje skrypty instalacyjne zależności i niejawne budowanie przez node‑gyp, dopóki projekt na nie nie zezwoli, a zależności z gita i ze zdalnych adresów domyślnie przestają się rozwiązywać (changelog GitHuba).

Komendą npm approve-scripts wypisuję każdą paczkę, która chce uruchomić skrypt, i zezwalam tylko tym, które naprawdę coś budują. Listę zapisuję w package.json i przypinam wersję npm, żeby laptopy i CI instalowały tak samo. We wrześniu 2026, gdy spowolniona usługa npm audit blokowała każdą instalację i wypchnęła nasze CI poza 45‑minutowy limit, tego samego dnia znalazłem przyczynę i wyłączyłem wywołanie audytu w każdej instalacji, bez ruszania żadnej zależności.

Masz to u siebie? Umów bezpłatne 30 minut →

Czy pull request z forka może wykraść sekrety z GitHub Actions?

Od 20 lipca 2026 actions/checkout nie pobiera kodu z forka w workflow pull_request_target. Workflow przypięte do SHA albo do konkretnej wersji nie dostały tej poprawki i działają po staremu, dopóki ich nie zaktualizujesz (changelog GitHuba).

Obcy kod przenoszę na zdarzenie pull_request z tokenem tylko do odczytu, a uprawnienia GITHUB_TOKEN przycinam do tego, czego potrzebuje każdy job. Akcje przypinam do SHA, które Dependabot trzyma aktualne. Każda zmiana trafia do osobnego pull requesta, czytelnego dla zespołu. Jesienią 2026 ustawiłem GitHub Actions w produkcie tak, że testy pull requestów działają tylko do odczytu i bez sekretów, klucze produkcyjne są wyłącznie w chronionym środowisku, do którego skrypty instalacji zależności nie mają dostępu, a każda akcja jest przypięta do konkretnego commita.

Agenci AI piszą więcej kodu, a produkcja psuje się częściej?

Raport 2026 State of AI Coding firmy New Relic (10 czerwca 2026) pokazał, że 94% liderów technicznych ocenia kod z AI na review wyżej niż kod pisany przez ludzi, a mimo to 82% miało w ostatnich sześciu miesiącach co najmniej jedną awarię produkcji związaną z takim kodem. 78% notuje więcej incydentów po jego wdrożeniu (New Relic).

W 2026 około dwóch trzecich zmergowanych PR w dwóch produktach powstało z agentami, a prawie wszystkie przeszły przez mój review albo merge. Taką samą bramkę ustawiam u Ciebie: lint, typy, testy i podgląd wdrożenia przy każdym PR, a merguje człowiek. W maju 2026 strona logowania padła, a monitoring świecił na zielono, bo sprawdzał tylko kod 200; naprawiłem przyczynę i przestawiłem monitory na sprawdzanie, czy strona naprawdę działa.

Masz jeden z tych problemów? Umów bezpłatne 30 minut →

Dlaczego ja

Aktualizacje z siatką bezpieczeństwa

Najpierw testy na ścieżkach, które przynoszą pieniądze, potem aktualizacje falami: paczki patch i minor, narzędzia, frameworki, runtime. Codemody tam, gdzie React, Next.js albo ESLint je dostarczają, ręczne diffy tam, gdzie nie. Każda fala to pull request, który da się cofnąć.

Migracje bez wielkiego wybuchu

Dual‑write i backfill dla baz, blue/green dla hostingu, strangler dla frameworków. Przećwiczone na kopii, cofnięte przynajmniej raz celowo, zmierzone w PostHogu po przełączeniu.

CI/CD, które da się przeczytać

Workflowy GitHub Actions mieszczące się na jednym ekranie, powtarzalne buildy Dockera, sekrety poza repo i czerwony build, który mówi, czemu padł. Twój zespół wdraża bez dzwonienia do mnie.

Legacy przy życiu, potem przeniesione

Stary Node.js i React, jQuery, strony w PHP, serwisy w C# i .NET. Utrzymać, obudować testami, przenosić kawałek po kawałku, gdy biznes może sobie na to pozwolić. Więcej o C# na stronie o .NET.

Pokaz na żywo

Zaplanuj aktualizacje zależności

Wklej package.json. Planer czyta zakresy wersji, porównuje je z aktualnymi wersjami głównymi popularnych paczek i grupuje aktualizacje w cztery fale: bezpieczna partia, narzędzia, frameworki, runtime. Znane zmiany łamiące dostają notkę. Wszystko liczy się w Twojej przeglądarce, nic nie jest wysyłane.

Ładuję pokaz…

Paczki spoza tabeli trafiają na listę do ręcznego sprawdzenia, nigdy nie są zgadywane.

Formy współpracy

Cztery formy współpracy

Chcesz najpierw liczbę? Konfigurator pokaże godziny, widełki ceny i termin startu. Rozmowa jest bezpłatna tak czy inaczej.

2 tygodnie

Sprint aktualizacji zależności

Przestarzałe paczki pogrupowane według ryzyka i aktualizowane falami, a testy pilnują każdej fali. Codemody tam, gdzie framework je ma, i changelog czytelny dla zespołu. Node, React, Next.js, TypeScript, ESLint, Tailwind i długi ogon.

Umów bezpłatną rozmowę →

1 tydzień + migracja

Plan migracji i przełączenie

Baza, hosting albo framework. Pisemny plan z dual‑write albo blue/green, próba na kopii, przetestowany rollback, potem przełączenie w wybranym przez Ciebie terminie. Bez weekendowego bohaterstwa.

Umów bezpłatną rozmowę →

1 tydzień

Konfiguracja CI/CD

GitHub Actions z bramkami lint, testów i builda, obrazy Dockera budowane wszędzie tak samo, wdrożenia podglądowe i produkcja o jedno zatwierdzenie. Z dokumentacją, więc do wdrożeń nie potrzebujesz mnie.

Umów bezpłatną rozmowę →

miesięcznie

Stałe utrzymanie

Stała liczba dni w miesiącu: aktualizacje, łatki krytycznych podatności tego samego dnia (React2Shell załatałem w dniu ogłoszenia), alerty, drobne poprawki, które się piętrzą, i miesięczny raport: co się zmieniło i o czym musisz zdecydować.

Umów bezpłatną rozmowę →

Dowody

Praca, którą mogę pokazać

Problem, co zrobiłem, efekt. Nazwy klientów tylko tam, gdzie wolno mi ich użyć.

Reakcja tego samego dnia na React2Shell i inne podatności

Problem
Krytyczne podatności w Reakcie, Node.js, WordPressie i OpenSSH spadają bez ostrzeżenia, a skanery z PoC przychodzą kilka dni później.
Co zrobiłem
Stały wzorzec: oficjalne źródło, łatka tego samego dnia, mitygacja w WAF, przeszukanie własnego kodu regexpem pod tę samą klasę podatności, flagi hardeningu Node.js, lektura dla zespołu.
Efekt
React2Shell załatany w dniu publikacji ostrzeżenia, na kilka dni przed uruchomieniem publicznych skanerów.

łatka tego samego dnia WAF przegląd kodu

Infrastruktura software house’u na mojej głowie, z migracją poczty

Problem
Software house potrzebował jednej osoby od tego, czego nikt inny nie pilnował: reputacji domen, certyfikatów, obrazów kontenerów, kluczy i przeniesienia poczty całej firmy na nową domenę bez utraty dostarczalności.
Co zrobiłem
W czerwcu 2026 przeniosłem pocztę firmy na nową domenę i współtworzyłem post-mortem, przeniosłem obrazy kontenerów do nowego rejestru, prowadziłem rotację kluczy i runbook certyfikatów na sześciu hostach oraz pilnowałem reputacji domen w całym portfelu produktów.
Efekt
Około trzech czwartych wszystkich commitów infrastruktury było moich. Gdy kiedyś wygasły certyfikaty produkcyjne, usługa wróciła w około 90 minut, razem z odtworzeniem mojego dostępu VPN i SSH. Od października 2026 kopia zapasowa liczy się dopiero wtedy, gdy automatyczne odtworzenie z niej się powiodło.

~3/4 commitów infrastruktury migracja poczty powrót w ~90 min

Zobacz też: E‑mail

Centrum pomocy przeniesione z WordPressa do repo jako docs-as-code

Problem
Nieutrzymywany help na WordPressie: czerwony w audytach, bez sitemapy, wygasające certyfikaty, pluginy, których nikt nie rozumiał.
Co zrobiłem
Markdown w repo, wersjonowany z produktem, wszystkie języki generowane automatycznie, linkowanie wewnętrzne, 301 dla każdego starego adresu, help dopisany do Definition of Done.
Efekt
Jedna maszyna mniej do zepsucia na urlopie, dokumentacja zgodna z produktem, lepsze SEO i GEO, kontekst, który czytają agenci.

docs‑as‑code 301s i18n

Masz podobny problem? Umów bezpłatną rozmowę →

Jak to działa

Trzy kroki od tej strony do działającego projektu.

  1. 1

    Rozmowa 30 minut

    Opisujesz produkt i problem. Ja zadaję pytania, które zadałbym pierwszego dnia.

  2. 2

    Zakres na piśmie

    W ciągu 24 godzin po rozmowie dostajesz krótki plan na piśmie: co budujemy najpierw, co mierzymy, jak pracujemy i ile to kosztuje. Bez prezentacji.

  3. 3

    Działający kawałek w pierwszym tygodniu

    Wdrożony, zmierzony i gotowy do przejrzenia. Dalej tempo wyznaczają liczby.

Dopasowanie

Czy to pasuje?

Dobre dopasowanie, gdy

  • Potrzebujesz seniora, który bierze odpowiedzialność za dowiezienie, nie pary rąk
  • Produkt ma wyjść i być mierzony, z product managerem albo bez
  • Współpraca solo albo jeden zespół do czterech osób, który prowadzę bezpośrednio
  • TypeScript, React, Node.js, Cloudflare, Postgres, PostHog, a Python, gdy praca tego wymaga

Raczej nie, gdy

  • Projekt na dziesięcioosobowy zespół dostawcy
  • Stack zbudowany wokół Javy albo chmury, w której nie pracuję
  • Body leasing na godziny bez wpływu na sposób pracy

Styl pracy

Jak pracuję

Zero zaległych bugów

Błąd jest naprawiony albo świadomie zamknięty, nigdy odłożony. Alerty i śledzenie błędów w każdym projekcie, więc o problemach dowiaduję się przed klientem.

Review jako rzemiosło

800+ przejrzanych pull requestów w jednym produkcie od 2018 roku. Patrzę na produkt i jego powody. Kod jest drugi.

Agenci pod regułami

Claude Code i Codex pracują na mainie z hookami, bramkami lint i testów. Model podpowiada, kryteria decydują. Każdy PR ma ludzki review, a treści z AI są oznaczone.

Warto wiedzieć

Terminy utrzymania i pułapki CI w 2026

Postgres 14 kończy się 12 listopada 2026

Każda wersja główna Postgresa ma 5 lat. 14 traci wsparcie 12 listopada 2026, a 15 11 listopada 2027 (wersje PostgreSQL).

GitHub Actions porzucił Node 20

Od 23 września 2026 akcje JavaScript działają na Node 24, a zmiennej wyłączającej już nie ma. Własne runnery na macOS 13.4 i starszym oraz ARM32 odpadają (changelog GitHuba).

Każde zadanie zaokrągla się do pełnej minuty

GitHub liczy każde zadanie w górę do pełnej minuty, osobno dla typu runnera. Minuta macOS kosztuje mniej więcej dziesięć razy więcej niż Linux (rozliczenia GitHuba).

Pull requesty bota nie uruchamiają CI

Zdarzenia z GITHUB_TOKEN nie odpalają nowych workflow, poza workflow_dispatch i repository_dispatch. Dlatego automatyczny PR nie ma żadnych checków (dokumentacja GitHuba).

Workflow z harmonogramu się spóźniają i wyłączają

Uruchomienia z cron są opóźniane na początku każdej godziny i mogą przepaść. W publicznych repo harmonogram wyłącza się po 60 dniach bez aktywności (zdarzenia, wyłączanie workflow).

Dependabot staje na pięciu PR‑ach

Domyślnie Dependabot trzyma najwyżej 5 otwartych PR‑ów z aktualizacjami wersji. Aktualizacje bezpieczeństwa mają osobny limit 10 i cooldown ich nie opóźnia (opcje Dependabota).

FAQ

Pytania, które padają przed umówieniem rozmowy

Jakie platformy i narzędzia?
GitHub Actions, Docker, nginx, Cloudflare Workers i Pages, Postgres, PostHog do monitoringu, Playwright do bramek. Jeśli Twój stos żyje w chmurze, w której nie pracuję, powiem to na rozmowie. Wdrożenia na brzegu opisuje strona o Cloudflare.
Zaktualizujesz aplikację w Next.js, której nikt nie odważa się dotknąć?
Tak. Testy wokół stron, które zarabiają, potem Next.js i React w osobnych falach z oficjalnymi codemodami, potem długi ogon. Jeśli aplikacji byłoby lepiej bez Next.js, strona o Next.js opisuje uczciwy plan wyjścia.
Migracja bazy bez przestoju?
Dual‑write, backfill, weryfikacja, przełączenie odczytów, przełączenie zapisów, usunięcie starej ścieżki. Przećwiczone na kopii z danymi w produkcyjnej skali, z rollbackiem sprawdzonym przed właściwym przełączeniem. Platforma list supresji, którą prowadziłem, miała 300+ GB w Postgresie i wdrożenia blue/green bez przestoju.
Łatki bezpieczeństwa i reakcja na podatności?
Tak, tego samego dnia. Oficjalne ostrzeżenie, łatka, reguła w WAF na lukę, przeszukanie Twojego kodu pod ten sam błąd, notatka dla zespołu. React2Shell załatałem w dniu ogłoszenia, kilka dni przed publicznymi skanerami.
Czy Twoi agenci kodujący zrobią nudne aktualizacje?
Otwierają pull requesty pod regułami, które napisałem, a człowiek przegląda każdy. W 2026 około dwóch trzecich zmergowanych PR w dwóch produktach powstało z agentami, a prawie wszystkie przeszły przez mój review albo merge. Reguły opisuje strona konsultanta AI.
Ile kosztuje utrzymanie?
150⁠–⁠220 zł netto za godzinę, zależnie od trudności. Pełną tabelę ma cennik, a zakres i cenę na piśmie dostajesz do 24 godzin po rozmowie.
Od kiedy możesz zacząć?
Od 3 listopada 2026. Umów rozmowę i przynieś plan aktualizacji z planera wyżej.
Czemu GitHub Actions popsuł się we wrześniu 2026?
23 września 2026 Node 20 zniknął z runnerów razem ze zmienną wyłączającą (changelog GitHuba). Zaktualizuj akcje do wersji działających na Node 24.
Czemu CI pada z toomanyrequests z Docker Huba?
Anonimowe pobrania są ograniczone do 100 na 6 godzin na adres IP, a współdzielone runnery dzielą adresy (dokumentacja Dockera). Zaloguj CI do Docker Huba albo użyj lustra rejestru. Cache Actions powyżej 10 GB też jest płatny (dokumentacja GitHuba).
npm audit pokazuje setki podatności. Od czego zacząć?
Raport OSSRA 2026 firmy Black Duck (25 lutego 2026) policzył średnio 581 podatności open source w badanym kodzie, o 107% więcej niż rok wcześniej. W 92% projektów znalazł komponenty, które są co najmniej cztery lata za bieżącymi wersjami (Black Duck). Aktualizuję falami, które da się cofnąć: najpierw poprawki i drobne wersje, potem narzędzia, frameworki i środowisko uruchomieniowe. Każda fala to pull request pilnowany przez Twoje testy. Typową aplikację często kończę w jeden wieczór, a planer na tej stronie pokaże Twoje fale jeszcze przed rozmową. W latach 2018⁠–⁠2026 zrobiłem około dziewięciu na dziesięć zmian zależności, wersji środowiska i łatek bezpieczeństwa w kilkunastu repozytoriach.

Bonus · #suchar

Suchar na deser

Gratis, jak pierwsza rozmowa. To samo poczucie humoru dostajesz w pakiecie z projektem.

Jak nazywa się pies, który robi deploye?Puenta

Push‑ek. Ba‑dum‑tss.

Co robi DevOps na działce?Puenta

Kisi ogórki w kontenerach. Słoik to też kontener, nie kłóćcie się. Ba‑dum‑tss.

Co robi informatyk w ogrodzie?Puenta

Grzebie w root‑ach. Ba‑dum‑tss.

W 30 minut sprawdzisz, czy do siebie pasujemy

Ty przynosisz problem, ja pytania. Chcesz najpierw liczbę? Konfigurator pokaże godziny, widełki ceny i termin startu.

albo napisz na ciunkos@gmail.com

Po umówieniu dostajesz zaproszenie do kalendarza. Nic więcej do wypełniania.

Moja obietnica

  • Odpowiedź w 24 godziny. Odpowiadam w ciągu 24 godzin w dni robocze. Osobiście, nie bot. Wiadomości z weekendu: do poniedziałku, do 12:00.
  • Spóźnienie znaczy gratis. Jeśli się spóźnię, pierwsza godzina pracy jest za darmo. Nie musisz o to prosić.
  • Zakres na piśmie w 24 godziny. Bezpłatna rozmowa 30 minut bez prezentacji firmy, potem zakres i cena na piśmie w ciągu 24 godzin. Ty decydujesz.
  • Osoba, która wykona pracę. Rozmawiasz z osobą, która wykona pracę. Bez warstwy sprzedaży, bez przekazywania dalej.
  • Odzywam się tylko z czymś nowym. Odzywam się tylko wtedy, gdy mam dla Ciebie coś nowego. Nigdy „czy jest już decyzja?”.
  • Uczciwe „to nie dla mnie”. Jeśli nie jestem właściwą osobą, mówię to na rozmowie i wskazuję kogoś, kto jest.

Rozmowy w tym tygodniu · start pracy 3 listopada 2026 · Kontrakt B2B · Wrocław, zdalnie

Kod, domena i konta są Twoje od pierwszego dnia. Nic nie trzymam jako zakładnika.