Ciao! 🇵🇱🇮🇹
18 lipca link do pliku działał u mnie w przeglądarce i nigdzie indziej na świecie.
Przez chwilę byłem pewien, że winny jest odbiorca linku, nie link.
Lecimy z tematem 🚀
💡 Psst!
Na końcu maila znajdziesz prosty sposób, żeby ocenić dzisiejszą treść jednym kliknięciem. Z góry dzięki!
Publiczny link do prywatnego repo, który nie istniał
18 lipca chciałem wysłać karuzelę PDF na LinkedIn przez Buffer, dla Akademii Negocjacji. Research pokazał wcześniej, że dokument wielostronicowy dostaje lepszy zasięg niż zwykły obrazek, więc warto było się z tym pomęczyć. Buffer przyjmuje tylko publicznie dostępny URL do pliku, nie binarny upload, więc gotowy PDF trzeba było gdzieś powiesić. Miałem go już w marini-hub, moim prywatnym repozytorium na GitHubie, więc pomyślałem, że wystarczy link w formacie raw.githubusercontent.com, bez zakładania kolejnego konta na jakimś zewnętrznym hostingu.
Etap 1: link wygląda dobrze
Skopiowałem URL według wzorca raw.githubusercontent.com/{user}/{repo}/main/{ścieżka}. Otworzyłem go w przeglądarce, zalogowanej na moje konto GitHub, i plik pokazał się bez żadnego problemu, dokładnie tak jak się spodziewałem.
Etap 2: serwer mówi 404
Ten sam URL wysłany do Buffera wracał z czystym błędem, plik jakby nie istniał. Sprawdziłem to jeszcze raz przez curl bez żadnego logowania, z linii komend, i dostałem to samo: 404. git log na tym samym pliku pokazywał commit, branch main, wszystko na miejscu.
Etap 3: przyczyna była gdzie indziej
raw.githubusercontent.com nie ma trybu „publiczny link mimo prywatnego repo”. Dla prywatnych repozytoriów wymaga uwierzytelnienia zawsze, niezależnie od tego kto pyta. Mój dostęp z przeglądarki działał tylko dlatego, że byłem akurat zalogowany do GitHuba w tej samej sesji, w tej samej karcie. Buffer nie ma jak się zalogować za mnie, więc dla niego repo po prostu nie istniało, tak samo jak dla każdego innego serwisu z zewnątrz.
Dopisanie tokena do URL-a rozwiązałoby problem technicznie, ale wysłanie tokena z dostępem do prywatnego repo do zewnętrznego API to zły pomysł niezależnie od okoliczności. Rozwiązaniem było więc osobne, dedykowane publiczne repozytorium tylko pod pliki, które muszą być fetchowalne z zewnątrz, bez kosztu i w pełni pod moją kontrolą.
404 nie zawsze znaczy, że pliku nie ma. Czasem znaczy, że pytasz o coś, do czego akurat Ty masz dostęp, a serwis po drugiej stronie nie.
NARZĘDZIE 🛠️
gh repo view --json isPrivate
Jedna komenda GitHub CLI, która od razu mówi czy repozytorium jest publiczne czy prywatne, bez klikania w ustawienia na stronie. Sprawdzam ją teraz odruchowo, zanim jeszcze raz spróbuję użyć raw.githubusercontent.com jako darmowego hostingu pliku dla zewnętrznego serwisu. Polecam, bo wynik jest jednoznaczny, w przeciwieństwie do komunikatu 404, który potrafi znaczyć zupełnie różne rzeczy.
ZE ŚWIATA 🌍
America’s top cyber-defense agency left a GitHub repo open with passwords, keys, tokens. Odwrotność mojego przypadku: ja przez pół roku mogłem mieć problem z za mało publicznym linkiem, CISA przez pół roku miało problem z za bardzo publicznym repozytorium haseł.
LinkedIn adds a button to report AI-generated ‘slop’. Ciekawe ile z tych zgłoszeń trafi w treści, które przeszły dokładnie taką checklistę anty-AI jak ta, przez którą przechodzi każdy numer tego newslettera.
Public GitHub Issue Could Trick GitHub Agentic Workflows Into Leaking Private Repo Data. Mój problem był o jeden krok za mało publiczny, ten opisuje dokładnie odwrotny błąd, tyle że wykorzystany celowo przez kogoś, kto wiedział co robi.
NA KONIEC 😄
Repozytorium, które miało być prywatne, i repozytorium, które miało być publiczne. Skończyłem z jednym z każdego, zamiast pomylić je ze sobą.
Jeśli ktoś w Twoim otoczeniu powinien to przeczytać, prześlij mu ten numer. To najlepsza forma wsparcia.
A jeśli wolisz wesprzeć bezpośrednio: postaw mi kawę.
Michał Marini | Marini Brief
Jeśli oceniłeś wpis na mniej niż 5 gwiazdek, daj znać w komentarzu, czego Ci zabrakło, chętnie poprawię to w kolejnych publikacjach!
