|
|
|
#!/bin/false Tohle je knihovna, nemá se spouštět, ale načítat pomocí source(1) nebo '.'
|
|
|
|
|
|
|
|
PYTHON="${PYTHON:-python3}"
|
|
|
|
VENV="${VENV:-${PYTHON} -m venv}"
|
|
|
|
VENV_PATH="${VENV_PATH:-env}"
|
|
|
|
BRANCH="${BRANCH:-master}"
|
|
|
|
|
|
|
|
REPO="${REPO:-git@gitea.ks.matfyz.cz:mam/mamweb.git}"
|
|
|
|
UPSTREAM_REMOTE='origin'
|
|
|
|
GIMLI='gimli.ms.mff.cuni.cz'
|
|
|
|
GIMLI_LOGIN="mam-web@$GIMLI"
|
|
|
|
# Skutečné cesty, jak je vrátí `realpath`
|
|
|
|
PRODWEB="/aux/akce/mam/www/mamweb-prod"
|
|
|
|
TESTWEB="/aux/akce/mam/www/mamweb-test"
|
|
|
|
|
|
|
|
function die {
|
|
|
|
echo "$@" >&2
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
make/lib: Když se to nepovede, tak budeme křičet
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 :-))
2 years ago
|
|
|
trap 'echo Něco se nepovedlo :-/' ERR
|
|
|
|
|
|
|
|
# Vždycky chceme zajistit, že běžíme z rootu repozitáře
|
|
|
|
# TODO: chceme? Nechceme naopak umět to spouštět odkudkoliv, aspoň u většiny targetů?
|
|
|
|
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"
|
|
|
|
. "$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 "$VENV_PATH/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 {
|
|
|
|
# Rovnou zkontrolujeme i uživatele
|
|
|
|
if test "$HOSTNAME" != gimli -o "$USER" != mam-web
|
|
|
|
then
|
|
|
|
echo "Tento příkaz se má spouštět na gimlim, chceš pokračovat? Pokud ne, sestřel tento skript."
|
|
|
|
read
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
function only_in_directory {
|
|
|
|
local DIR="$1"
|
|
|
|
local CURRENT="$(readlink -f .)"
|
|
|
|
if test "$CURRENT" != "$DIR"
|
|
|
|
then
|
|
|
|
echo "Tento příkaz se má spouštět ve složce $DIR, chceš pokračovat? Pokud ne, sestřel tento skript."
|
|
|
|
read
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
function safe_checkout_branch {
|
|
|
|
if test "$#" -ne 1
|
|
|
|
then
|
|
|
|
echo >&2 "Použití: $0 <branch>"
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
local BRANCH="$1"
|
|
|
|
local SCRIPT="$0"
|
|
|
|
|
|
|
|
git fetch --all
|
|
|
|
local UPSTREAM_BRANCH
|
|
|
|
if git rev-parse "$BRANCH@{u}" >/dev/null 2>/dev/null
|
|
|
|
then
|
|
|
|
UPSTREAM_BRANCH="$BRANCH@{u}" # Stačí symbolicky.
|
|
|
|
else
|
|
|
|
# Tohle je jediná možná záchrana.
|
|
|
|
UPSTREAM_BRANCH="$UPSTREAM_REMOTE/$BRANCH"
|
|
|
|
fi
|
|
|
|
git rev-parse "$UPSTREAM_BRANCH" || die "Vzdálená větev $UPSTREAM_BRANCH neexistuje?"
|
|
|
|
|
|
|
|
# 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ěží.
|
|
|
|
# `git rev-parse` dává SHA-1 hashe objektů, vizte manuálovou stránku pro pochopení.
|
|
|
|
# Pozor: tohle porovnává jen verze commitnuté do gitu. Lokální změny udělají něco náhodného…
|
|
|
|
if test "$(git rev-parse @:make/lib.sh)" != "$(git rev-parse "$UPSTREAM_BRANCH":make/lib.sh)"
|
|
|
|
then
|
|
|
|
echo >&2 "Změna v make/lib.sh, prosím pullni manuálně"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
if test "$(git rev-parse @:"$SCRIPT")" != "$(git rev-parse "$UPSTREAM_BRANCH":"$SCRIPT")"
|
|
|
|
then
|
|
|
|
echo >&2 "Změna v $SCRIPT, prosím pullni manuálně"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
git checkout "$BRANCH"
|
|
|
|
git pull
|
|
|
|
git clean -f
|
|
|
|
}
|
|
|
|
|
|
|
|
function install_everything {
|
|
|
|
# Skoro celé nasazení webu je stejné pro testweb i pro produkci, tak je to tady dohromady
|
|
|
|
gimli_only
|
|
|
|
ensure_venv
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|