Merge branch 'makefiles' into make_docs
This commit is contained in:
		
						commit
						55ffdf8941
					
				
					 12 changed files with 159 additions and 10 deletions
				
			
		|  | @ -13,6 +13,7 @@ Vítejte v dokumentaci M&Mího webu! | |||
|    vyvoj | ||||
|    sphinx | ||||
|    dalsi_soubory | ||||
|    skripty | ||||
|    modules/modules | ||||
|    zapisy/zapisy | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										108
									
								
								docs/skripty.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								docs/skripty.rst
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,108 @@ | |||
| Skripty pro práci s repozitářem | ||||
| =================== | ||||
| 
 | ||||
| Máme dvě hlavní sady skriptů/příkazů na ovládání webu a repozitáře. Skripty pro | ||||
| práci s webem psané v Pythonu jsou uložené ve složkách | ||||
| ``<aplikace>/management/commands/``, případně vestavěné, a volají se pomocí | ||||
| ``./manage.py <příkaz>``. Oproti tomu skripty pro práci s repozitářem a pro | ||||
| úpravy databáze a souborů „zvenčí“ se nejčastěji nacházejí ve složce ``make/`` | ||||
| a volají se pomocí cesty: ``make/<příkaz>``. | ||||
| 
 | ||||
| Občas existují i nějaké další skripty na různých jiných místech. Všechny by | ||||
| měly být ideálně popsány asi tady. | ||||
| 
 | ||||
| Make skripty | ||||
| ---- | ||||
| 
 | ||||
| Skripty v ``make/`` se označují jako „Make skripty“. Slouží často k velkým | ||||
| úkonům s repozitářem, jako je nasazení celého webu, zprovoznění lokálního webu | ||||
| a podobně. | ||||
| 
 | ||||
| .. note:: Označení pro tyto skripty je dáno tím, že byly původně volány pomocí | ||||
|    make (tj. z Makefile). Ve skutečnosti je lze stále volat i jako ``make | ||||
|    <skript>``, ale pak není možné předávat parametry a obecně je tato cesta | ||||
|    zastaralá a existuje jen pro zpětnou kompatibilitu se svalovou pamětí. | ||||
| 
 | ||||
| Tyto skripty jsou samonosné, dají se spustit rovnou a v případě problémů si | ||||
| budou hlasitě stěžovat. Pro účely debugování různých věcí jsou ale (bohužel?) | ||||
| hlasité i při normálním spuštění, konkrétně vypisují všechny příkazy, které se | ||||
| spouštějí (\ ``set -x``). Tyto příkazy jsou vidět za jedním či více plusky (\ ``+``). | ||||
| 
 | ||||
| .. tip:: Pokud některý make skript selže, tak by na konci měl vypsat, že se něco nepovedlo. | ||||
| 
 | ||||
| 
 | ||||
| Knihovna ``make/lib.sh`` | ||||
| ^^^^^^ | ||||
| 
 | ||||
| Pro pohodlí při psaní velká část z nich využívá knihovnu uloženou | ||||
| v ``make/lib.sh``. Jsou zde definované užitečné proměnné, kontroly a společný | ||||
| kód. Kromě toho při inicializaci otestuje, že je skript spuštěn z kořene | ||||
| repozitáře (takže to pak není potřeba zkoumat v ostatních skriptech). | ||||
| 
 | ||||
