2016-08-18 16 views
9

Pracuję z wersją R package that is an RStudio project i używam pakietu packrat do przechowywania lokalnej kopii źródła pakietów zależnych od mojego projektu .Używanie plików źródłowych pakietu R w pakiecie (zamiast w CRAN) za pomocą Travis-CI

Za każdym razem, gdy robię commit, mam Travis-CI checking my R package, ale za każdym razem, gdy Travis buduje mój pakiet, pobiera on najnowszą wersję zależnych pakietów, a nie wersje, które mam w moim katalogu packrat/.

widzę w richfitz/wood który pojawia się on do Osiągnęliśmy ten cel z tym w jego aktach .travis.yml:

env: 
USE_PACKRAT=1 

i dość skomplikowany make/packrat.mk plik, który sprawia, że ​​wszystkie prace.

Moje pytanie brzmi: jaki jest najprostszy sposób konfiguracji mojego projektu (np. Mój plik .travis.yml), aby poinformować urządzenie Travis, aby pobrać pakiety z mojego katalogu packrat/ na github, a nie z CRAN?

Odpowiedz

6

Po wielu prób i błędów i dalszego czytania, wydaje się, że to będzie to zrobić z plikiem .travis.yml jak ten:

# R for travis: see documentation at https://docs.travis-ci.com/user/languages/r 

language: R 
sudo: false 
cache: packages 
install: 
    - R -e "0" --args --bootstrap-packrat 
warnings_are_errors: false 

Kluczowe linie w powyższym plików:

install: 
    - R -e "0" --args --bootstrap-packrat 

Spowoduje to uruchomienie R i zbuduje pakiety R w lokalnym katalogu packrat, dzięki czemu będą dostępne na komputerze Travis.

Po tym, travis będzie kontynuował i próbował zbudować pakiet i nie będzie potrzebował kontaktu z CRAN, aby uzyskać zależności, ponieważ są już dostępne (zakładając, że pakiet działa zgodnie z oczekiwaniami).

Odkryłem tę sztuczkę tutaj: https://travis-ci.org/ChowHub/paper-pattern-similarity/builds/127262823 i https://github.com/rstudio/packrat/issues/158. Pracuję tutaj: https://travis-ci.org/benmarwick/mjbtramp/builds/157747326

Zaleta tego możemy zbudować na travisie z dokładnie tymi samymi pakietami, których używamy lokalnie. Nie musimy pobierać najnowszych pakietów z CRAN, gdy budujemy na travisie, teraz możemy mieć większą kontrolę nad wersjami pakietów, które travis buduje w naszym projekcie.

Wadą jest to, że czas budowy na travisie jest znacznie zwiększony. Jeden z moich projektów przeszedł od 2-3 minut do 13-15 minut po przejściu na packrat.


UPDATE Po pytaniu Noam jest poniżej i Jim's comment, wydaje się, możemy buforować pakiety packrat pomocą cache: tak:

# R for travis: see documentation at https://docs.travis-ci.com/user/languages/r 

language: R 
sudo: false 
cache: 
    directories: $TRAVIS_BUILD_DIR/packrat/ 
    packages: true 
install: 
    - R -e "0" --args --bootstrap-packrat 
warnings_are_errors: false 

W moim użytkowej przypadku ta zmniejszyła czasów znacznie, z powrotem do 1-2 minut.

+0

Czy trwa ten długi czas budowy? A może pakiety są buforowane po pierwszej kompilacji? –

+0

Dobre pytanie, tak, wydaje się, że czasy są stabilne i wysokie, gdy używasz pakietu packrat. Oto moje podsumowania kompilacji przypadków użycia: https://travis-ci.org/benmarwick/mjbtramp/builds, [jedna kompilacja, w której wyłączyłem packrat] (https: // travis-ci.org/benmarwick/mjbtramp/builds/157751062) specjalnie po to, by zobaczyć, że czas przychodzi w niecałe 2 minuty, a reszta, używając packrat, 13-18 minut. Pakiety buforujące zbudowane z pakietu packrat prawdopodobnie pomogłyby! – Ben

+1

Buforowanie jest możliwe! Zaktualizowałem swoją odpowiedź, aby pokazać, jak – Ben

Powiązane problemy