SZI2015/Praca z repozytorium

Środowisko pracy

Najlepiej pracować pod Linuksem (np. zainstalować sobie Ubuntu lub inną dystrybucję), można też pracować przez linuksowy terminal.

Repozytoria

Każdy student ma swoje repozytorium git: ssh://git@re-research.wmi.amu.edu.pl:1977/szi-2015-sNUMERINDEKSU.git

Akceptuję tylko rozwiązania umieszczone w repozytoriach, w szczególności NIE AKCEPTUJĘ rozwiązań przesyłanych mejlem, przynoszonych na pendrajwie, dyskietce czy taśmie perforowanej.

Aby uzyskać dostęp do swojego repozytorium, należy wygenerować klucz prywatny/publiczny SSH. Uwaga! Mogą Państwo mieć już mieć swój klucz wygenerowany (w szczególności jeśli uczestniczyli Państwo w innych zajęciach prowadzonych przeze mnie, np. „Automatach i językach formalnych”), można pominąć wówczas kroki 1-3 (aby sprawdzić, czy klucz już istnieje proszę wydać polecenie ls -l ~/.ssh/id_rsa.pub).

  1. Pod Linuksem należy wydać polecenie:
ssh-keygen

Można zabezpieczyć klucz hasłem, ale nie jest to obowiązkowe (można nacisnąć Enter bez podawania hasła).

Klucz publiczny powinien znaleźć się w pliku .ssh/id_rsa.pub — jest to domyślna nazwa, można po prostu nacisnąć Enter, w momencie gdy ssh pyta się o nazwę pliku (uwaga! klucz prywatny to plik .ssh/id_rsa, ze względów bezpieczeństwa nie powinien on być ujawniany!)

  1. Skopiować klucz publiczny do pliku o nazwie sNUMERINDEKSU@amu.pub:
cp .ssh/id_rsa.pub sNUMERINDEKSU@amu.pub
  1. Przesłać plik sNUMERINDEKSU@amu.pub (jako załącznik) na adresy t.dwojak@amu.edu.pl i filipg@amu.edu.pl

  2. Po tym jak prowadzący zajęcia założy repozytorium na serwerze, należy je jednorazowo sklonować:

git clone ssh://git@re-research.wmi.amu.edu.pl:1977/szi-2015-sNUMERINDEKSU.git
# zostanie pobrane puste repozytorium, pojawi się komunikat:
# "warning: You appear to have cloned an empty repository."
# proszę się nie przejmować tym komunikatem
cd szi-2015-sNUMERINDEKSU
git config core.filemode false
# ... konieczne, jeśli pracujemy na komputerze wydziałowym (na dyskach
# sieciowych są źle obsługiwane prawa dostępu, musimy je ignorować)
git pull git://re-research.wmi.amu.edu.pl/szi-2015.git master
# ... pobranie repozytorium-"matki", dostępnego w trybie do odczytu
git push origin master
# ... wypycha zmiany z lokalnego repozytorium do repozytorium zdalnego

Problemy z dostępem do gita

W razie problemów proszę jeszcze raz wygenerować i wysłać klucz, a także wykonać następujące polecenia i przesłać prowadzącemu wynik ich działania:

ls -ld ~/.ssh
ls -l ~/.ssh
md5sum ~/.ssh/id_rsa.pub

Więcej informacji o gicie

Git jest potężnym i skomplikowanym narzędziem. W czasie zajęć można bezmyślnie korzystać z gita, warto jednak bliżej się z nim zapoznać i zrozumieć podstawowe jego zasady, tym bardziej że obecnie jego nieznajomość dyskwalifikuje na rynku pracy.

Zob.:

Uaktualnianie repozytorium

Na początku każdych zajęć należy uaktualnić repozytorium względem repozytorium-“matki” (żeby pojawiły się nowe testy do zadań):

EDITOR=nano git pull git://re-research.wmi.amu.edu.pl/szi-2015.git

Forma zadań

Każde zadanie opisane jest przez test zawarty w pliku o nazwie TaskXYZTest.py, gdzie XYZ to numer zadania. Rozwiązanie należy zamieścić w pliku o nazwie TaskXYZ.py. Kasztowość (“wielkość”) liter jest istotna. Każdy plik z zadaniem zawiera funkcję o określonej nazwie, liczbie i typie parametrów oraz typie wartości zwracanej. Nazwy parametrów funkcji nie są istotne, ważna jest zgodność typów. Nieprzestrzeganie konwencji nazw plików i funkcji powoduje niepowodzenie automatycznego testu.

Aby zaliczyć zadanie nie powinno być żadnych ostrzeżeń ze strony programu pylint.

Wysyłanie rozwiązania

Załóżmy, że rozwiązujemy zadanie 102. Rozwiązanie powinno się znaleźć w pliku intro/Task102.py, kasztowość („wielkość”) liter ma znaczenie! Po zapisaniu pliku w Swoim Ulubionym Edytorze sprawdzamy najpierw, czy skrypt się uruchamia:

python Task102.py

rozwiązanie przechodzi testy:

python Task102Test.py

Następnie sprawdzamy, czy pylint nie zgłasza ostrzeżeń o błędach:

pylint Task102.py

Jeśli wszystko jest OK, możemy zatwierdzić rozwiązanie (commit) w lokalnym repozytorium:

git add Task102.py
git commit -m 'komentarz'

W końcu należy wysłać (wypchnąć) rozwiązanie do zdalnego repozytorium:

git push

Jenkins

Wszystkie rozwiązania są automatycznie testowane przy użyciu serwera ciągłej integracji Jenkins.

Zaliczone są punkty, które pojawiają w podsumowaniu, które można zobaczyć po kliknięciu w Podgląd konsoli danego buildu. Pod uwagę brany jest tylko ostatni build zainicjowany przez terminem danego zadania. Późniejsze buildy NIE będą brane pod uwagę.