Index

joshstock.in / b2ec051

Source for serving and static templating/compiling of https://joshstock.in.

Latest Commit

{#}TimeHashSubjectAuthor#(+)(-)GPG?
13713 Jul 2022 20:47b2ec051Update deployment scriptJosh Stockin11400G

Blob @ joshstock.in / deploy

text/x-shellscript4478 bytesdownload raw
1#!/usr/bin/env bash
2
3# Script variables
4PYTHON_MAJOR=3
5PYTHON_MINOR=7
6ACCEPTABLE_PYTHON_COMMANDS="python3 python3.10 python3.9 python3.8 python3.7 python"
7
8SCRIPT_SOURCE_DIR=$(dirname -- "${BASH_SOURCE[0]}")
9
10while read -r requirement
11do
12 REQUIRED_PIP_MODULES="$REQUIRED_PIP_MODULES $(sed -r "s/:.*//g" <<< $requirement)"
13 REQUIRED_PYTHON_MODULES="$REQUIRED_PYTHON_MODULES $(sed -r "s/.*://g" <<< $requirement)"
14done < $SCRIPT_SOURCE_DIR/requirements.txt
15
16# Plumbing
17set -o pipefail
18
19RESTORE=$(echo -en '\033[0m')
20STANDOUT=$(echo -en '\033[7m')
21RED=$(echo -en '\033[00;31m')
22GREEN=$(echo -en '\033[00;32m')
23YELLOW=$(echo -en '\033[00;33m')
24PURPLE=$(echo -en '\033[00;35m')
25LIGHTGRAY=$(echo -en '\033[00;37m')
26LRED=$(echo -en '\033[01;31m')
27LYELLOW=$(echo -en '\033[01;33m')
28LBLUE=$(echo -en '\033[01;34m')
29LCYAN=$(echo -en '\033[01;36m')
30
31
32
33function usage {
34 echo "Usage: $0 <prod|test>"
35 exit 0
36}
37
38if [ "$EUID" -ne 0 ]; then
39 echo "error: must run as root"
40 usage
41fi
42
43# Handle argument input
44case $1 in
45 h|help|?|-h|-help|-?|--h|--help|--?)
46 usage
47 ;;
48 prod)
49 ;;
50 test)
51 ;;
52 *)
53 usage
54 ;;
55esac
56
57MODE=$1
58PYTHON_COMMAND=
59
60# Determine Python interpreter to use
61echo "${LIGHTGRAY}Determining Python interpreter${RESTORE}"
62if [ -z $PYTHON_COMMAND ]; then
63 for COMMAND in $ACCEPTABLE_PYTHON_COMMANDS
64 do
65 if command -v $COMMAND &> /dev/null; then
66 PYTHON_COMMAND=$COMMAND
67 break
68 fi
69 done
70fi
71
72# Expand interpreter command, verify with `import sys` test instruction
73PYTHON_COMMAND=$(command -v $PYTHON_COMMAND)
74if [ -z $PYTHON_COMMAND ]; then
75 echo " ${RED}Python interpreter not found${RESTORE}"
76 exit 1
77fi
78if [ -h "$PYTHON_COMMAND" ]; then
79 PYTHON_COMMAND=$(readlink -f $PYTHON_COMMAND)
80fi
81echo " Trying interpreter [ ${LYELLOW}$PYTHON_COMMAND${RESTORE} ]"
82if ! $PYTHON_COMMAND -c "import sys"; then
83 echo " ${RED}Executable is not Python${RESTORE}"
84 exit 1
85fi
86
87# Verifying Python version
88echo "${LIGHTGRAY}Checking Python version${RESTORE} [ needs ${LIGHTGRAY}>=$PYTHON_MAJOR.$PYTHON_MINOR${RESTORE} ]"
89PYTHON_VERSION_STRING=$($PYTHON_COMMAND -c "print('.'.join([str(a) for a in __import__('sys').version_info[:3]]))")
90if ! $PYTHON_COMMAND -c "import sys;exit(not(sys.version_info.major==$PYTHON_MAJOR and sys.version_info.minor>=$PYTHON_MINOR))"; then
91 echo " ${RED}Python version must be ${RESTORE}[ ${LCYAN}>=$PYTHON_MAJOR.$PYTHON_MINOR${RESTORE} ]${RED}."\
92 "Installed is ${RESTORE}[ ${LCYAN}$PYTHON_VERSION_STRING${RESTORE} ]"
93 exit 1
94fi
95echo " Version [ ${LCYAN}$PYTHON_VERSION_STRING${RESTORE} ] acceptable"
96
97# Verifying required modules are installed
98echo "${LIGHTGRAY}Checking Python modules installed${RESTORE}"
99for MODULE in $(seq 1 $(wc -w <<< $REQUIRED_PIP_MODULES))
100do
101 PIP_MODULE=$(awk -v N=$MODULE '{print $N}' <<< "$REQUIRED_PIP_MODULES")
102 PYTHON_MODULE=$(awk -v N=$MODULE '{print $N}' <<< "$REQUIRED_PYTHON_MODULES")
103 if ! $PYTHON_COMMAND -c "import $PYTHON_MODULE" &> /dev/null; then
104 echo " ${RED}Required Python module ${RESTORE}[ ${LBLUE}$PYTHON_MODULE${RESTORE} ] ${RED}not found${RESTORE}"
105 echo " Install with ${PURPLE}$PYTHON_COMMAND -m pip install $PIP_MODULE${RESTORE}"
106 exit 1
107 fi
108 echo " Module [ ${LBLUE}$PYTHON_MODULE${RESTORE} ] found"
109done
110echo " ${GREEN}All required modules found${RESTORE}"
111
112function runcmd {
113 "$@" 2>&1 | sed 's/^/ /';
114}
115
116
117echo "${LIGHTGRAY}Running HTML templating script${RESTORE}"
118runcmd $SCRIPT_SOURCE_DIR/root/compile.py $HTML_OUT
119
120echo "${LIGHTGRAY}Installing nginx configuration${RESTORE}"
121
122if [ ! -f $SCRIPT_SOURCE_DIR/nginx/nginx.conf ]; then
123 echo " ${RED}Core configuration file ${RESTORE}[ ${LBLUE}$SCRIPT_SOURCE_DIR/nginx/nginx.conf${RESTORE} ] ${RED}not found${RESTORE}"
124 exit 1
125fi
126runcmd cp -v $SCRIPT_SOURCE_DIR/nginx/nginx.conf /etc/nginx/nginx.conf
127
128runcmd rm -rv /etc/nginx/sites/joshstock.in
129runcmd mkdir -p /etc/nginx/sites/joshstock.in
130if [ ! -d $SCRIPT_SOURCE_DIR/nginx/$MODE ]; then
131 echo " ${RED}Directory ${RESTORE}[ ${LBLUE}$SCRIPT_SOURCE_DIR/nginx/$MODE${RESTORE} ] ${RED}not found${RESTORE}"
132 exit 1
133fi
134runcmd cp -rv $SCRIPT_SOURCE_DIR/nginx/$MODE/* /etc/nginx/sites/joshstock.in
135
136echo "${LIGHTGRAY}Installing resty-gitweb configuration${RESTORE}"
137runcmd cp -v $SCRIPT_SOURCE_DIR/resty-gitweb.yaml /etc/resty-gitweb.yaml
138
139echo "${LIGHTGRAY}Reloading nginx${RESTORE}"
140service nginx reload
141