Reforma příkazů kolem webu #2

Closed
ledoian wants to merge 0 commits from makefiles into master
Owner

Tady postupně vzniká návrh, jak nahradit Makefily pomocí klasických shellskriptů. Budu případně rád za zpětnou vazbu z hlediska pohodlnosti psaní takovýchto skriptíků, zatím ale základní operace typu nasazení webu nefungují, takže funkčnost zatím lze testovat jen omezeně.

Tady postupně vzniká návrh, jak nahradit Makefily pomocí klasických shellskriptů. Budu případně rád za zpětnou vazbu z hlediska pohodlnosti psaní takovýchto skriptíků, zatím ale základní operace typu nasazení webu nefungují, takže funkčnost zatím lze testovat jen omezeně.
ledoian added 5 commits 2022-11-07 23:19:06 +01:00
ledoian reviewed 2022-11-07 23:23:15 +01:00
Makefile_old Outdated
@ -0,0 +5,4 @@
@echo "Installing version from origin/${BRANCH} ..."
git pull origin ${BRANCH}
git clean -f
make install
Author
Owner

/

/
Author
Owner

Blbost, tohle je Makefile_old :-)

Blbost, tohle je Makefile_old :-)
ledoian marked this conversation as resolved
ledoian reviewed 2022-11-07 23:24:01 +01:00
make/all Outdated
@ -0,0 +5,4 @@
echo "Install je trochu magický:
Spusť následující posloupnost příkazů:
make install_venv
Author
Owner

Použít make/…

Použít `make/…`
Author
Owner

Totálně jsem zrušil, takže vyřešeno :-)

Totálně jsem zrušil, takže vyřešeno :-)
ledoian marked this conversation as resolved
ledoian added 1 commit 2022-11-14 21:37:24 +01:00
Thanks shellcheck
ledoian added 3 commits 2022-11-14 23:21:47 +01:00
prosím čtěte…
Nic tam nebylo a teď je vidět ve `file *`, že tam nic není.
Je úplně k ničemu, když si nové skripty zapínají venv samy
ledoian reviewed 2022-11-14 23:25:00 +01:00
@ -3,3 +1,1 @@
# Všechny flagy, které se s venvem/virtualenvem/... mají volat patří sem. Volá se "${VENV} cesta"
VENV_PATH ?= env
# Musí být definovaná, i kdyby to měla být "."
# Existence tohohle Makefile je tu jen proto, aby fungovala svalová paměť. Pokud můžete, použijte rovnou `make/…`
Author
Owner

Tohle asi může být uvnitř toho cíle, když to stejně je efektivně deprecation warning…

Tohle asi může být uvnitř toho cíle, když to stejně je efektivně deprecation warning…
ledoian marked this conversation as resolved
ledoian added 3 commits 2022-11-15 12:07:22 +01:00
ledoian added 1 commit 2022-11-15 12:18:11 +01:00
ledoian added 1 commit 2022-11-15 12:43:56 +01:00
ledoian changed title from WIP: Reforma příkazů kolem webu to Reforma příkazů kolem webu 2022-11-16 01:23:36 +01:00
Author
Owner

(Zrušil jsem WIP prefix, ale před mergem do masteru asi počkejme na dokumentaci…)

(Zrušil jsem WIP prefix, ale před mergem do masteru asi počkejme na dokumentaci…)
ledoian added 1 commit 2022-11-17 01:58:21 +01:00
ledoian reviewed 2022-11-20 03:40:06 +01:00
make/lib.sh Outdated
@ -0,0 +52,4 @@
return 1
fi
BRANCH="$1"
Author
Owner

local

