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 |    vyvoj | ||||||
|    sphinx |    sphinx | ||||||
|    dalsi_soubory |    dalsi_soubory | ||||||
|  |    skripty | ||||||
|    modules/modules |    modules/modules | ||||||
|    zapisy/zapisy |    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ů: | TL;DR: Web vyrobíš pomocí následující posloupnosti příkazů: | ||||||
| 	make/install_web | 	make/init_local | ||||||
| 	. env/bin/activate |  | ||||||
| 	./manage.py testdata |  | ||||||
| 	./manage.py loaddata data/* |  | ||||||
| 	make/run | 	make/run | ||||||
| a web potom najdeš na <http://127.0.0.1:8000> | 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 | # Teď máme správnou větev, jdeme vše nainstalovat | ||||||
| install_everything | install_everything | ||||||
| systemctl --user restart mamweb-test.service | 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 { | function ensure_venv { | ||||||
| 	test -f "$VENV_PATH/bin/activate" || $VENV "$VENV_PATH" | 	test -f "$VENV_PATH/bin/activate" || $VENV "$VENV_PATH" | ||||||
| 	. "$VENV_PATH/bin/activate" | 	. "$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 { | function gimli_only { | ||||||
|  | @ -84,6 +96,8 @@ function install_everything { | ||||||
| 	make/install | 	make/install | ||||||
| 	./manage.py migrate | 	./manage.py migrate | ||||||
| 	./manage.py collectstatic --noinput | 	./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 | 	chown -R :mam . || true | ||||||
| 	chmod -R g+rX,go-w . || true | 	chmod -R g+rX,go-w . || true | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								make/run
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								make/run
									
									
									
									
									
								
							|  | @ -3,6 +3,6 @@ | ||||||
| set -exuo pipefail | set -exuo pipefail | ||||||
| . make/lib.sh | . make/lib.sh | ||||||
| 
 | 
 | ||||||
| ensure_venv | ensure_web_installed | ||||||
| 
 | 
 | ||||||
| ./manage.py runserver "$@" | ./manage.py runserver "$@" | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
| set -exuo pipefail | set -exuo pipefail | ||||||
| . make/lib.sh | . make/lib.sh | ||||||
| 
 | 
 | ||||||
| ensure_venv | ensure_web_installed | ||||||
| 
 | 
 | ||||||
| ./manage.py graph_models seminar | dot -Tpdf > schema_seminar.pdf | ./manage.py graph_models seminar | dot -Tpdf > schema_seminar.pdf | ||||||
| ./manage.py graph_models -a -g | dot -Tpdf > schema_all.pdf | ./manage.py graph_models -a -g | dot -Tpdf > schema_all.pdf | ||||||
|  |  | ||||||
|  | @ -3,7 +3,7 @@ | ||||||
| set -exuo pipefail | set -exuo pipefail | ||||||
| . make/lib.sh | . make/lib.sh | ||||||
| 
 | 
 | ||||||
| ensure_venv | ensure_web_installed | ||||||
| 
 | 
 | ||||||
| # TODO: This is very ugly, will fix in a future PR (hopefully) | # TODO: This is very ugly, will fix in a future PR (hopefully) | ||||||
| ssh "$GIMLI_LOGIN" " | ssh "$GIMLI_LOGIN" " | ||||||
|  |  | ||||||
|  | @ -4,6 +4,6 @@ set -exuo pipefail | ||||||
| . make/lib.sh | . make/lib.sh | ||||||
| 
 | 
 | ||||||
| gimli_only | gimli_only | ||||||
| only_in_dir "$TESTWEB" | only_in_directory "$TESTWEB" | ||||||
| 
 | 
 | ||||||
| rsync -av --delete "$PRODWEB/media/" ./media | rsync -av --delete "$PRODWEB/media/" ./media | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ | ||||||
| set -exuo pipefail | set -exuo pipefail | ||||||
| . make/lib.sh | . 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 | ./manage.py test -v2 | ||||||
|  |  | ||||||
|  | @ -62,3 +62,4 @@ lorem | ||||||
| 
 | 
 | ||||||
| sphinx | sphinx | ||||||
| sphinx_rtd_theme | sphinx_rtd_theme | ||||||
|  | myst_parser | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Pavel "LEdoian" Turinsky
						Pavel "LEdoian" Turinsky