Dwa testy, które powinniście przeprowadzić w projekcie Ruby już teraz

Miałem szczęście uczestniczyć ostatnio w cudownej Brighton Ruby conference. Było tam pełno świetnych rad, mądrości i kodu. Ale jeden z wykładów sprawił, że od razu po przyjściu do domu wykonałem pewną czynność, aby zapewnić moim projektom bezpieczeństwo i używalność.

Andrew Nesbitt, przy wsparciu libraries.io open data, opowiadał historie o ukrytych kosztach open-source'owego oprogramowania w Ruby. Tutaj możecie obejrzeć jego slajdy. Podlinkuję też filmik, kiedy będzie dostępny.

LICZENIE KOSZTÓW


Z wykładu Andrew można wyciągnąć dwie rzeczy, które należy jak najszybciej sprawdzić: zagrożenia bezpieczeństwa i problemy z licencją w projektach.

AUDYTY BEZPIECZEŃSTWA


Rubysec utrzymuje Ruby Advisory Database, bazę danych wszystkich wrażliwych gemów. Obecnie dostępnych jest 287 ostrzeżeń dla 147 gemów. Jeśli martwisz się, że twój projekt może być narażony przez wrażliwego gema RAD publikuje bundler-audit, gem sprawdzający Gemfile.lock w ich bazie danych.

Aby użyć bundler-audit musisz go zainstalować:

$ gem install bundler-audit

i uruchomić w katalogu projektu.

$ bundle-audit
No vulnerabilities found

 

DRUGA OPINIA


Jeśli jeden audyt bezpieczeństwa nie rozwieje twoich obaw to masz szczęście. Co prawda nie jest to narzędzie Ruby i Andrew nie wspominał o nim w czasie swojego wykładu, ale Snyk monitoruje usterki w projektach Ruby, JavaScript i Java za pośrednictwem własnej bazy danych.

Snyk oferuje narzędzie, którego możesz użyć do sprawdzenia swoich aplikacji. Aby używać Snyka musisz stworzyć konto i zainstalować Node.js i npm. Ale kiedy już przejdziesz te wszystkie kroki możesz sprawdzać swoje projekty:

# install
$ npm install -g snyk
# authenticate the client
$ snyk auth
# test the project in the current directory
$ snyk test
✓ Tested 23 dependencies for known vulnerabilities, no vulnerable paths found.

Zabezpieczenia już sprawdziliśmy, czas na licencje.

AUDYTY LICENCJI


Kod bez licencji to kod chroniony prawem autorskim, którego nie możesz używać.

To może nie brzmi tak źle dopóki nie dowiesz się, że 28% gemów Ruby nie ma licencji. To ponad 37 000 gemów. I oprócz samych instalowanych gemów będziesz musiał martwić się o ich zależności... i zależności tych zależności... i tak dalej.

Na szczęście jest narzędzie, które pomoże w tym wypadku. licence_finder jest utrzymywany przez Pivotal i sprawdza licencje zależności. To narzędzie zgłasza wszystkie licencje zależności. Potem musisz tylko stwierdzić czy licencja pasuje do twojego projektu. Możesz zaakceptować wszystkie zależności lub wybrać, które licencje zaakceptujesz. licence_finder przyda się również jeśli nie używasz Ruby, działa z wieloma innymi typami projektów.

licence_finder zainstalujesz za pomocą gemów Ruby.

$ gem install license_finder

Potem uruchamiasz go w katalogu projektu. Taki rezultat osiągnąłem uruchamiając go w envyable:

$ license_finder
..............................................................................
Dependencies that need approval:
bundler, 1.12.5, MIT
codeclimate-test-reporter, 1.0.8, MIT
docile, 1.1.5, MIT
envyable, 1.2.0, MIT
minitest, 5.10.2, MIT
rake, 12.0.0, MIT
simplecov, 0.13.0, MIT
simplecov-html, 0.10.1, MIT
thor, 0.19.4, MIT

Potem wybrałem licencję MIT i uruchomiłem ponownie:

$ license_finder whitelist add MIT
$ license_finder
..............................................................................
All dependencies are approved for use

Licencje zostały zatwierdzone.

TESTUJ ZA KAŻDYM RAZEM


Usterki w zabezpieczeniach lub projekt bez licencji mogą narazić ciebie i twoich klientów na problemy.

Instalacja i uruchomienie tych narzędzi nie zabierze dużo czasu, za to uratuje cię od zależności. Warto też dodać je do ustawień CI, mimo że będzie to trwało trochę dłużej.

Jeśli chcecie dowiedzieć się więcej wypatrujcie filmiku z wykładu Andrew, sprawdźcie listę bibliotek bez licencji na libraries.io lub przeglądnijcie dane i zobaczcie co możecie znaleźć w naszym open-source'owym ekosystemie.

 

Oryginalny tekst: Two tests you should run against your Ruby project now [przyp. red.]