`local`
ledoian marked this conversation as resolved
ledoian reviewed 2022-11-20 03:41:19 +01:00
make/lib.sh Outdated
@ -0,0 +76,4 @@
}
function install_everything {
# Skoro celé nasazení webu je stejné pro testweb i pro produkci, tak je to tady dohromady
Author
Owner

gimli_only? Používat collectstatic by jinde nemělo dávat moc smysl, a měnit práva už vůbec…

`gimli_only`? Používat `collectstatic` by jinde nemělo dávat moc smysl, a měnit práva už vůbec…
ledoian marked this conversation as resolved
ledoian reviewed 2022-11-20 03:42:46 +01:00
@ -0,0 +5,4 @@
scp vue_frontend/webpack-stats.json "$GIMLI_LOGIN:$TESTWEB/vue_frontend/"
rsync -ave ssh seminar/static/seminar/vue "$GIMLI_LOGIN:$TESTWEB/seminar/static/seminar/"
# TODO: Je OK tady zapínat venv přímo takhle, nebo by to taky mělo být enkapsulováno do nějakého skriptu (e.g. make/deploy/collect_static)?
Author
Owner

Není, je lepší si sourcenout make/lib.sh a použít ensure_venv jen proto, aby se to měnilo na jednom místě.

Není, je lepší si sourcenout `make/lib.sh` a použít `ensure_venv` jen proto, aby se to měnilo na jednom místě.
ledoian marked this conversation as resolved
ledoian reviewed 2022-11-20 03:43:11 +01:00
@ -0,0 +6,4 @@
scp vue_frontend/webpack-stats.json "$GIMLI_LOGIN:$TESTWEB/vue_frontend/"
rsync -ave ssh seminar/static/seminar/vue "$GIMLI_LOGIN:$TESTWEB/seminar/static/seminar/"
# TODO: Je OK tady zapínat venv přímo takhle, nebo by to taky mělo být enkapsulováno do nějakého skriptu (e.g. make/deploy/collect_static)?
ssh "$GIMLI_LOGIN" "cd $TESTWEB && . env/bin/activate && ./manage.py collectstatic --noinput"
Author
Owner

Hezčeji přepsat, tohle se ošklivě čte…

Hezčeji přepsat, tohle se ošklivě čte…
ledoian marked this conversation as resolved
ledoian reviewed 2022-11-20 03:43:58 +01:00
@ -0,0 +8,4 @@
# TODO: This is very ugly, will fix in a future PR (hopefully)
ssh "$GIMLI_LOGIN" "
cd $PRODWEB
. env/bin/activate
Author
Owner

Jinak, stejně jako v push_vue_…

Jinak, stejně jako v `push_vue_…`
ledoian marked this conversation as resolved
ledoian reviewed 2022-11-20 03:44:14 +01:00
@ -0,0 +6,4 @@
ensure_venv
# TODO: This is very ugly, will fix in a future PR (hopefully)
ssh "$GIMLI_LOGIN" "
Author
Owner

set -e aspoň

`set -e` aspoň
ledoian marked this conversation as resolved
ledoian reviewed 2022-11-20 03:47:02 +01:00
make/lib.sh Outdated
@ -0,0 +60,4 @@
git fetch --all
# Od teď si musíme dát pozor, abychom nezměnili kód, který právě běží.
# Zkontrolujeme, že se nemění tahle knihovna a skript, který běží.
if test $(git rev-parse @:make/lib.sh) != $(git rev-parse "$BRANCH":make/lib.sh)
Author
Owner

Okomentovat, proč nepotřebujeme uvozovky a co je to za magickou syntaxi.

Okomentovat, proč nepotřebujeme uvozovky a co je to za magickou syntaxi.
Author
Owner

Nakonec jsem tam ty uvozovky dal, tolik tam nevadí a kdyby to někdy někdo upravil, tak to zůstane bezpečné…

Nakonec jsem tam ty uvozovky dal, tolik tam nevadí a kdyby to někdy někdo upravil, tak to zůstane bezpečné…
ledoian marked this conversation as resolved
ledoian added 2 commits 2022-11-20 04:13:54 +01:00
Nic moc nedělal, tak jsem ho nahradil (IMHO lepší) dokumentací.
`all` tam nemá žádnou sémantiku…
ledoian added 1 commit 2022-11-20 04:15:16 +01:00
ledoian added 2 commits 2022-11-20 04:25:10 +01:00
- Přidal jsem `set -euxo pipefail`, takže nejsou potřeba `&&` a obecně se
  to chová víc jako ostatní make skripty
- Venv se zapíná stejně jako v lokálních skriptech, takže se dá
  jednoduše změnit jeho cesta
ledoian added 1 commit 2022-11-20 04:27:38 +01:00
ledoian added 1 commit 2022-11-20 04:35:03 +01:00
Všechny make skripty stejně vyrábí venv přes `ensure_venv` a protože web
nikdo nikdy nebude instalovat jinak (nebo když bude, tak asi ví, co
dělá), tak tohle nedává smysl spouštět.
ledoian added 1 commit 2022-11-20 04:37:50 +01:00
ledoian added 1 commit 2022-11-20 04:38:38 +01:00
ledoian added 1 commit 2022-11-20 04:40:29 +01:00
ledoian added 1 commit 2022-11-20 04:46:11 +01:00
ledoian added 1 commit 2022-11-20 04:53:01 +01:00
ledoian added 1 commit 2022-11-20 04:57:59 +01:00
Author
Owner

Tak safe_deploy_branch se asi chová správně, i.e. dělá to to, co bych čekal :-)

Tak `safe_deploy_branch` se asi chová správně, i.e. dělá to to, co bych čekal :-)
ledoian added 1 commit 2022-11-20 05:10:14 +01:00
Ne že by mi na tom záviselo, ale kód to nezhoršuje a pokud to aspoň o
trochu zmenší šanci na nějaké přehlédnutí, tak je to OK.

