Jak automatycznie aktualizować zależności pakietów w repozytorium
Praca programisty zwykle kojarzy się z hollywoodzkimi filmami, w których inteligentny człowiek lub haker pisze na klawiaturze, a na ekranie widzimy różne kody w zielonych kolorach. Albo czarne pokoje, gdzie światło monitora to jedyne, co możesz zobaczyć.
Codzienne zadania programisty
Jednak praca programisty to praca jak każda inna. Będzie borykał się z codziennymi problemami, które będzie musiał rozwiązywać, z codziennymi zadaniami, które będzie musiał zrozumieć i zastanawiać się, jaki jest najlepszy sposób na ich rozwiązanie. I jak każda inna praca, tak i ta będzie miała swoje codzienne zadania, które zabiorą nam czas w ciągu dnia.
Codzienną rutynę programisty można porównać do posiadania restauracji. Każdego dnia, kiedy przychodzisz do swojej restauracji, musisz: otworzyć okna, włączyć światła, umyć podłogę, umyć kilka naczyń, zdjąć ze stołów krzesła, cokolwiek, tak jak powiedziałem: czyli codzienne zadania.
Aktualizacja zależności moich pakietów jest jednym z tych codziennych zadań. A kiedy projekt zaczyna się rozrastać, coraz trudniej jest to robić na bieżąco.
Automatyzacja
Pracując z akcjami GitHuba, zadania są o wiele łatwiejsze do wyabstrahowania i aby tak zrobić z tym zadaniem, wykonajmy następujące rzeczy:
- Konfiguracja dependabot, która będzie otwierać codziennie nowy pull request aktualizujący określoną zależność,
- Akcja GitHuba odpowiedzialna za uruchomienie testów z aplikacji wewnątrz tego otwartego pull requesta,
- Akcja Githuba odpowiedzialna za połączenie tego pull requesta, jeśli testy wewnątrz pull requesta zakończą się sukcesem.
Te przepływy działają razem, dlatego ważne jest, aby pisać testy, dzięki którym dependabot będzie działał codziennie, a testy te będą odpowiedzialne za wykrywanie problemów z aktualizacjami.
Konfiguracja dependabot
Dodajmy konfigurację do codziennego uruchamiania dependabot szukającego aktualizacji z zależności wewnątrz aplikacji.
- w swoim projekcie na samym początku prawdopodobnie pojawi się folder o nazwie .github. Jeśli nie, utwórz go samodzielnie,
- utwórz w nim nowy plik i nazwij jako dependabot.yml,
- zamieść poniższy kod.
version: 2
updates:
- package-ecosystem: npm
directory: '/'
schedule:
interval: daily
time: '01:00'
open-pull-requests-limit: 10
Ten plik yml ustawi konfigurację dla dependabot:
- Codziennie tworzy pull request,
- Z przedziałem czasowym 01:00,
- Maksymalny limit to 100,
- Każdy pull request z dependabot utworzy nowe powiadomienie dla właściciela repozytorium.
Folder workflow
Przed utworzeniem akcji GitHuba należy utworzyć folder przepływu pracy, jeśli jeszcze nie istnieje.
- w folderze .github utwórz nowy folder i nazwij go jako workflows
Przetestujmy akcje GitHuba
Ważne: ten przepływ jest odpowiedzialny za uruchomienie testów twojej aplikacji. Można więc oczekiwać, że środowisko testowe jest już skonfigurowane, a jeśli jeszcze go nie posiadasz, to jest to dobry moment, aby zacząć pisać testy.
Stwórzmy akcję GitHuba odpowiedzialną za uruchamianie wszystkich testów z repozytorium wewnątrz każdego otwartego pull requesta.
- wewnątrz folderu workflow utwórz nowy plik i nazwij go
test.yml
, - zamieść poniższy kod.
name: tests
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: "14"
- run: yarn
- run: yarn jest
Plik yml ustawi nową akcję odpowiedzialną za:
- Uruchomienie wszystkich testów wewnątrz każdego pull requesta i scalenie na głównej gałęzi.
- Uruchomi polecenie yarn, aby zainstalować wszystkie zależności.
- Następnie uruchomimy test yarn, aby uruchomić wszystkie testy.
Dependabot i akcja GitHuba auto-merge
Utwórzmy akcję GitHuba odpowiedzialną za automatyczne łączenie pull requestów otwieranych przez dependabot. Gdy wszystkie testy będą zielone, akcja ta połączy automatycznie.
- utwórz nowy plik wewnątrz folderu workflow i nazwij go
auto-merge.yml
, - zamieść poniższy kod.
name: auto-merge
on:
pull_request_target:
branches:
- main
jobs:
auto-merge:
runs-on: ubuntu-latest
if: github.actor == 'dependabot[bot]'
steps:
- uses: ahmadnassri/[email protected]
with:
github-token: ${{ secrets.AUTOMERGE_TOKEN }}
command: 'squash and merge'
target: minor
Plik yml ustawi nową akcję odpowiedzialną za:
- Kiedy aktorem pull requesta będzie dependabot[bot].
- Wykorzysta on ahmadnassri/[email protected].
- Uruchomi 'squash and merge' jeśli testy z pull requesta są zielone.
- Tylko dla pull requestów aktualizujących zależności w wersji minor.
- Nie tracisz czasu na przeglądanie powiadomień o zależnościach pakietów.
Folder .github powinien wyglądać w ten sposób:
Zaktualizuj te zmiany wewnątrz nowego pull requesta i zobacz jak dzieje się magia.
Witamy w automatyzacji
Teraz Twoja aplikacja ma już nową automatyzację, która ułatwi Ci wykonywanie codziennych zadań, a czas, który musisz poświęcić na ich ręczne wykonywanie, możesz zacząć inwestować w nowe rzeczy w swojej aplikacji.
Dlaczego automatyzacja
Jeśli chcesz spędzać mniej czasu na pisaniu testów, musisz napisać więcej testów. Powinieneś również codziennie aktualizować zależności swojej aplikacji, w przeciwnym razie będziesz miał do czynienia z przestarzałą aplikacją szybciej, niż myślisz.
Oryginalna anglojęzyczna wersja tekstu jest dostępna w portalu dev.to.