Znasz to uczucie, kiedy po godzinach pisania w końcu robisz git push, a potem… musisz spędzić kolejne 10 minut na ręcznym wklejaniu linków do social mediów? Ja nienawidzę tego momentu. To jak sprzątanie po świetnej imprezie – konieczne, ale nikt tego nie lubi. Jako rasowy leniwiec uznałem, że czas na autopromocję w stylu “ustaw i zapomnij”.
Mój blog był dotąd statyczny nie tylko pod maską, ale i w komunikacji. Cisza po każdym nowym wpisie była wręcz ogłuszająca, bo po prostu nie chciało mi się o nim trąbić. Aż do teraz.
Architektura lenistwa
Cały system to klasyczny przykład tego, jak poświęcenie kilku godzin na automatyzację oszczędza całe dnie w skali roku. Flow jest prosty i skuteczny:
Git Push → GitLab CI → Jekyll Build → Cloudflare Pages → [notify.sh] → Discord + XKiedy wypycham kod, GitLab odpala pipeline. Jeśli w metadanych posta znajdzie parametr notify: true, uruchamia skrypt, który wykonuje całą czarną robotę. Wszystko dzieje się w tle, podczas gdy ja mogę spokojnie zaparzyć kolejną kawę.
Podgląd powiadomienia
To nie jest kod, który masz uruchomić – to efekt końcowy. Tak wygląda informacja, która ląduje u moich czytelników na Discordzie i X. Zależało mi na surowym, terminalowym stylu, który idealnie pasuje do tematyki bloga:
$ ./run --new-post
Title: Automatyczne powiadomienia...
Description: Od dziś nowe wpisy ogłaszają się same...
Link: https://ubikcode.pl/...
Mózg operacji: notify.sh
Skrypt scripts/notify.sh to niewielki, ale przebiegły kawałek kodu. Nie chciałem gotowych botów, które wymagają ciężkiej konfiguracji. Wybrałem bashową drogę:
- Analiza zmian: Skrypt zagląda w
git diff, żeby upewnić się, że nie powiadamia o starych wpisach. - Wyciąganie metadanych: Dzięki
awkigrepwyłuskuje tytuł i opis bezpośrednio z Front Mattera pliku Markdown. - Wysyłka payloadu: Proste
curlwysyła sformatowaną wiadomość do webhooka Discorda i przez API do X.
Logika wyboru
Dlaczego notify: true? Bo nie każdy wpis nadaje się do ogłaszania (np. drobne poprawki w starych postach). Dzięki temu mam pełną kontrolę nad tym, co “wychodzi na miasto”.
Konfiguracja (bez wycieków!)
Aby system działał, GitLab potrzebuje dostępu do Twoich kont. Klucze do królestwa trzymam tam, gdzie ich miejsce – w zmiennych środowiskowych CI/CD:
DISCORD_WEBHOOK_URL– url Twojego webhooka.TWITTER_BEARER_TOKEN– token z Twitter API.
UWAGA: Pamiętaj, że bezpieczeństwo zaczyna się od niepopełniania głupich błędów. Nigdy nie hardcoduj kluczy API w skryptach, nawet w prywatnych repozytoriach.
Podsumowanie
Automatyzacja to nie tylko oszczędność czasu, to przede wszystkim komfort psychiczny. Teraz, kończąc wpis, czuję satysfakcję, wiedząc, że za chwilę informacja o nim dotrze wszędzie tam, gdzie powinna, bez mojego udziału.
Zamiast być niewolnikiem własnego bloga, stałem się jego architektem. I o to w tym wszystkim chodzi.
PS. Jeśli ten tekst właśnie mignął Ci na ekranie Discorda, to znaczy, że architektura działa bez zarzutu.