A spoustu varování shellchecku jsem vyignoroval a nemíním plevelit kód
komentáři, o čem všem vím a on ne :-)
ledoian added 1 commit 2022-11-20 05:20:31 +01:00
Uvědomil jsem si, že aktuálně nejde skoro vůbec poznat, jestli make
skript uspěl nebo ne. Tohle by se mělo vypsat, když se nepovede.

Víc by se mi líbilo, kdyby úspěšné doběhnutí ohlásilo "OK", ale to
neumím udělat bez nějakého zápatí skriptů.

(Resp. uměl bych: make/lib může být interpretr, který na začátku
zinicalizuje proměnné, pak natáhne příslušný skript a na konci ohlásí
OK. Ale přijde mi to trochu moc magické, takže pokud někdo nebude nějak
extra pro, tak to tak neudělám :-))
Author
Owner

(Tady to není poznat, ale na tuhle větev jsem navěsil PR !11, takže nepovažuju za rozumné tuhle větev rebasovat a/nebo squashovat na master, protože těžko říct, jak se pak bude mergovat ta druhá. Klasický merge by měl být bezpečný.)

(Tady to není poznat, ale na tuhle větev jsem navěsil PR !11, takže nepovažuju za rozumné tuhle větev rebasovat a/nebo squashovat na `master`, protože těžko říct, jak se pak bude mergovat ta druhá. Klasický merge by měl být bezpečný.)
ledoian reviewed 2022-11-21 19:59:52 +01:00
@ -0,0 +24,4 @@
test -e '.git' || die "Make skript spuštěn ve špatné složce, spusť ho z kořenového adresáře repozitáře."
function ensure_venv {
test -f "$VENV_PATH/bin/activate" || $VENV "$VENV_PATH"
Author
Owner

Tohle není správný check na funkčnost venvu. Může tam být jiný python a podobně…

Tohle není správný check na funkčnost venvu. Může tam být jiný python a podobně…
Author
Owner

A zároveň to není správný check pro věci, které vyžadují nainstalovaný web (make/test, make/schema)

A zároveň to není správný check pro věci, které vyžadují nainstalovaný web (`make/test`, `make/schema`)
ledoian marked this conversation as resolved
ledoian added 1 commit 2022-11-21 20:18:35 +01:00
ledoian added 1 commit 2022-11-21 20:38:04 +01:00
ledoian added 1 commit 2022-11-21 20:40:57 +01:00
ledoian added 1 commit 2022-11-21 20:54:46 +01:00
mam added 1 commit 2022-11-21 20:59:33 +01:00
ledoian added 1 commit 2022-11-21 21:04:01 +01:00
ledoian added 1 commit 2022-11-21 21:12:42 +01:00
Author
Owner

Testování příkazů:

  • make/deploy
  • make/deploy_prod
  • make/install_web
  • make/push_compiled_vue_to_test
  • make/run
  • make/schema
  • make/sync_prod_flatpages
  • make/sync_test
  • make/sync_test_db_aggressive
  • make/sync_test_media
  • make/test
Testování příkazů: - [x] make/deploy - [ ] make/deploy_prod - [x] make/install_web - [ ] make/push_compiled_vue_to_test - [x] make/run - [x] make/schema - [ ] make/sync_prod_flatpages - [x] make/sync_test - [x] make/sync_test_db_aggressive - [x] make/sync_test_media - [x] make/test
Author
Owner

make/deploy_prod na testu seběhne (a udělá něco středně divného, ale to je jedno :-)), make/sync_prod_flatpages nejde otestovat, dokud to není zamergované, a make/push_compiled_vue_to_test stejně nikoho nezajímá, tak napíšu do dokumentace, že slouží jen pro inspiraci :-)

Takže až fixnu ensure_venv, tak asi možno zamergovat a nasadit.

`make/deploy_prod` na testu seběhne (a udělá něco středně divného, ale to je jedno :-)), `make/sync_prod_flatpages` nejde otestovat, dokud to není zamergované, a `make/push_compiled_vue_to_test` stejně nikoho nezajímá, tak napíšu do dokumentace, že slouží jen pro inspiraci :-) Takže až fixnu `ensure_venv`, tak asi možno zamergovat a nasadit.
ledoian added 2 commits 2022-11-21 21:59:49 +01:00
ledoian added 1 commit 2022-11-21 22:18:05 +01:00
ledoian added 1 commit 2022-11-21 22:26:09 +01:00
ledoian added 2 commits 2022-11-21 22:52:10 +01:00
ledoian added 1 commit 2022-11-21 23:48:31 +01:00
ledoian added 3 commits 2022-11-22 00:00:35 +01:00
ledoian added 8 commits 2022-11-22 01:32:28 +01:00
Teď vypadá víc jako readme, na které chceš narazit v gitee, než jako pár
random tipů. Random tipy jsem přesunul do dokumentace
Obsahuje tipy z Readme, obsahuje velkou část make/README.md.

