# Repo for bachelor SOI-tool ## Forutsetninger * `Python 3.7` * `Pip 20.0` * Windows 10 eller Ubuntu 18.04. Merk at flesteparten av gruppen arbeider på Windows 10 ## Oppsett med virtual environment ```bash # initialiser virtual environment python -m venv venv # aktiver virtual environment (Windows) ./venv/Scripts/activate # aktiver virtual environment (Ubuntu, ikke testet) ./venv/bin/activate # sikre at venv har riktige versjoner av kritiske innebygde pakker # (kanskje unødvendig) # dette blir gjort fordi default gir pip-18, som gir errormeldinger. # Se https://bugs.python.org/issue30628 python -m pip install pip=='20.0' setuptools=='45.2' wheel=='0.34' # installer pakker pip install -r requirements.txt # ...jobb med koden... # for å deaktivere virtual environment deactivate ``` ## Linting Sjekk av kodekvalitet gjøres med scriptet "CodeQualityCheck" i script-mappa, og er skrevet i Powershell(.ps1) og Bash(.sh). Scriptet kjører Pylint og Flake8 med tilhørende konfigurasjonsfiler, Pydocstyle med numpy-konvensjon og Bandit på Python-filer. Scriptet godtar kommandolinjeargumenter: .py-fil(er), mappe(r) eller en blanding av disse. Uten argumenter vil scriptet sjekke alle .py-filer. Terminal kjøres fra root. Sjekk: * Alle .py-filer: `.\scripts\CodeQualityCheck.ps1` eller `./scripts/CodeQualityCheck.sh` * Spesifikk(e) .py: `.\scripts\CodeQualityCheck.ps1 filEn.py filTo.py` * Alle .py i mappe(r): `.\scripts\CodeQualityCheck.ps1 mappeEn mappeTo` * Blanding: `.\scripts\CodeQualityCheck.ps1 mappeEn mappeTo\fil.py` ## Testing Tester er skrevet med `unittest` modulen, og ligger i mappen `test`. * For å kjøre alle tester: `python -m unittest` * For å kjøre en enkelt test modul (fil i `test` mappen): `python -m unittest test.<navnet_til_modulen>` * For å kjøre en enkelt test metode (fil i `test` mappen): `python -m unittest test.<navnet_til_modulen>.<navnet til klassen>.<navnet til metoden>` ## Generering av kodedokumentasjon Gjøres med pdoc3: * `pdoc3 --html --output-dir .\docs .\soitool\main.py` * Uten kildekode: `pdoc3 --html --config show_source_code=False --output-dir .\docs\ .\soitool\main.py` Autogenerert docs: http://bachelor-paa-bittet.pages.stud.idi.ntnu.no/soitool/ ## Om `Dockerfile` Docker image som brukes i `.gitlab-ci.yml` er bygget med filen `Dockerfile` og er lastet opp som `morkolai/soitool-ci`. Docker image inneholder alle avhengigheter til prosjektet. Følgende prosedyre brukes for å oppdatere image. Dette må gjøres når `requirements.txt` endrer seg. ```bash docker build -t morkolai/soitool-ci . docker login docker push morkolai/soitool-ci ``` ## Arbeidsmetode ### Bruk av `git` Arbeid skal ikke skje direkte på `master` branch. For hver oppgave en vil utføre skal en ny branch lages, og denne må senere merges inn ved hjelp av en "Merge Request". Gjennomgang av dette er lagt fram under: ```bash # ny branch git branch <branch navn> # hoppe til eksisterende branch git checkout <branch navn> # ..jobb med koden.. git add <...> git commit -m "..." # push til gitlab git push origin <branch navn> ``` Merging til master skal skje via Merge Requests i GitLab. #### Om arbeid utføres på feil branch `git stash` kan brukes for å lagre endringer i et "stash". Deretter kan en hoppe til riktig branch med `git checkout <branch navn>`, og kjøre `git stash pop`. #### Ved feil commit melding Om det er siste commit som er problemet, og den ikke har blitt pushet opp, kan en gjøre følgende for å endre commit-melding ``` git commit --amend ``` Om en vil endre tidligere commits eller endringen har blitt pushet opp: rop om hjelp! > "When in danger or in doubt, rUn in circles, scream and shout" ### Hvordan skrive tester Hver modul burde testes. I praksis vil dette si at hver fil under `soitool/` med navn `X.py` burde ha en tilsvarende fil under `test/` med navn `test_X.py`. Ved GUI-testing av modulære dialoger (dialoger som stopper eksekvering av hovedvindu) foretrekkes fremgangsmåten som demonstreres i `test\test_main.py`, hvor testfunksjoner kjøres med `singleShot`. Antall millisekunder testen skal vente før testfunksjoner kjøres kan stilles inn for tregere maskiner. *TODO* hvordan skrive GUI tester.