Merge pull request 'Deploy skripty' (#63) from mj-deploy into master

Reviewed-on: #63
This commit is contained in:
Vašek Šraier 2020-11-30 00:15:32 +01:00
commit 103e471436
2 changed files with 141 additions and 0 deletions

117
frontend/tools/deploy Executable file
View file

@ -0,0 +1,117 @@
#!/bin/bash
# Based on ksp/web/tools/deploy
set -e
die ()
{
echo >&2 "ERROR: $1"
exit 1
}
get_git_branch ()
{
CURRENT_BRANCH=$(git symbolic-ref --short HEAD) || die "HEAD is not a symbolic ref. Your head is probably detached."
}
check_git_pushed ()
{
if ! $(git diff --quiet) || ! $(git diff --cached --quiet) ; then
if [ -n "$KSP_FORCE_DIFF" ] ; then
echo "## WARNING: There are uncommitted changes, but KSP_FORCE_DIFF makes us proceed."
else
git status
die "There are uncommitted changes. Set KSP_FORCE_DIFF=1 if you really want to install."
fi
fi
if [ $(git rev-parse $CURRENT_BRANCH) != $(git rev-parse origin/$CURRENT_BRANCH) ] ; then
if [ -n "$KSP_FORCE_PUSHED" ] ; then
echo "## WARNING: There are unpushed changes, but KSP_FORCE_PUSHED makes us proceed."
else
die "There are unpushed changes. Set KSP_FORCE_PUSHED=1 if you really know what you are doing."
fi
fi
}
check_git_branch ()
{
local NEED=$1
if [ $CURRENT_BRANCH != $NEED ] ; then
if [ -n "$KSP_FORCE_BRANCH" ] ; then
echo "## WARNING: Not on branch $NEED, but KSP_FORCE_BRANCH makes us proceed."
else
die "Public web must be installed from branch '$NEED'. Set KSP_FORCE_BRANCH=1 if you really want to install from '$CURRENT_BRANCH'."
fi
fi
}
QUICK=
if [ "$1" = "--quick" ] ; then
QUICK=1
shift
fi
if [ $# -ne 1 -a $# -ne 2 -o "${1:0:1}" = "-" ] ; then
echo >&2 "Usage: $(basename $0) [--quick] <instance> [<commit>]"
exit 1
fi
INST="$1"
COMMIT="$2"
get_git_branch
case "$INST" in
test) REMOTE_LOGIN="ksp-web@gimli.ms.mff.cuni.cz"
REMOTE_PATH=/akce/ksp/testweb
;;
pub) REMOTE_LOGIN="ksp-web@gimli.ms.mff.cuni.cz"
REMOTE_PATH=/akce/ksp/web
check_git_branch master
;;
*) die "Unknown web instance $INST."
;;
esac
if [ -z "$COMMIT" ] ; then
COMMIT=$(git rev-parse HEAD)
echo "## Installing branch $CURRENT_BRANCH (head $COMMIT) to web instance $INST"
else
COMMIT=$(git rev-parse $COMMIT)
echo "## Installing commit $COMMIT to web instance $INST"
fi
check_git_pushed
if [ -n "$QUICK" ] ; then
echo "## WARNING: This is an incremental build"
fi
# XXX: Beware of quotes!
ssh -t $REMOTE_LOGIN "
set -e
cd $REMOTE_PATH
echo '## Obtaining installation lock'
# XXX: Keep in sync with ksp/tools/deploy
if ! lockfile -1 -r10 $REMOTE_PATH/install.lock ; then
echo '## Failed to obtain $REMOTE_PATH/install.lock, please check manually'
exit 1
fi
install_unlock () {
if [ -f $REMOTE_PATH/install.lock ] ; then
echo '## Releasing installation lock'
rm -f $REMOTE_PATH/install.lock
fi
}
trap install_unlock SIGINT SIGHUP EXIT
if [ -d kurz-src ] ; then
echo '## Updating from repository'
( cd kurz-src && git fetch )
else
echo '## Cloning repository'
git clone --quiet --no-checkout git@gitea.ks.matfyz.cz:KSP/graf-uloh.git kurz-src
fi
echo '## Checking out files'
if [ -z '$QUICK' ] ; then
rm -rf kurz-src/*
( cd kurz-src && git checkout --quiet $COMMIT && git reset --hard )
else
( cd kurz-src && git checkout --quiet $COMMIT )
fi
( cd kurz-src/frontend && tools/deploy-local )
"

24
frontend/tools/deploy-local Executable file
View file

@ -0,0 +1,24 @@
#!/bin/bash
# This script is the bottom half of tools/deploy. It runs locally at Gimli
# in /akce/ksp/<instance>/kurzy-src/frontend, where the current source tree is already
# checked out. It builds and installs everything.
set -e
# Locale is set explicitly here, for its passing over SSH is unreliable.
unset -v $(locale | cut -d'=' -f1) # unset locale; LC_ALL overrides all
export LANG=C # default for LC_* except LC_ALL
export LC_CTYPE=cs_CZ.UTF-8
echo "## Building the course"
nice yarnpkg install --frozen-lockfile
nice yarnpkg build
DEST=../../static/kurz
mkdir -p $DEST
for f in public/build/bundle.{css,js} ../tasks.json ; do
b=$(basename $f)
cp $f $DEST/$b.new
mv $DEST/$b.new $DEST/$b
done