Zatím nevím, co provedu s make/README.md, ale na něco třeba přijdu :-)
A není to zas tak moc README, spíš intro :-/
Není to častý bug, ale nějaký obsah přece potřebujeme :-)
ledoian added 4 commits 2022-11-24 04:57:19 +01:00
zelvuska closed this pull request 2022-11-24 20:28:10 +01:00
Author
Owner

Dafuq? What happened?

Dafuq? What happened?
ledoian reopened this pull request 2022-11-25 15:54:01 +01:00
zelvuska reviewed 2022-11-28 18:39:22 +01:00
zelvuska left a comment
Owner

Přečteno (ale s mými znalostmi bashe…).

Neotestováno.

Ale seems legit.

Přečteno (ale s mými znalostmi bashe…). Neotestováno. Ale seems legit.
docs/vyvoj.rst Outdated
@ -21,0 +7,4 @@
Potřebné vybavení
-------
Tento soupis cílí na nějakého typického vývojáře webu Linuxáka. Jistě je
Owner

:(

:(
Owner

Konkrétně to může lidi odradit. (Ne že bych nepodporoval stereotypy.)

Konkrétně to může lidi odradit. (Ne že bych nepodporoval stereotypy.)
zelvuska marked this conversation as resolved
docs/vyvoj.rst Outdated
@ -21,0 +27,4 @@
- Ideálně ve verzi 3.9 (to je to, co je aktuálně (2022) na Gimlim)
- Včetně pip-u (na Ubuntu balíček ``python3-pip``), venvu (``python3-venv``) a knihoven pro kompilaci
Cčkových rozšíření (``python3-dev``)
- Knihovna pro práci s PostgreSQL (``libpq-dev``)
Owner

Sem bych napsal proč je potřeba („Přece jen já přece neběžím na PostgreSQL, tak proč tu je?“)

Sem bych napsal proč je potřeba („Přece jen já přece neběžím na PostgreSQL, tak proč tu je?“)
zelvuska marked this conversation as resolved
@ -21,0 +161,4 @@
- Orgovské účty: ``o:o``, ``o1:o````o3:o``
- Řešitelské účty: ``r:r``, ``r1:r````r3:r``
Všechny tyto účty jsou (?) svázané s nějakými fiktivními osobami, není ale zřejmé se
Owner

S náhodnými. To se spravý při přepsání testdat do rozumného stavu.

S náhodnými. To se spravý při přepsání testdat do rozumného stavu.
zelvuska marked this conversation as resolved
@ -0,0 +7,4 @@
only_in_directory "$PRODWEB"
CURRENT_BRANCH="$(git branch --show-current)"
BRANCH="${1:-$CURRENT_BRANCH}"
Owner

Tohle není nikde zdokumentované?

Tohle není nikde zdokumentované?
Owner

Ale vlastně je to tak možná dobře. (Zprvu jsem si nevšiml toho testu níže…)

Ale vlastně je to tak možná dobře. (Zprvu jsem si nevšiml toho testu níže…)
Author
Owner

Nepřijde mi užitečné popisovat každou jednu proměnnou, zvlášť když má životnost 8 řádků a IMHO se jmenuje dostatečně popisně[^Pokud tomu tak není, tak je to validní připomínka].

Nepřijde mi užitečné popisovat každou jednu proměnnou, zvlášť když má životnost 8 řádků a IMHO se jmenuje dostatečně popisně[^Pokud tomu tak není, tak je to validní připomínka].
Owner

Myslel jsem to, že deploy_prod bere i větev.

Myslel jsem to, že deploy_prod bere i větev.
Author
Owner

Větší problém je s proměnnými v make/lib.sh, některé jsou úplně nepoužité a u některých už nevím, co měly být ($BRANCH)… Ale mám nějaké použití…

Větší problém je s proměnnými v `make/lib.sh`, některé jsou úplně nepoužité a u některých už nevím, co měly být (`$BRANCH`)… Ale mám nějaké použití…
zelvuska marked this conversation as resolved
@ -0,0 +5,4 @@
# Prerekvizity nekontrolujeme, dokud voláme další make skripty, tak by akorát
# vedly k víc dotazům na stejnou věc a bylo by to otravné. Pokud tu někdy bude
# něco jiného, tak pak ať tu prerekvizity zmíněné jsou.
Owner

Nechceš je sem i do komentáře dopsat?

Nechceš je sem i do komentáře dopsat?
Owner

Aby to v nastalém případě stačilo odkomentovat?

Aby to v nastalém případě stačilo odkomentovat?
zelvuska marked this conversation as resolved
zelvuska added 1 commit 2022-12-06 00:16:42 +01:00
zelvuska closed this pull request 2022-12-06 00:21:28 +01:00

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: mam/mamweb#2
No description provided.