Każda osoba, której praca na co dzień związana jest nowoczesnymi technologiami zdaje sobie świetnie sprawę, jak ważne jest dbanie o szeroko rozumiane bezpieczeństwo systemów IT. Jednym z elementów dbania o to bezpieczeństwo jest pilnowanie, aby wykorzystywane oprogramowanie zawsze posiadało zainstalowany najnowszy pakiet poprawek.

W przypadku aplikacji JSowych, które bardzo często wspierane są przez wiele zewnętrznych skryptów i bibliotek dociąganych za pomocą managera paczek, kluczowym jest zadbanie o aktualizacje tych zależności.

Poniżej znajduje się Github workflow, który w cron’ie raz na określony czas sprawdza aktualność zależności znajdujących się w pliku package.json i na podstawie podanej konfiguracji tworzy Pull Request z aktualizacją. Workflow ten wykorzystuje zewnętrzne narzędzie npm-check-updates.

name: Package updater
on:
  schedule:
    - cron: '0 4 * * 0'

jobs:
  autoupdate:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Repo
      uses: actions/checkout@v2
    - name: Install lib
      run: |
        mv package.json package.tmp
        rm package-lock.json
        npm install npm-check-updates@12.1.0 --no-package-lock --no-save
        mv package.tmp package.json
    - name: Run update script
      run: |
        npx ncu --target minor --timeout 3000000 -u
        npm install --package-lock-only
    - name: Create Pull Request
      uses: peter-evans/create-pull-request@v3
      with:
        token: ${{ secrets.PERSONAL_ACCESS_TOKEN_AUTOUPDATE }}
        commit-message: AutoUpdate NPM dependencies
        committer: GitHub <noreply@github.com>
        author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>
        signoff: false
        branch: autoupdate-dependencies
        delete-branch: true
        title: 'AutoUpdate NPM dependencies'
        body: AutoUpdate NPM dependencies

Workflow jest uruchamiany przez cron o godzinie czwartej rano pierwszego dnia tygodnia.

Job działa na ubuntu-latest, wykonując kolejno:

  • Checkout Repo – pobranie plików z gałęzi master aby były dostępne dla kolejnych kroków.
  • Install lib – instalacja biblioteki npm-check-updates.
  • Run update script – uruchomienie narzędzia sprawdzającego aktualność zależności, działającego na podstawie podanego targetu: latest, minor, patch (tutaj więcej szczegółów).
  • Create Pull Request – tworzy Pull Request jeżeli są jakieś zmiany.