Przeszukaj forum
Pokazywanie wyników dla tagów 'github'.
Znaleziono 3 wyniki
-
Uruchamianie GitHub Actions lokalnie za pomocą act
Mikolaj1995 opublikował temat w Artykuły użytkowników
Hej! Przygotowałem krótkie szkolenie o narzędziu act, które pozwala uruchamiać GitHub Actions lokalnie — bez potrzeby czekania na wykonanie workflowów w chmurze. Robiłem je dla siebie, ale wyszło całkiem ciekawe i pomyślałem, że może komuś się przyda. Staram się wychodzić do ludzi, stąd też ta publikacja. To jest tłumaczenie, w dużej mierze wykonane maszynowo, a oryginalna anglojęzyczna wersja (mojego autorstwa) znajduje się tutaj: na GitHubie. Act to świetny sposób na szybsze testowanie, debugowanie i naukę Continuous Integration bez ograniczeń środowiska GitHub. Część 1: Wprowadzenie i przygotowanie środowiska 1.1 Wymaganie wstępne – Docker Desktop Narzędzie act działa na podstawie kontenerów Docker. Jeśli nie masz jeszcze zainstalowanego Dockera, pobierz go stąd: Docker dla Windows Po instalacji uruchom aplikację Docker Desktop – act nie zadziała, jeśli Docker nie będzie aktywny. 1.2 Instalacja act przez Winget Otwórz PowerShell lub Wiersz polecenia i uruchom komendę: winget install nektos.act # Instaluje narzędzie act z oficjalnego repozytorium nektos 1.3 Przygotowanie struktury projektu W katalogu głównym swojego projektu utwórz folder dla workflow'ów GitHub Actions: mkdir -p .github/workflows # Tworzy katalog .github/workflows, gdzie będą pliki YAML workflowów 1.4 Pierwsze uruchomienie act W terminalu (będąc w katalogu projektu) wpisz: act # Uruchamia act po raz pierwszy i pobiera domyślny obraz Dockera Podczas pierwszego uruchomienia pojawi się pytanie o wybór obrazu Dockera. Wybierz opcję Medium image – zawiera najczęściej używane narzędzia i jest dobrym kompromisem między funkcjonalnością a rozmiarem. Część 2: Tworzenie i uruchamianie workflow'a 2.1 Tworzenie pliku workflow Utwórz plik .github/workflows/ci.yml z następującą zawartością: name: Podstawowy CI on: [push, pull_request] jobs: build: runs-on: ubuntu-latest steps: - name: Pobierz kod uses: actions/checkout@v3 - name: Powitaj użytkownika run: echo "Hello from act on Windows!" pull_request_check: runs-on: ubuntu-latest if: github.event_name == 'pull_request' steps: - name: Pobierz kod uses: actions/checkout@v3 - name: Sprawdzenie PR run: echo "Running checks for Pull Request" secret_check: runs-on: ubuntu-latest steps: - name: Pobierz kod uses: actions/checkout@v3 - name: Weryfikacja sekretu run: | echo "Klucz API (pierwsze 10 znaków): ${{ secrets.MY_API_KEY }}" echo "Inny sekret: ${{ secrets.ANOTHER_SECRET }}" env_variable_check: runs-on: ubuntu-latest steps: - name: Pobierz kod uses: actions/checkout@v3 - name: Weryfikacja zmiennych środowiskowych run: | echo "Zmienna z CLI: ${{ env.MY_CUSTOM_VAR }}" echo "Zmienna z pliku: ${{ env.ANOTHER_CUSTOM_VAR }}" 2.2 Uruchomienie workflow'a (domyślny event push) act # Uruchamia workflow dla zdarzenia push (domyślnie) Narzędzie act wykryje plik .yml i uruchomi odpowiednie job'y. Zobaczysz wynik podobny do tego, co normalnie pojawiłoby się w logach GitHub Actions. 2.3 Uruchamianie dla konkretnego zdarzenia (pull_request) Aby przetestować job'y przypisane do zdarzenia pull_request, użyj: act pull_request # Symuluje event pull_request W tym trybie uruchomione zostaną job'y build, pull_request_check i secret_check. 2.4 Lista dostępnych workflow'ów i job'ów Aby sprawdzić, jakie workflow'y i job'y są zdefiniowane: act -l # Wyświetla listę wszystkich workflowów i jobów 2.5 Uruchamianie pojedynczego job'a Możesz też uruchomić tylko jeden konkretny job: act -j pull_request_check pull_request # Uruchamia tylko pull_request_check w kontekście eventu pull_request Część 3: Praca z sekretami Wiele workflow'ów korzysta z sekretów, np. kluczy API. Nigdy nie zapisuj ich bezpośrednio w repozytorium! act pozwala wczytywać je lokalnie i bezpiecznie. 3.1 Sekrety z pliku .secrets i z CLI Utwórz plik .secrets w katalogu projektu: # .secrets ANOTHER_SECRET=wartosc_z_pliku Dodaj ten plik do .gitignore, aby nie trafił do repozytorium. Teraz możesz uruchomić job z dwoma sekretami — jeden z pliku, drugi z linii poleceń: act -j secret_check --secret MY_API_KEY=sekret_z_cli push # Wczytuje sekrety z .secrets oraz z parametru --secret Wynik: My API Key (first 10 chars): *** Another Secret (masked): *** Część 4: Zmienne środowiskowe Podobnie jak sekrety, zmienne środowiskowe (env) można przekazywać przez CLI lub plik .env. 4.1 Przykład Utwórz plik .env: # .env ANOTHER_CUSTOM_VAR=wartosc_z_pliku_env Dodaj do .gitignore, a następnie uruchom job: act -j env_variable_check push --env MY_CUSTOM_VAR=wartosc_z_cli --env-file .env # Łączy zmienne środowiskowe z CLI i pliku Wynik: My Custom Variable: wartosc_z_cli Another Custom Variable: wartosc_z_pliku_env Podsumowanie Gratulacje! Masz już działające środowisko do lokalnego testowania GitHub Actions. Podsumowanie kluczowych komend: act – uruchamia workflow dla eventu push act pull_request – symuluje event pull_request act -l – pokazuje listę jobów act -j <job> – uruchamia konkretny job --secret / --env – dodaje sekrety lub zmienne środowiskowe Dodatkowo: wtyczka do VS Code Dla wygody możesz zainstalować rozszerzenie, które integruje act z VS Code: code --install-extension sanjulaganepola.github-local-actions Dzięki temu uruchomisz workflow'y bezpośrednio z edytora. Zalety rozszerzenia: graficzny interfejs do uruchamiania workflow'ów, konfiguracja obrazów i ścieżek w ustawieniach VS Code, szybsze debugowanie. Dokumentacja wtyczki: https://sanjulaganepola.github.io/github-local-actions-docs/ Jeśli spróbujesz tego szkolenia, daj znać poniżej — chętnie poznam Twoje wrażenia! -
System kontroli wersji to niezbędnik dla każdego programisty. Kopia plików, wracanie do stanu sprzed kilku dni i łatwe porównywanie różnych wersji kodu to tylko część zalet pracy z Gitem. Jednak czy ma to sens, jeśli projekt prowadzimy samodzielnie? Odpowiedź wraz z praktycznymi przykładami znajduje się w tym poradniku. [blog]https://forbot.pl/blog/git-dla-samotnych-czy-to-ma-sens-jak-zaczac-id41521[/blog]
- 16 odpowiedzi
-
- 6
-
-
Iot GitHub Frame - śledź na żywo popularność dowolnego repozytorium
Sqra opublikował temat w Projekty - DIY
Witajcie. Chciałbym Wam przedstawić prosty sposób wykorzystania modułu ESP-32, który użyłem do stworzenia urządzenia, za pomocą którego możecie śledzić poziom zainteresowania wybranym repozytorium GitHub. Dzięki wbudowanym dwóm wyświetlaczom, będziecie na bieżąco informowani o: aktualnej liczbie gwiazdek dziennej liczbie gwiazdek aktualnej liczbie obserwujących aktualnej liczbie forków Początkowo chciałem skorzystać ze starszego modułu ESP8266 12-F, jednak napotkałem problem który objawiał się przy wykonywaniu requesta do api GitHub. Podczas oczekiwania na odpowiedź z serwera, na wyświetlaczach zanikały wszystkie cyfry i wyglądało to jakby coś było nie tak z urządzeniem. Z pomocą przyszedł układ ESP-32, który oparty jest na dwóch rdzeniach. Była to świetna okazja aby zapoznać się z tym modułem, ponieważ wcześniejsze projekty wykonywałem na ESP8266. Użycie nowszej odsłony ESP, pozwoliło mi wysyłać requesty asynchronicznie. Do działania ramki wymagane jest połączenie z siecią poprzez WiFi. Tutaj świetnie sprawdziła się biblioteka "WiFi Manager", która umożliwiła mi szybkie podłączenie ramki do dowolnej sieci. Jeżeli chodzi o zasilanie to jest to napięcie 5V, które podaje poprzez wtyki USB. W obudowie ramki znajdują się trzy przyciski. Pierwszy służy jako włącznik. Pozostałe dwa to włączniki chwilowe. Po wciśnięciu pierwszego na wyświetlaczu prezentowany jest adres IP, który wykorzystujemy przy konfiguracji. Natomiast drugi przycisk resetuje liczbę gwiazdek z dnia. Do układu podłączona jest 3 kolorowa dioda LED, która informuje nas o stanie połączenia: CZERWONY – brak sieci, błąd podczas pobierania danych ZIELONY – połączenie sieciowe ustanowione, dane pobrane poprawnie NIEBIESKI – tryb access pointu ( zanik sieci ) Domyślnie odświeżanie danych odbywa się co 90 sekund. Oczywiście interwał można zmienić. Ale należy uważać, aby nie wykonywać do api GitHub więcej niż 60 requestów na godzinę, ponieważ serwer ma ustawiony RateLimit. Po przekroczeniu ilości zapytań zostaniemy zablokowani na godzinę. Jak już wspomniałem wyżej, pod adresem IP jaki przydzielony został do urządzenia działa prosty web server, który serwuje nam stronę z konfiguracją, gdzie musimy wprowadzić nazwę użytkownika repozytorium oraz nazwę repozytorium które chcemy obserwować. Po zapisaniu konfiguracji w pamięci EEPROM urządzenie jest restartowane i gotowe do użycia. Dodatkowym atutem urządzenia jest automatyczna aktualizacja oprogramowania poprzez HTTPS OTA. Sprawdzanie wersji następuje podczas uruchomienia oraz po północy. Urządzenie jest w pełni bezobsługowe. Gdy wystąpi zanik sieci, ESP cały czas będzie próbowało nawiązać połączenie za pośrednictwem zapamiętanych poświadczeń. Jeśli sieć nie będzie dostępna, przełączy się w tryb access pointu ( ssid: "GITHUB-FRAME"). Jeśli nie zostanie wybrana nowa sieć w menadżerze sieci, to po czasie 3 minut, nastąpi restart i proces się powtórzy. Tak pokrótce, wygląda zasada działania całego układu. Poniżej przedstawię Wam główne etapy budowy całej ramki. A więc zaczynamy. LISTA ELEMENTÓW: ESP-32 WROOM DevKit 1.0 – 1 szt. Wyświetlacz LED 4-Cyfrowy TM1637 – 0.56" – 1 szt. Wyświetlacz LED 4-Cyfrowy TM1637 - 0.36" – 1 szt. 4-pinowy przewód, żeński – żeński – raster 2.54 – 4 szt. Gniazdo + wtyk, JST – JST – 2 szt. Gniazdo + wtyk, mikro JST – mikro JST – 2 szt. Płytka uniwersalna PCB 50x70mm PI-01 – 1 szt. Rezystor węglowy – 220 ohm – 5 szt. Rezystor węglowy – 2,2k ohm – 3 szt. Zworki do płytek stykowych - 1 zestaw Wtyk goldpin kątowy 4 pinowy, raster 2,54mm – 4 szt. Dioda LED 5mm RGB wsp. Anoda – 1 szt. Dioda LED 3mm biała – 3 szt. Przełącznik chwilowy okrągły – 10mm – 2 szt. Przełącznik kołyskowy ON-OFF – 1 szt. Kabel USB A – USB micro – 1 szt. Zasilacz 5V z gniazdem USB A – 1 szt. Rurki termokurczliwe - 1 szt. Ramka IKEA RIBBA – 21x30cm ( ważne żeby była dość głęboka, aby zmieścić elektronkę ) – 1 szt. Papier samoprzylepny do drukarki – 1 szt. Rura elektroinstalacyjna RLM 16 – 1 szt. NARZĘDZIA: Lutownica Cyna Obcążki Wiertarka lub wkrętarka Wiertła: 7, 10, 13 Pistolet do kleju na gorąco Nóż Drukarka ZAŁOŻENIA: Stabilność działania Intuicyjna obsługa Szybka adaptacja w miejscu instalacji Estetyka Plan Początkowo ramka miała powstać pod konkretnie wybrane repozytorium i wyświetlać tylko liczbę gwiazdek. Ale stwierdziłem, że i tak pobieram inne dane z endpointa api to czemu miałbym ich nie wyświetlić. Postanowiłem, że dodam dwa nowe klucze: "forks" oraz "watchers" i wyświetlać je kolejno w 5 sekundowym odstępie czasowym. Jeżeli chodzi o repozytorium, to dając możliwość wprowadzenia własnych ustawień url-a, zwiększyłem tym samym skalowalność przedsięwzięcia. Do tego doszły automatycznie aktualizacje software-u. Więc taką ramkę może stworzyć każda osoba, która chociaż trochę ma pojęcie o informatyce i niekoniecznie zna się na programowaniu. BUDOWA Prace nad ramką rozpocząłem od budowy prototypu metodą na "pająka". W tym celu skorzystałem z płytki prototypowej, przycisków typu "tact switch", paru zworek oraz kilkunastu przewodów do połączenia wszystkiego w całość. Całe oprogramowanie zostało napisane za pośrednictwem Arduino IDE czyli w języku C. Gdy miałem już działający prototyp, rozpocząłem prace nad przeniesieniem całości na uniwersalną płytkę PCB. Zadanie wydawałoby się proste ale wymagało procesu planowania. W tym celu wykorzystałem oprogramowanie Fritzing. Oprogramowanie to umożliwia stworzenie całej dokumentacji projektu. Na tę chwilę wykorzystałem tylko narzędzie do stworzenia szkicu płytki prototypowej. Mając gotowy już projekt z rozlokowaniem wszystkich elementów i połączeń. Mogłem przystąpić do lutowania. Jak widać na zdjęciach, podczas montażu elementów używałem uchwytu, który stabilnie trzyma płytkę w miejscu. Bardzo ułatwił mi pracę. Po przylutowaniu wszystkich elementów elektronicznych, wlutowałem przewody z gniazdami, dzięki którym będę mógł odłączyć układ od samej konstrukcji ramki Teraz przyszedł czas na najtrudniejszy etap jakim było dostosowanie drewnianej ramki do potrzeb projektu. W programie Photoshop stworzyłem szablon do wiercenia i wycinania potrzebnych otworów. Szablony te znajdziecie również w repozytorium projektu. Po wydrukowaniu szablonu przykleiłem kartkę do “pleców ramki” i wyciąłem wszystkie otwory. Trochę trzeba się do tego przyłożyć i mieć sporo cierpliwości. Cięcie, pasowanie, cięcie, pasowanie aż do skutku. Ufff. W końcu mogłem przystąpić do zamontowania wyświetlaczy oraz diod LED. Z pomocą przyszedł mi klej na gorąco. Trzyma mocno i pewnie, wystarczająco do tego typu prac. Trzy diody LED umieściłem w przyciętych krążkach z białej rury pcv ( tych do prowadzenia przewodów po ścianach ) a górę zaślepiłem kawałkiem plastiku w którym zamocowałem diody. A tak całość prezentuje się od frontu Za pomocą 4 żyłowych przewodów zakończonych wtykami żeńskimi, połączyłem wszystkie elementy z główną płytką. W celu szybszej identyfikacji przewodów, oznaczyłem każde połączenie za pomocą lakierów do paznokci ( pozdrawiam swoją żonę Magdalenę ). Główny układ przykleiłem do pleców ramki również za pomocą kleju na gorąco. Na koniec pomalowałem cały front na biało farbą emulsyjną, ponieważ papier który używa się w drukarkach ma małą gramaturę co sprawia, że jest półprzezroczysty. Dzięki podbiciu koloru tła biel będzie intensywniejsza. W ostatecznej wersji grafikę wydrukowałem na papierze fotograficznym, który jest na tyle gruby, że malowanie okazało się być zbędne. SOFTWARE Cały program opiera się na dwóch pętlach. Pierwsza pętla Task1, sprawdza czy użytkownik wprowadził url repozytorium z którego mają zostać pobrane dane. Jeżeli konfiguracja została wprowadzona, program wywołuje funkcję getData(), która odpowiedzialna jest za pobranie danych z API. Interwał tej pętli definiuje zmienna requestInterval, która domyślnie posiada wartość 90 ( czyli 90 sekund). Druga pętla Task2, służy do wyświetlania odpowiednich danych na wyświetlaczach oraz podświetlania ikon. Tutaj również sprawdzany jest stan na pinach 27 i 15 ( przyciski BUTTON_IP oraz BUTTON_RESET_TODAY). Interwał tej pętli to około 15 sekund. Po północy następuje sprawdzenie dostępności nowszej wersji oprogramowania oraz resetowany jest licznik gwiazdek otrzymanych w ciągu całego dnia. Poniżej znajdziecie link do repozytorium z projektem: OPROGRAMOWANIE + SZABLONY DO DRUKU PODSUMOWANIE Przyznam się szczerze, że prototyp urządzenia miałem już gotowy rok temu. Ale ze względu na gruntowny remont mieszkania musiałem odsunąć hobby na dalszy plan. Rozciągnięcie projektu w czasie sprawiło, że przy każdym powrocie zawsze coś zmieniałem, rozbudowywałem. Wszystko wtedy można przemyśleć kilka razy i na spokojnie zastanowić się nad rozwiązaniem jakiegoś problemu. Na co dzień zajmuję się programowaniem front-endu, ale dzięki takim projektom mogę połączyć moje główne zainteresowania: majsterkowanie, elektronikę, grafikę i jak już wcześniej wspomniałem, programowanie i stworzyć coś namacalnego i cieszącego oko. Zachęcam wszystkich do twórczego działania i poszerzania swojej wiedzy. Tego typu projekty dadzą Wam satysfakcję, świetną zabawę oraz sporo nauczą. Także klawiatury, lutownice, piły, śrubokręty, wiertarki w dłoń i do działania! Instrukcję już macie Do następnego projektu! Pozdrawiam.