| Proměnné | ||||
| """"" | ||||
| 
 | ||||
| Popsány jsou jen užitečné proměnné, ve skutečnosti jich je definovaných víc, | ||||
| ale jsou triviální a samopopisné. | ||||
| 
 | ||||
| ``VENV_PATH`` | ||||
|   Cesta virtuálního prostředí. Též lze přepsat. | ||||
| ``REPO`` | ||||
|   Cesta ke gitovému repozitáři na serveru, rovnou použitelná v ``git clone`` | ||||
| ``GIMLI_LOGIN`` | ||||
|   Přihlašovací údaje ke Gimlimu | ||||
| ``PRODWEB`` a ``TESTWEB`` | ||||
|   Cesty ke složkám s produkčním a testovacím webem | ||||
| 
 | ||||
| Funkce a další zkratky | ||||
| """""" | ||||
| 
 | ||||
| ``ensure_venv`` | ||||
|   Zajistí, že se zbytek skriptu spustí ve virtuálním prostředí, a pokud neexistuje, tak jej založí. | ||||
| ``ensure_web_installed`` | ||||
|   Vyzkouší, že je web (django) aspoň elementárně zprovozněno a pokud ne, tak vyzve uživatele, aby to spravil. | ||||
| ``gimli_only`` | ||||
|   Otestuje, že je příkaz spuštěn na Gimlim, pokud tomu tak není, zeptá se, jestli si uživatel skutečně přeje zbytek skriptu vykonat | ||||
| ``only_in_directory <složka>`` | ||||
|   Otestuje, že skript běží z konkrétní složky. Zejména použitelné s ``gimli_only`` a ``$TESTWEB`` | ||||
| ``safe_checkout_branch <větev>`` | ||||
|   Bezpečně přepne repozitář na jinou větev. Pokud by mělo dojít k přepsání | ||||
|   knihovny nebo volajícího make skriptu, vyzve uživatele, aby přepnul ručně. | ||||
| ``install_everything`` | ||||
|   Společná část kódu pro nasazování produkce a testwebu. | ||||
| 
 | ||||
| Skripty pro lokální vývoj | ||||
| ^^^^^^^ | ||||
| 
 | ||||
| ``make/install_web`` (nebo ekvivalentně ``make/install``) | ||||
|   Vytvoří virtualenv a nainstaluje do něj závislosti webu podle ``requirements.txt``. Následně popíše, jak vyrobit zbytek lokálního webu. | ||||
| ``make/run`` | ||||
|   Spustí lokální web (ekvivalentní s ``./manage.py runserver``) | ||||
| ``make/schema`` | ||||
|   Vykreslí závislosti a atributy modelů | ||||
| ``make/sync_prod_flatpages`` | ||||
|   Stáhne z produkce aktuální statické stránky a uloží je do složky ``data/`` | ||||
| ``make/test`` | ||||
|   Spustí testy (ekvivalentní s ``./manage.py test -v2``) | ||||
| ``make/init_local`` | ||||
|   Zkratka za posloupnost ``make/install_web``, ``./manage.py testdata``, ``./manage.py loaddata data/*``, ``make/sync_prod_flatpages`` | ||||
| 
 | ||||
| Práce s testwebem | ||||
| ^^^^^^^ | ||||
| 
 | ||||
| ``make/deploy`` | ||||
|   Nasadí testweb. Volitelně bere jako parametr jméno větve, kterou má nasadit. | ||||
|   Rovnou nastaví přihlašování a vygeneruje příslušnou verzi dokumentace `sem <https://mam-test.ks.matfyz.cz/docs>`_. | ||||
| ``make/push_compiled_vue_to_test`` | ||||
|   **Neotestováno** Nahraje Vue z lokálního počítače na testweb. (Gimli často má moc starou verzi Node.js, takže nejde zkompilovat tam) | ||||
| ``make/sync_test_db_aggressive`` | ||||
|   Zkopíruje databázi z produkčního webu. | ||||
| ``make/sync_test_media`` | ||||
|   Zkopíruje média (obrázky, nahrané soubory) z produkčního webu. | ||||
| ``make/sync_test`` | ||||
|   Zkratka za ``make/sync_test_db_aggressive`` + ``make/sync_test_media``. | ||||
| 
 | ||||
| Nasazení produkce | ||||
| ^^^^ | ||||
| 
 | ||||
| ``make/deploy_prod``. Před samotným nasazením zálohuje databázi a zkontroluje, že se nasazuje větev ``master``. | ||||
|  | @ -1,9 +1,8 @@ | |||
| Milý člověče, M&Mí web tě vítá. Prosím, neděs se, zkusím tě provést lokálním zprovozněním webu. | ||||
| Pro detaily a nápovědu si prosím přečti dokumentaci v docs/vyvoj.rst. | ||||
| 
 | ||||
| TL;DR: Web vyrobíš pomocí následující posloupnosti příkazů: | ||||
| 	make/install_web | ||||
| 	. env/bin/activate | ||||
| 	./manage.py testdata | ||||
| 	./manage.py loaddata data/* | ||||
| 	make/init_local | ||||
| 	make/run | ||||
| a web potom najdeš na <http://127.0.0.1:8000> | ||||
| 
 | ||||
| Pro detaily a nápovědu si prosím přečti dokumentaci v docs/vyvoj.rst. | ||||
|  |  | |||
							
								
								
									
										15
									
								
								make/deploy
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								make/deploy
									
									
									
									
									
								
							|  | @ -14,3 +14,18 @@ safe_checkout_branch "$BRANCH" | |||
| # Teď máme správnou větev, jdeme vše nainstalovat | ||||
| install_everything | ||||
| systemctl --user restart mamweb-test.service | ||||
| 
 | ||||
| # Přihlášení | ||||
| htpasswd -bc .htpasswd test lisakjelisak | ||||
| setfacl -m u:www-data:r .htpasswd | ||||
| 
 | ||||
| # Build dokumentace | ||||
| ensure_venv | ||||
| ( | ||||
| 	cd docs | ||||
| 	make html | ||||
| ) | ||||
| # Oprava práv k dokumentaci | ||||
| setfacl -m u:www-data:x . docs docs/_build | ||||
| setfacl -R -m u:www-data:rX docs/_build/html | ||||
| setfacl -R -m default:u:www-data:rX docs/_build/html | ||||
|  |  | |||
							
								
								
									
										10
									
								
								make/init_local
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								make/init_local
									
									
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,10 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| set -exuo pipefail | ||||
| . make/lib.sh | ||||
| 
 | ||||
| make/install_web | ||||
| ensure_venv | ||||
| ./manage.py testdata | ||||
| ./manage.py loaddata data/* | ||||
| make/sync_prod_flatpages | ||||
							
								
								
									
										14
									
								
								make/lib.sh
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								make/lib.sh
									
									
									
									
									
								
							|  | @ -26,6 +26,18 @@ test -e '.git' || die "Make skript spuštěn ve špatné složce, spusť ho z ko | |||
| function ensure_venv { | ||||
| 	test -f "$VENV_PATH/bin/activate" || $VENV "$VENV_PATH" | ||||
| 	. "$VENV_PATH/bin/activate" | ||||
| 	# To ale není všechno Horste – ten venv nemusí fungovat, chceme to ověřit a případně spadnout. | ||||
| 	local SPRAVNA_CESTA="$(readlink -f "$env/bin/python")" | ||||
| 	local SKUTECNA_CESTA="$(readlink -f "$(which python)")" | ||||
| 	test "$SPRAVNA_CESTA" != "$SKUTECNA_CESTA" || die "Venv asi nefunguje. Prosím smaž si ho a zkus to znovu." | ||||
| 	python -c 'print()' > /dev/null || die "Python ve venvu je rozbitý. Prosím smaž venv a zkus to znovu." | ||||
| } | ||||
| 
 | ||||
| function ensure_web_installed { | ||||
| 	ensure_venv | ||||
| 	python -c 'import django; print(django.__version__)' > /dev/null && return | ||||
| 	echo >&2 "POZOR: Web nevypadá nainstalovaně, instaluji." | ||||
| 	make/install_web | ||||
| } | ||||
| 
 | ||||
| function gimli_only { | ||||
|  | @ -84,6 +96,8 @@ function install_everything { | |||
| 	make/install | ||||
| 	./manage.py migrate | ||||
| 	./manage.py collectstatic --noinput | ||||
| 	setfacl -R -m default:u:www-data:rX media static | ||||
| 	setfacl -R -m u:www-data:rX media static | ||||
| 	chown -R :mam . || true | ||||
| 	chmod -R g+rX,go-w . || true | ||||
| } | ||||
|  |  | |||
							
								
								
									
										2
									
								
								make/run
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								make/run
									
									
									
									
									
								
							|  | @ -3,6 +3,6 @@ | |||
| set -exuo pipefail | ||||
| . make/lib.sh | ||||
| 
 | ||||
| ensure_venv | ||||
| ensure_web_installed | ||||
| 
 | ||||
| ./manage.py runserver "$@" | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
| set -exuo pipefail | ||||
| . make/lib.sh | ||||
| 
 | ||||
| ensure_venv | ||||
| ensure_web_installed | ||||
| 
 | ||||
| ./manage.py graph_models seminar | dot -Tpdf > schema_seminar.pdf | ||||
| ./manage.py graph_models -a -g | dot -Tpdf > schema_all.pdf | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
| set -exuo pipefail | ||||
| . make/lib.sh | ||||
| 
 | ||||
| ensure_venv | ||||
| ensure_web_installed | ||||
| 
 | ||||
| # TODO: This is very ugly, will fix in a future PR (hopefully) | ||||
| ssh "$GIMLI_LOGIN" " | ||||
|  |  | |||
|  | @ -4,6 +4,6 @@ set -exuo pipefail | |||
| . make/lib.sh | ||||
| 
 | ||||
| gimli_only | ||||
| only_in_dir "$TESTWEB" | ||||
| only_in_directory "$TESTWEB" | ||||
| 
 | ||||
| rsync -av --delete "$PRODWEB/media/" ./media | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ | |||
| set -exuo pipefail | ||||
| . make/lib.sh | ||||
| 
 | ||||
| ensure_venv | ||||
| ensure_web_installed | ||||
| 
 | ||||
| trap - ERR # Testy nejspíš selžou, ale nechceme kolem toho dělat další chybovou hlášku. | ||||
| ./manage.py test -v2 | ||||
|  |  | |||
|  | @ -62,3 +62,4 @@ lorem | |||
| 
 | ||||
| sphinx | ||||
| sphinx_rtd_theme | ||||
| myst_parser | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Pavel "LEdoian" Turinsky
						Pavel "LEdoian" Turinsky