Tato stránka popisuje, jak budou vypadat testy na cvičeních a časem bude obsahovat i popis domácích úloh. Podívejte se prosím na stránku průvodce předmětem, kde najdete podrobnosti o tom, jak funguje hodnocení.
Opakování testů na cvičení
Pokud je hodnocení nějakého z testů na cvičení označeno jako Failed, máte možnost si jeden opravit během zkouškového období. V SISu (modul Termíny zkoušek) jsou již nějaké termíny vypsané, tak se k ním prosím přihlaste normálním způsobem. Můžete se přihlásit na libovolný termín (tedy nezáleží kdo je zkoušející, nemusí to být Váš cvičící).
Pokud máte právě jeden Failed test, tak víme že to je ten, který opakujete. Pokud jich máte jako failed označeno více, pak se Vás zeptáme přímo na místě, který chcete opravovat.
Pokud máte v hodnocení uvedeno Excused absence, můžete opakovat také tento test (ještě nad rámec jedné opravy Failed pokusu). Na termínu se Vás zeptáme, který test chcete opravovat. Pokud potřebujete opakovat více testů, budete muset přijít na více termínů (abyste měli 45 minut na vypracování zadání).
Opakování splněných testů není možné. Prosím nezapisujte se, pokud máte splněné všechny testy. Není co byste si opravovali a pouze budete blokovat místo ostatním studentům! Budeme se pravidelně dívat na kapacitu a případně vypíšeme více termínu, pokud to bude potřeba.
Opakování Domácích úloh není možné.
Testy na cvičení
Toto je rozpis testů na cvičení. Test bude probíhat na začátku cvičení (maximální doba trvání testu je 45 minut).
Týden (datum) | Téma | Podrobnosti o rozšíření |
---|---|---|
05 (18. 3. - 22. 3.) | T1: Základní skriptování v shellu (roury) | Druhý úkol podobného rozsahu |
09 (15. 4. - 19. 4.) | T2: Používání Git CLI (včetně větvení/spojování a push/pull přes SSH) | Složitější větvení |
14 (20. 5. - 24. 5.) | T3: Sestavovací nástroj make (úprava stávajícího nastavení) |
Složitější nastavení projektu založeného na make |
Očekává se, že se dostavíte na cvičení, na které jste zapsáni.
Pokud potřebujete přijít na jiné cvičení: kontaktujte nás prosím prostřednictvím confidential issue (alespoň týden předem a doložte vaše důvody, prosím, nějakým rozumným způsobem), abychom pro vás mohli najít náhradní termín (upozorňujeme, že účast na cvičeních jiného předmětu nebo návštěva sportovní akce není rozumným důvodem). Pokud se na zkoušku nedostavíte z důvodu nějakých nepředvídatelných okolností, kontaktujte nás prosím co nejdříve (opět prostřednictvím confidential issue). Počítejte s tím, že dodatečný termín se bude pravděpodobně konat ve zkouškovém období.
Pokud jste přihlášeni na zvláštní páteční cvičení, zkontrolujte si tady,
prosím, na začátku 5. týdne, zda bude nutné ho rozdělit (tj. zda by polovina
studentů potřebovala přijít v 10:40 a druhá polovina v 11:25).
AKTUALIZACE: Momentálně je na páteční cvičení 23bNSWI177x13 přihlášeno
více jak 30 studentů. Pokud váš SISový login začíná na [a-k]
, přijďte,
prosím, v 10.40; pokud váš login začíná na [l-z]
, prosím, přijďte v
11:30.
Test se bude psát na školních počítačích. Ujistěte se, že se tam můžete přihlásit a že máte vše pohodlně nastavené.
Vaše řešení bude odevzdáno prostřednictvím GitLabu nebo jiného Gitového repozitáře: ujistěte se, že umíte provést klonování prostřednictvím příkazové řádky (pro první test v 5. týdnu budete moci použít webové rozhraní GitLabu, ale použití nástrojů CLI je ve skutečnosti jednodušší a všechny potřebné příkazy budete znát ze cvičení 04).
Můžete používat naše webové stránky, off-line manuálové stránky a můžete nahlížet do svých poznámek a řešení příkladů, které jsou součástí našich materiálů.
Nesmíte používat žádná jiná zařízení (mobilní telefony, vlastní notebooky atd.), nahlížet do jiných on-line zdrojů (stroje budou mít stejně omezený přístup k internetu) ani sdělovat své řešení ostatním studentům.
Jinými slovy, testy na cvičení vyžadují, abyste dokázali řešit úkoly samostatně pouze s pomocí technické dokumentace.
Jakýkoli pokus o obejití výše uvedených pravidel (např. pokus o vyhledávání na StackOverflow na mobilním telefonu) znamená okamžité neúspěšné ukončení předmětu.
Pokud zadání nerozumíte, můžete samozřejmě požádat učitele o dovysvětlení. Pokud je zřejmé, že se ubíráte správným směrem a potřebujete jen trochu postrčit, můžeme vám i lehce poradit.
Ukázková úloha (shellové roury)
Napište skript (shellovou rouru), které přečte logy webového serveru a vypíše den s nejvyšším počtem požadavků.
Logy budou ve stejném formátu jako v příkladu na cvičení:
2023-01-05,02:35:05,192.168.18.232,622,https://example.com/charlie.html 2023-01-05,09:01:33,10.87.6.151,100,https://example.com/bravo.html 2023-01-06,17:25:17,52.168.104.245,1033,https://example.com/delta/delta.html
Pro výše uvedená data předpokládáme, že skript vypíše následující na svém výstupu.
2023-01-05
Log dostane skript na standardním vstupu, datum vypište na standardní výstup. Můžete předpokládat, že vstup není nijak poškozený. Nepředpokládejte nic o pořadí vstupních řádek.
Poznámky k úloze na Git CLI
Očekáváme, že zvládnete následující úlohy pomocí Gitu na příkazové řádce
(některé budete muset provádět na vzdáleném stroji linux.ms.mff.cuni.cz
).
- Nastavit si prostředí Gitu (autor a e-mail)
- Naklonovat repozitář (z
gitolite3@linux.ms.mff.cuni.cz
nebo z GitLabu nebo obecně přes HTTPS) - Vytvořit commit
- Vytvořit větev
- Přepínat mezi větvemi
- Zmergovat větev (a vyřešit případné konflikty)
- Nahrát změny (větve) na server
Ujistěte se, že můžete klonovat z gitolite3@linux.ms.mff.cuni.cz
když jste
na školních počítačích. Bude dostupná jen autentikace veřejným klíčem
(tj. nahrajte vaše klíče do 05/key.[0-9].pub
souborů ve vašem repozitáři -
jak je popsáno na cvičení 05 - ještě před zkouškou).
Aktualizace: přidal jsme nový CI job k vašim GitLabovým repozitářům, který by
vás měl upozornit na typické problémy s vašimi klíči. Klidně ho můžete spustit i lokálně
pomocí ./bin/run_tests.sh misc/keys
.
Následující příkaz (nahraďte LOGIN
vaším SISovým/Gitlabovým loginem s
malými písmeny) to zkontroluje.
ssh -o ForwardAgent=no LOGIN@u-pl1.ms.mff.cuni.cz ssh -T gitolite3@linux.ms.mff.cuni.cz
Měli byste vidět na výstupu něco jako tohle:
hello LOGIN, this is gitolite3@linux running gitolite3 3.6.13-2.fc39 on git 2.44.0
R W lab05-LOGIN
R lab07-group-sum-ng
Pokud vidíte následující, vaše klíče nejsou v pořádku nastaveny.
(LOGIN@u-pl1.ms.mff.cuni.cz) Password:
Permission denied, please try again.
Permission denied, please try again.
gitolite3@linux.ms.mff.cuni.cz: Permission denied (publickey,password).
Aktualizace k výše uvedenému.
Příkaz se vás nejdříve ptá na SIS/GitLabové heslo, protože se nejdříve přihlašujete ke školnímu počítači v labu. Z něj se pak SSHčkujete na náš server, kde se použije ověření klíčem.
Pokud je váš klíč chráněn frází (passphrase), budete muset z příkazu
výše odstranit -T
(a možná dokonce přidat -tt
k prvnímu SSH, tj. bude to
ssh -tt -o ForwardAgent=no ...
) [detaily v issue
#102].
Klidně si URL gitolite3@linux.ms.mff.cuni.cz
uložte někde na místní disk
do vašeho $HOME
, abyste ho nemuseli ručně opisovat během písemky.
Pokud si do vašeho .bashrc
přidáte export giturl=gitolite3@linux.ms.mff.cuni.cz
(podobně jako jsme nastavovali
$EDITOR
), tak budete moci zavolat jen git clone $giturl:lab05
což může
nějaký čas ušetřit.
Aktualizace: další možností je nastavit si alias ve vašem ~/.ssh/config
nějak takto, což vám umožní klonovat pomocí git clone exam:lab05-LOGIN
.
Host exam
Hostname linux.ms.mff.cuni.cz
User gitolite3
Písemka se zaměřuje na práci s Gitem. Cílem nebude napsat celý skript ale budete pracovat s repozitářem, ve kterém bude následující skript pro tisk jednoduchý sloupcových grafů v terminálu. Budete v něm ale dělat drobné změny (třeba opravy překlepů), na správné místo v kódu vás ale vždy navedeme.
import argparse
import sys
def parse_config():
args = argparse.ArgumentParser(description='Console bar plot')
args.add_argument('--columns', default=60, type=int, metavar='N')
return args.parse_args()
def load_input(inp):
values = []
for line_raw in inp:
line = line_raw.strip()
if line.startswith('#') or not line:
continue
try:
val = float(line)
except ValueError:
print(f"WARNING: ignoring invalid line '{line}'.", file=sys.stderr)
continue
values.append(val)
return values
def print_barplot(values, scale, symbol):
for val in values:
print(symbol * round(val / scale))
def main():
config = parse_config()
values = load_input(sys.stdin)
if not values:
sys.exit(0)
coef = max(values) / config.columns
print_barplot(values, coef, '#')
if __name__ == '__main__':
main()
Poznámky k úloze na make
Očekáváme, že zvládnete následující úlohy s Makefile
(některé budete muset
provádět na vzdáleném stroji linux.ms.mff.cuni.cz
).
- Sestavit projekt (nebo jeho část) pomocí programu
make
- Pochopit dodaný
Makefile
- Provádět úpravy v
Makefile
- Opravit seznam závislostí
- Opravit příkaz použitý pro daný cíl (target)
- Sjednotit více pravidel do tzv. vzorových pravidel (pattern rule)
- Přidat nový cíl do
Makefile
se správně odvozenými závislostmi
Ujistěte se, že můžete klonovat repozitáře z
gitolite3@linux.ms.mff.cuni.cz
ze školního počítače (stejně jako pro
zkoušku z Gitu). Vizte nápovědu a detaily výše.
Domácí úlohy
Toto je předběžný rozvrh domácích úloh a jejich témat (předpokládáme, že deadline druhé úlohy bude zasahovat do zkouškového období).
Týdny | Téma | Podrobnosti o rozšíření |
---|---|---|
07 - 10 | T4: Složitější shellový skript | Další funkce nad rámec hlavní úlohy |
12 - 15 | T5: Nastavení projektu (CI, nástroje pro sestavení, Git) | Další funkce nad rámec hlavní úlohy |
Stejně jako v případě testů na cvičení bude vaše řešení odevzdáno k vyhodnocení prostřednictvím Gitu.
Pro toto řešení můžete použít prakticky všechny dostupné zdroje, včetně manuálových stránek, našich webových stránek, on-line výukových programů nebo služeb, jako je ChatGPT a podobně.
Pokud odněkud kopírujete (nebo kopírujete a upravujete) své řešení (to se týká i odpovědí z nástrojů umělé inteligence), musíte řádně uvést své zdroje. Nemusíte zapisovat použití manuálových stránek nebo webových stránek předmětu.
Bez ohledu na použité zdroje musíte být schopni pochopit a vysvětlit návrh/implementaci svého řešení. Neschopnost vysvětlit své řešení je stejná, jako kdyby nebyla úloha vůbec odevzdána.
Domácí úlohy jsou individuální, tedy je musí řešit každý student samostatně. Diskutovat o svém řešení s kolegy je v pořádku, předkládat jejich práci jako svou je zakázáno.
Úloha T4: shellový skript
Napište generátor webových stránek pro turnaj založený na týmových úkolech.
V turnaji může být libovolný počet týmů a každý tým může zaslat svou implementaci soutěžní úlohy. Implementace je pak vyhodnocena pomocí sady automatizovaných testů a krátký záznam z testů je zkopírován na známé místo.
Vaším úkolem je zpracovat výstupy automatických testů a vygenerovat souhrnnou webovou stránku. Protože vlastní generování HTML není zas až tak zajímavé, úkol se zastaví na hranici generování sady stránek ve formátu Markdown.
Vstupní data budou uložena v adresáři tasks
. Každý podadresář odpovídá
jedné úloze, vlastní výsledky jsou v souborech pojmenovaných podle názvu
týmu s příponou .log.gz
(tj. jedná se o prostý textový soubor komprimovaný
gzipem). Každý řádek v log souboru začíná buď pass
(včetně mezery), nebo
fail
, nebo jej lze pro naše účely ignorovat.
Předpokládá se, že skript shellu může být (případně) nainstalován v nějakém
adresáři na cestě ($PATH
), ale data bude vždy číst z aktuálního pracovního
adresáře.
Máte vygenerovat celkové pořadí týmů, kde se každý splněný test (tj. řádek
začínající na pass
) počítá za jeden bod (a body se sčítají napříč všemi
úlohami). A pro každý tým musíte také připravit stránku, kde bude zobrazen
rozpis bodů napříč jednotlivými úlohami. Tato stránka bude také odkazovat na
původní log soubor (očekává se, že soubor zkopírujete a rozbalíte do
stejného adresáře, kde jsou markdown soubory).
Například může strom vstupního adresáře vypadat takto:
tasks/
├── m01
│ ├── alpha.log.gz
│ └── bravo.log.gz
└── m02
├── alpha.log.gz
├── bravo.log.gz
└── charlie.log.gz
A obsah souboru tasks/m01/alpha.log.gz
může být po dekompresi následující
(připomeňme, že nás zajímají pouze řádky pass/fail):
pass Test one
fail Test two
Extra information about failure.
fail Test three
Data pro náš příklad lze stáhnout (včetně předpokládaného výstupu) z repozitáře s příklady.
Očekáváme, že pak bude vygenerován tento index.md
:
# My tournament
1. bravo (5 points)
2. alpha (3 points)
3. charlie (1 points)
A pro každý tým speciální stránka jako je tato:
# Team alpha
+--------------------+--------+--------+--------------------------------------+
| Task | Passed | Failed | Links |
+--------------------+--------+--------+--------------------------------------+
| m01 | 1 | 2 | [Complete log](m01.log). |
| m02 | 2 | 0 | [Complete log](m02.log). |
+--------------------+--------+--------+--------------------------------------+
Výstupní adresář bude pak obsahovat následující soubory:
out/
├── index.md
├── team-alpha
│ ├── index.md
│ ├── m01.log
│ └── m02.log
├── team-bravo
│ ├── index.md
│ ├── m01.log
│ └── m02.log
└── team-charlie
├── index.md
├── m01.log
└── m02.log
Váš skript musí přijímat argument -o
pro předání názvu výstupního adresáře
a -t
pro zadání alternativního názvu index stránky (místo výchozího My tournament
). Váš nástroj musí přijmout obě varianty volání -odirname
a
-o dirname
pro oba argumenty.
Můžete s klidem předpokládat, že názvy týmů a úkolů budou pouze platné C identifikátory (tj. pouze anglická abeceda a čísla bez speciálních znaků). Můžete dále předpokládat, že se názvy úkolů atd. vejdou do výše uvedené tabulky (pokud jde o šířku sloupců).
Očekává se, že budete používat dočasné soubory pro ukládání průběžných výsledků a že úlohu vyřešíte kompletně v shellu.
Nemůžete použít AWK, PERL, Python ani žádný jiný další jazyk; použití sed
u
je povoleno (ale pravděpodobně není nutné). Nesmíte použít žádné pokročilé
funkce jazyka Bash, jako jsou (asociativní) pole nebo konstrukce [[
a ((
(použití $(( ))
, $( )
a test(1)
je však povoleno). Jinými slovy,
očekáváme, že implementaci budete řešit pomocí konstrukcí a programů, které
jste viděli během cvičení (a úloha je taková, že byste ji měli být schopni
napsat sami bez cizí pomoci).
Očekáváme, že k odstartování své implementace použijete externí nástroje, ale před odevzdáním musíte rozumět celému skriptu a musíte označit všechny části, které jste osobně nenapsali (a pokud používáte nástroje, jako je ChatGPT, musíte odeslat celý protokol komunikace s tímto nástrojem).
Abychom úlohu přijali, musí být vyřešeny všechny problémy nahlášené Shellcheckem.
Rozšíření
Zkontrolujte, zda existuje soubor config.rc
, a načtěte jej: může přepsat
název (title
) celého turnaje a výstupní (output
) adresář (místo
výchozího out
).
Pokud například soubor config.rc
obsahuje následující řádky, pak název v
souboru index.md
nejvyšší úrovně bude znít # NSWI177 Tournament
a
vygenerované soubory budou uloženy v adresáři output_md/
.
title="NSWI177 Tournament"
output="output_md/"
Tyto hodnoty mohou být stále přepsány přepínači na příkazovém řádku
(tj. pořadí je výchozí hodnota pevně zakódovaná ve skriptu, hodnoty v
config.rc
a přepínače -o
a -t
).
V každém podadresáři task/*
zkontrolujte, zda soubor meta.rc
(pokud
existuje) neobsahuje řádek name=".."
, který může obsahovat jiný název
úlohy než název adresáře. Tento název bude pak použit ve výše uvedené
tabulce. Název nebude používat žádné speciální znaky kromě mezery a pomlčky.
Očekává se, že soubory .rc
budou zdrojové soubory shellu a budou obsahovat
platné shellové konstrukce. Musíte však zkontrolovat, zda soubor vůbec
existuje.
Odevzdání a hodnocení
Odevzdejte svá řešení do podadresáře exam/t04
v repozitáři pro NSWI177.
Skript uložte do souboru exam/t04/tournament.sh
(a nerozdělujte jej do
více souborů). Při kopírování fragmentů ze stránek, jako je StackOverflow,
očekáváme, že je okomentujete přímo v souboru tournament.sh
. Komunikaci se
stránkami řízenými umělou inteligencí uložte do souboru ai.log
(textový
soubor s jasně označenými částmi s vašimi vstupy a s odpověďmi).
Pokud vytvoříte další testovací sady dat, neváhejte je uložit do podadresáře
demo
(podobně jako naše vstupy, tj. např. demo/one/tasks
a
demo/one/output
s očekávaným výstupem).
Poskytujeme pouze základní automatizované testy: můžete si je ale sami
rozšířit. Všimněte si, že diff
lze použít s -r
k porovnání celých
podstromů adresářů, což se může hodit při porovnávání vygenerovaného výstupu
s tím očekávaným.
Známkování úlohy je pouze uspěl/neuspěl (resp. uspěl s rozšířením). Při hodnocení vaší implementace zkontrolujeme, zda funguje na základních datech a poté zkontrolujeme kvalitu vašeho skriptu kombinací automatických i ručních kontrol. To bude zahrnovat kontroly, zda skript po sobě odstraňuje dočasné soubory, zda náhodně neodstraňuje existující soubory atd. U kvality se podíváme na názvy proměnných, komentáře celkové struktury nebo rozklad na funkce. Implementace vyhoví, pokud je množství těchto problémů v rozumných mezích.
Záměrně neuvádíme vyčerpávající checklist, protože by to vedlo k optimalizaci proti seznamu namísto přemýšlení, jak napsat rozumnou implementaci.
Termín odevzdání je 2024-05-05.
Úloha T5: nastavení projektu
Nastavte CI pro Pythoní projekt a připravte ho na další distribuci.
Očekáváme, že k odstartování své implementace použijete externí nástroje, ale před odevzdáním musíte rozumět celému skriptu a musíte označit všechny části, které jste osobně nenapsali (a pokud používáte nástroje, jako je ChatGPT, musíte odeslat celý protokol komunikace s tímto nástrojem).
Kontext
V této úloze budete pracovat na jednoduchém Pythoním projektu, který je schopen vykreslovat šablony Jinja.
Jako jednoduchý příklad (který také najdete ve složce examples
ve vašem
repozitáři s projektem) může posloužit následující transformace.
Mějme následující pole (seznam) v JSONu:
[
{
"name": "Introduction to Linux",
"code": "NSWI177",
"homepage": "https://d3s.mff.cuni.cz/teaching/nswi177/"
},
{
"name": "Operating Systems",
"code": "NSWI200",
"homepage": "https://d3s.mff.cuni.cz/teaching/nswi200/"
}
]
Mějme následující vstupní soubor:
Our courses
===========
Below is a list of (almost) all of our courses.
A budeme mít tuto šablonu. Všimněte si, že řídící struktury šablony
používají {%
(nebo {%-
pokud chceme odstranit okolní prázdné znaky) a
{{
pro nahrazování proměnných.
{{ content }}
{%- for course in data -%}
* [{{ course.name }} ({{ course.code }})]({{ course.homepage }}) {{ NL }}
{%- endfor %}
Očekáváme, že náš šablonovač po spuštění vypíše následující.
Our courses
===========
Below is a list of (almost) all of our courses.
* [Introduction to Linux (NSWI177)](https://d3s.mff.cuni.cz/teaching/nswi177/)
* [Operating Systems (NSWI200)](https://d3s.mff.cuni.cz/teaching/nswi200/)
Zdrojový kód
Zdrojáky výše uvedené implementace jsou pro vás již připravené a brzy budete
mít přístup k novému projektu v podstromu teaching/nswi177/2024
na
GitLabu, kde budete pracovat.
t05-LOGIN
(s výjimkou ai.log
jak je zmíněno níže).
Repozitář též obsahuje několik testů. Jsou tam unit testy v Pythonu (používající pytest) a také testy na vyšší úrovni (budeme jim říkat integrační ač je to trochu přehnané) napsané v BATSu.
Spuštění je popsáno v README projektu.
__pycache__
nebo Pythoní .egg
a .whl
soubory.
Základní část
Váš hlavní úkol je nastavit tomuto projektu základní CI na GitLabu a připravit ho pro distribuci.
CI musí spustit Pythoní unit testy a skončit chybou při jakémkoliv
problému. Přípravou na distribuci míníme to, že po vašich změnách půjde
šablonovač nainstalovat pomocí pip
u a mít ho dostupný příkazem
nswi177-jinja-templater
.
Jinými slovy, následující příkazy nainstalují šablonovač do nového virtuálního prostředí a spuštění posledního příkazu vypíše krátkou nápovědu k našemu programu (předpokládáme, že jsme v prázdném adresáři, který nijak nesouvisí s klonem projektu).
python3 -m venv templater-venv
. ./templater-venv/bin/activate
pip install git+ssh://git@gitlab.mff.cuni.cz/teaching/nswi177/2024/t05-LOGIN
nswi177-jinja-templater --help
A pro CI očekáváme, že váš projekt bude mít úlohu unittests
, která spouští
Pythoní testy.
unittests
a umístěte
veškerou konfiguraci do jediného .gitlab-ci.yml
souboru.
CI by mělo používat obraz python:3.12-alpine
a měli byste instalovat verze
z requirements.txt
souboru. Očekáváme, že pytest
(a možná další knihovny
potřebné pro testy) nebudou v requirements.txt
, ale raději uvnitř souboru
requirements-dev.txt
.
Určitě si všimnete, že testy neprocházejí, protože některé z Jinja filtrů nejsou naimplementovány.
Ale nestrachujte se. Vaše kolegyně Alice je už naimplementovala ve své větvi
v repozitáři gitolite3@linux.ms.mff.cuni.cz:t05-alice
.
Zaintegrujte (merge) její implementaci do vašeho repozitáře, abyste měli implementaci kompletní.
Pokud jste vše udělali správně, váš CI log bude vypadat zhruba takto (ze zřejmých důvodů jsou použité příkazy rozmazané).
Abychom shrnuli podčásti pro vyřešení základní (povinné) části T05.
- Přimergujte implementaci od Alice.
- Nastavte
pyproject.toml
,setup.cfg
arequirements.txt
(arequirements-dev.txt
) pro projektt05-login
na GitLabu. - Nastavit CI na GitLabu tak, aby spouštělo Pythoní testy v úloze (job)
unittests
.
Rozšíření
Volitelně můžete rozšířit CI tak, aby též spouštělo BATS testy.
Očekáváme, že přidáte nový job nazvaný integrationtests
, který
nainstaluje daný balíček (takže bude fungovat příkaz
nswi177-jinja-templater
) a spustí všechny BATS testy z podadresáře tests
(jak si asi vzpomínáte, tak pouhé pip install .
by mělo zafungovat úplně
skvěle).
Budete muset nejdřív doinstalovat bats
pomocí apk add
(je v pořádku
instalovat tento balíček při každém spuštění CI).
Všimněte si, že současná implementace v common.bash
volá program pomocí
env PYTHONPATH=src python3 -m nswi177.templater
– zmeňte volání jen na
nswi177-jinja-templater
. Také budete muset nahradit volbu --kill-after
za -k
v příkazu timeout
, protože dlouhá varianta není na Alpine
podporována.
Množství BATS testů není příliš velké, takže byste také měli přimergovat práce od kolegů Boba a Charlieho do vašeho repozitáře. Jako obvykle, proveďte normální merge a nikoliv rebase při slučování jejich práce.
Bob má repozitář na gitolite3@linux.ms.mff.cuni.cz:t05-bob
zatímco Charlie
dal svojí kopii na náš web na
https://d3s.mff.cuni.cz/f/teaching/nswi177/202324/t05-charlie.git
.
V případě konfliktů se ujistěte, že jste je vyřešili rozumně – rozhodně nechcete žádný z testů mazat.
Abychom shrnuli podčásti pro vyřešení (volitelného) rozšíření T05.
- Přimergujte testy od Boba a Charlieho.
- Opravte spuštění příkazu v BATS testech.
- Opravte volání
timeout
, aby bylotimeout -k 30 "${timeout}" "$@"
. - Přidejte CI job
integrationtests
, který spustí všechny BATS testy.
Odevzdání a hodnocení
Odevzdejte svá řešení do repozitáři t05-LOGIN
na GitLabu.
Budeme kontrolovat, že projekt jde nainstalovat pomocí pip install git+https://gitlab.../t05-LOGIN/
a že vaše konfigurace CI je v pořádku (po
všech mergech by se mělo vše zelenat). Zkontrolujeme, že Pythoní kód může
být spuštěn pomocí python3 -m src.nswi177.templater
po instalaci
závislostí skrz pip install -r requirements.txt
(nebo pomocí python -m nswi177.templater
pokud je přímo samotný balík také nainstalovaný) a že
Pytesty mohou být spuštěny po instalaci z requirements-dev.txt
.
Při kopírování fragmentů ze stránek, jako je StackOverflow, očekáváme, že je
okomentujete přímo v příslušných zdrojácích. Komunikaci se stránkami
řízenými umělou inteligencí uložte do souboru exam/t05/ai.log
ve vašem
obvyklém repozitáři (student-LOGIN
), opět jako textový soubor s jasně
označenými částmi s vašimi vstupy a s odpověďmi.
Termín odevzdání je 2024-06-16.