Jak pracovat s Github Classroom?

Co je potřeba a nebude pokryto zde:

  1. Vytvoření účtu na https://github.com/.
  2. Stažení a instalace Github Desktop https://desktop.github.com.

V tomto návodu popíšeme splnění a odevzdání prvního úkolu L01E01: Hello world z prvního semináře. Github Classroom používájí git. Pro odevzdávání úkolů není jeho znalost potřebná (používají se pouze dvě základní funkce). Zájemci si mohou o základech gitu přečíst například zde.

1. Přijetí úkolu

Práce na úkolu začíná jeho přijetím, každý úkol má na webu semináře odkaz “Přijmout úkol”.

Ze seznamu identifikátorů studenta vyberte ten svůj (pokud nejste na seznamu, dejte mi vědět). Identifikátor naleznete v systému STAG.

Po výběru identifikátoru můžeme přijmout vybraný úkol.

Po kliknutí na “Accept this assignment” je nutné chvíli vyčkat a poté stránku obnovit.

Po obnovení stránky vidíme, že došlo k vytvoření repozitáře ve kterém budeme úkol programovat.

2. Klonování repozitáře

Po vytvoření repozitáře je nutné provést jeho naklonování do počítače. Na počítači poté úkol naprogramujeme a odešleme zpět na server ke kontrole. Kliknutím na odkaz z předchozího kroku se přesuneme na stránku s repozitářem.

Klikneme na “Code” a zvolíme “Open with Github Desktop” (ověřte zda máte hotovou instalaci).

V Github Desktop si zvolíme kam úkol naklonujeme (doporučuji si vytvořit jednu složku kam budete během semestru klonovat všechny úkoly).

To, že se klonování povedlo poznáme na následujíci obrazovce, zde rovněž provádíme hlavní operace s repozitářem.

3. Práce na úkolu

V našem oblíbeném editoru (doporučuji MS Visual Code) si otevřeme složku s naklonovaným repozitářem. Naklonované zadaní bude vždy obsahovat soubor README.md se zadáním úkolu a případně další soubory které budou nutné pro jeho splnění.

V tomto konkrétním zadání čteme, že našim úkolem je vytvořit skript hello_world.py, který po spuštění na standardní výstup vypíše řetězec Hello world!.

Vytvoříme tedy soubor hello_world.py s programem, který vypisuje řetězec Hello world!.

Vždy úkol nejprve otestujeme (v této fázi ručně, později automatickým testem).

Vše by mělo fungovat. Přejděme tedy do fáze odevzdání.

4. Odevzdání úkolu

V aplikaci Github Desktop otevřeme příslušný repozitář s úkolem.

V levém panelu vidíme provedené změny (vytvoření, smazání, modifikaci souborů). Tyto změny můžeme popsat takzvaným commitem. Jelikož máme funkční řešení, vytvoříme commit a následně jej odešleme na server. Před vytvořením commitu ověříme, zda máme v levém sloupci vybrané všechny soubory, které má commit obsahovat. Poté vyplníme název commitu a jeho popis.

Poté klikneme na “commit to main”. Tím ale odevzdání nekončí. Commit je zatím pouze lokálně na našem počítači. Je nutné jej odeslat na server. Této akci se říká “push”. V pravém horním rohu klikneme na tlačítko “Push origin” a veškeré lokální commity odešleme na Github server.

V záložce “history” si můžeme prohlédnout historii našeho repozitáře.

Vždy je rovněž dobré ověřit, že commit na server opravdu odešel. To uděláme jednoduše na webu našeho repozitáře. Klikneme na “X commits” a prohlédneme si všechny commity, které se na serveru vyskytují.

5. Je řešení opravdu správné?

Veškeré odeslané commity úkolů spouští automatizované testování. Výsledky těchto testů si můžete prohlédnout v repozitáři. Ze seznamu commitů výše, vybereme námi vytvořený commit a zobrazíme jeho detail.

V levém horním rohu, vedle názvu commitu vidíme zelenou fajfku. Po kliku na fajfku a zobrazení detailu si můžeme prohlédnout detailní výsledek.

Co se stane když v úkolu uděláme funkční chybu? Zkusme úkol rozbít. Před koncem termínu je možné odeslat libovolný počet commitů s úpravami. V editoru tedy upravíme program tak, aby vypisoval Ahoj svete!, což způsobí porušení zadání.

Poté vytvoříme nový commit a odešleme jej na server (opakujeme stejný proces jako dříve).

Commit pushneme na server a zkontrolujeme výsledek testů. Testy selhaly. V tomto momentu by jste měli obdržet email, že úkol nefunguje.

V detailu testu vidíme proč test selhal.

6. Testy fungují, ale?

To, že zdrojový kód prošel testy neznamená, že bude uznaný. V kódu můžete mít další sématické chyby nebo špatné formátování, které nemá přimý vliv na funkčnost programu. Zdrojový kód úkolu byl upraven takovým způsobem, že se před názvem funkce print vyskytuje mezera. Na funkčnost kódu nemá tato úprava žádný vliv, jedná se však o špatné formátování Python kódu a je nutné jej opravit.

Každý repozitář s úkolem, který vytvoříte obsahuje v sekci “Pull requests” vlákno “Feedback”. V tomto vlákně bude probíhat zpětná vazba.

Po obdržení zpětné vazby stačí kód upravit, vytvořit commit a pushnout změny na server. Kód znovu zkontroluji a pokud je vše v pořádku vlákno uzavřu. V tento moment máte úkol uznaný. V případě dalších problému budeme kolečko zpětné vazby (code review) opakovat.