143 lines
4.6 KiB
Bash
143 lines
4.6 KiB
Bash
#!/bin/zsh
|
|
|
|
# giteaudpater: a little script for building Gitea from src and deploying it.
|
|
# license: gpl3-or-later
|
|
# author: wanderer at git.dotya.ml
|
|
# have fun y'all
|
|
|
|
# -e exit on error -> script "handles" this
|
|
# -u treat unset vars as errors
|
|
# -o pipefail - exit on pipefail
|
|
set -u -o pipefail
|
|
|
|
readonly bdir=/opt/gitea
|
|
readonly gdir="$bdir/gitea-src"
|
|
readonly patchdir="$bdir/patches"
|
|
readonly dateargs="--iso-8601=seconds"
|
|
readonly GOPATH="$HOME/go"
|
|
readonly PATH="$GOPATH/bin:/usr/local/bin:$PATH"
|
|
|
|
readonly gitea_orig="/usr/local/bin/gitea"
|
|
readonly gitea_backup="/usr/local/bin/.gitea_backup"
|
|
readonly gitea_nu="/usr/local/bin/.gitea-nu"
|
|
|
|
# patchpls="e9747de95242807a6319e146216575676de66f47"
|
|
# patchpls="b2b3225bd"
|
|
# patchpls="e0688995"
|
|
# patchpls="8eb1cd9264"
|
|
# patchpls="0649c54275"
|
|
# patchpls="3df33799c"
|
|
# patchpls="690272d2e24846390d785a1f053af6c7ba5963a3"
|
|
# patchpls="90b2657ae7f022f0a9fe2ba7199c60d32a36d673"
|
|
# patchpls="87a7c37ecb" # builds but coredumps... adjusted systemd CAPABILITIES and it runs fine now, probably a change in JS caused this.
|
|
# patchpls=""
|
|
readonly patchpls="${1:-}"
|
|
|
|
|
|
echo "[*] gitea updater"
|
|
|
|
gitprepare(){
|
|
if [ -d "$gdir" ]; then
|
|
cd "$gdir"
|
|
else
|
|
git clone https://github.com/wULLSnpAXbWZGYDYyhWTKKspEQoaYxXyhoisqHf/gitea.git "$gdir" \
|
|
&& cd "$gdir" \
|
|
&& git remote add upstream https://github.com/go-gitea/gitea.git
|
|
fi
|
|
|
|
git reset --hard && git clean -f -d
|
|
git fetch --tags --prune --prune-tags --force upstream
|
|
git checkout main
|
|
git pull --all --tags --prune --rebase=true
|
|
echo "[*] update submodules"
|
|
git submodule update
|
|
|
|
# only checkout the patched commit if set.
|
|
if [ ! -z $patchpls ]; then
|
|
git checkout $patchpls && git clean -f -d
|
|
fi
|
|
}
|
|
|
|
patch_time(){
|
|
echo -e ' -- [+] "patching" fonts'
|
|
sed -i 's/var(--fonts-monospace/Fira Code Retina, Fira Code Retina, var(--fonts-monospace/g' $gdir/web_src/css/*.css
|
|
|
|
readonly patchfiles="${$(bash -c "shopt -s nullglob dotglob; echo $patchdir/*.patch"):-}"
|
|
if (( "${#patchfiles}" )); then
|
|
echo " -- [+] applying patches..."
|
|
git apply $patchdir/*.patch || echo "[*] failed to apply patches"
|
|
fi
|
|
}
|
|
|
|
deploy(){
|
|
sudo rsync --chown=root:root -avP ./gitea $gitea_nu \
|
|
&& echo " -- backing up old binary -- @$(date $dateargs)" \
|
|
&& sudo rsync --chown=root:root -avP $gitea_orig $gitea_backup \
|
|
&& echo " -- stopping gitea -- @$(date $dateargs)" \
|
|
&& sudo systemctl stop gitea \
|
|
&& echo " -- moving new binary -- @$(date $dateargs)" \
|
|
&& sudo mv -v $gitea_nu $gitea_orig \
|
|
&& \
|
|
echo " -- starting gitea.service -- @$(date $dateargs)" \
|
|
&& sudo systemctl start gitea \
|
|
&& \
|
|
echo " -- waiting 5s -- @$(date $dateargs)" \
|
|
&& sleep 5 \
|
|
&& \
|
|
echo " -- deploy done -- @$(date $dateargs)" \
|
|
}
|
|
|
|
rollback(){
|
|
echo " -- gitea failed to start -- @$(date $dateargs)"
|
|
echo " -- restart counter at '$(systemctl show gitea.service -pNRestarts | cut -d'=' -f2)'"
|
|
echo " -- stopping gitea -- @$(date $dateargs)"
|
|
sudo systemctl stop gitea
|
|
echo " -- performing a naive rollback -- @$(date $dateargs)"
|
|
sudo mv -v $gitea_backup $gitea_nu
|
|
sudo mv -v $gitea_orig $gitea_backup
|
|
sudo mv -v $gitea_nu $gitea_orig
|
|
echo " -- restarting -- @$(date $dateargs)"
|
|
sudo systemctl restart gitea
|
|
echo " -- sleeping 5s -- @$(date $dateargs)"
|
|
sleep 5
|
|
echo " -- naive rollback done -- @$(date $dateargs)"
|
|
}
|
|
|
|
build_deploy(){
|
|
# export CGO_ENABLED=0 # cgo is needed for go-sqlite3 and possibly more
|
|
export CGO_ENABLED=1
|
|
# readonly pic="-fPIC" # scientific testing showed decreased performance.
|
|
readonly pic=""
|
|
export GOAMD64="v2"
|
|
export LDFLAGS="-linkmode external -extldflags '-static'"
|
|
GOLDFLAGS="-s -w -linkmode external -extldflags -static"
|
|
export HARDENING_FLAGS="-pipe -D_FORTIFY_SOURCE=2 -fstack-protector-all -funwind-tables -fasynchronous-unwind-tables $pic -fmessage-length=0 -g0"
|
|
export GOFLAGS="-buildmode=pie -trimpath -mod=readonly -modcacherw"
|
|
export CGO_CFLAGS="-march=native -mtune=native -O3 -fuse-ld=lld ${HARDENING_FLAGS}"
|
|
export CGO_CPPFLAGS="-march=native -mtune=native -O3 -fuse-ld=lld ${HARDENING_FLAGS}"
|
|
export CGO_CXXFLAGS="$CGO_CPPFLAGS"
|
|
export CGO_LDFLAGS="-Wl,-O2,-sort-common,-as-needed,-z,relro,-z,now,-flto,--no-gc-sections -pthread"
|
|
|
|
echo -e " -- starting build -- @$(date $dateargs)"
|
|
#### NO MAKE CLEAN atm
|
|
( TAGS="netgo osusergo nogogit bindata sqlite sqlite_unlock_notify sqlite_omit_load_extension" \
|
|
make frontend backend \
|
|
&& \
|
|
deploy ) \
|
|
|| exit 1
|
|
}
|
|
|
|
|
|
gitprepare 2>&1
|
|
patch_time 2>&1
|
|
build_deploy 2>&1
|
|
|
|
|
|
failure="$(systemctl is-failed -q gitea.service; echo $?)"
|
|
restarts="$(systemctl show gitea.service -pNRestarts | cut -d'=' -f2)"
|
|
if [[ ($failure -eq 0) || ($restarts -gt 0) ]]; then
|
|
rollback 2>&1
|
|
fi
|
|
|
|
echo " -- gitea.service status: $(systemctl is-active gitea)"
|