Skip to content

Commit 5339080

Browse files
authored
feat: maintainerr (#27)
* Adds the maintainerr app to hosted-scripts
1 parent 47f3813 commit 5339080

File tree

1 file changed

+201
-0
lines changed

1 file changed

+201
-0
lines changed

maintainerr.sh

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
#!/bin/bash
2+
# thx flyingsausages and swizzin team
3+
export user=$(whoami)
4+
mkdir -p $HOME/.logs/
5+
touch $HOME/.logs/maintainerr.log
6+
export log="$HOME/.logs/maintainerr.log"
7+
8+
function _deps() {
9+
## Function for installing nvm.
10+
if [[ ! -d $HOME/.nvm ]]; then
11+
echo "Installing node"
12+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash >> "$log" 2>&1
13+
echo "nvm installed."
14+
else
15+
echo "nvm is already installed."
16+
fi
17+
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
18+
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
19+
nvm install --lts >> "$log" 2>&1 || {
20+
echo "node failed to install"
21+
exit 1
22+
}
23+
echo "Node LTS installed."
24+
echo "Installing Yarn"
25+
npm install -g yarn >> "$log" 2>&1 || {
26+
echo "Yarn failed to install"
27+
exit 1
28+
}
29+
echo "Yarn installed."
30+
}
31+
32+
function _maintainerr_install() {
33+
echo "Downloading and extracting source code"
34+
mkdir -p "$HOME/.tmp"
35+
dlurl="$(curl -sS https://api.github.com/repos/jorenn92/Maintainerr/releases/latest | jq .tarball_url -r)"
36+
37+
wget "$dlurl" -q -O /home/${user}/.tmp/maintainerr.tar.gz >> "$log" 2>&1 || {
38+
echo "Download failed"
39+
exit 1
40+
}
41+
42+
mkdir -p $HOME/Maintainerr
43+
tar --strip-components=1 -C $HOME/Maintainerr -xzvf $HOME/.tmp/maintainerr.tar.gz >> "$log" 2>&1
44+
rm $HOME/.tmp/maintainerr.tar.gz
45+
echo "Code extracted"
46+
47+
cd $HOME/Maintainerr || {
48+
echo "unable to cd into Maintainerr. Exiting!"
49+
exit 1
50+
}
51+
52+
echo "Installing dependencies via yarn"
53+
export TMPDIR=$HOME/.tmp/
54+
55+
corepack install >> "$log" 2>&1
56+
corepack enable >> "$log" 2>&1
57+
58+
yarn --immutable --network-timeout 99999999 >> "$log" 2>&1 || {
59+
echo "Failed to install dependencies"
60+
exit 1
61+
}
62+
yarn add sharp >> "$log" 2>&1
63+
echo "Dependencies installed"
64+
serverPort=$(_port 6000 8000)
65+
66+
echo "Changing server port to $serverPort before build."
67+
sed -i "s|3001|$serverPort|g" ./ui/next.config.js
68+
sed -i "s|3001|$serverPort|g" ./server/src/main.ts
69+
sed -i "s|3001|$serverPort|g" ./server/src/modules/api/internal-api/internal-api.service.ts
70+
71+
echo "Building Maintainerr Server"
72+
yarn build:server >> "$log" 2>&1 || {
73+
echo "Failed to build Maintainerr server"
74+
exit 1
75+
}
76+
77+
echo "Building Maintainerr UI. Get a coffee."
78+
yarn build:ui >> "$log" 2>&1 || {
79+
echo "Failed to build Maintainerr ui"
80+
exit 1
81+
}
82+
83+
# Optional Docs
84+
# yarn docs-generate
85+
# rm -rf ./docs
86+
87+
echo "Succesfully built"
88+
echo "Cleaning up"
89+
90+
# Prep for data dir (it doesn't make this itself)
91+
mkdir -p "$HOME/Maintainerr/data"
92+
}
93+
94+
function _port() {
95+
LOW_BOUND=$1
96+
UPPER_BOUND=$2
97+
comm -23 <(seq "${LOW_BOUND}" "${UPPER_BOUND}" | sort) <(ss -Htan | awk '{print $4}' | cut -d':' -f2 | sort -u) | shuf | head -n 1
98+
}
99+
100+
function _service() {
101+
# Create neccesary service dirs
102+
mkdir -p "$HOME/.config/systemd/user/"
103+
mkdir -p "$HOME/.install/"
104+
mkdir -p "$HOME/.config/Maintainerr/"
105+
cat > $HOME/.config/systemd/user/maintainerr-server.service << EOF
106+
[Unit]
107+
Description=Maintainerr UI Service
108+
Wants=network-online.target
109+
After=network-online.target
110+
[Service]
111+
Environment=NODE_VERSION=$(node -v | cut -d "v" -f 2 | cut -d "." -f 1)
112+
Environment=TMPDIR=$HOME/.tmp/
113+
Type=exec
114+
Restart=on-failure
115+
WorkingDirectory=$HOME/Maintainerr/server
116+
ExecStart=$HOME/.nvm/versions/node/v20.13.1/bin/node dist/main
117+
[Install]
118+
WantedBy=default.target
119+
EOF
120+
121+
122+
port=$(_port 1000 18000)
123+
cat > $HOME/.config/systemd/user/maintainerr-ui.service << EOU
124+
[Unit]
125+
Description=Maintainerr UI Service
126+
Wants=network-online.target
127+
After=network-online.target
128+
[Service]
129+
Environment=NODE_VERSION=$(node -v | cut -d "v" -f 2 | cut -d "." -f 1)
130+
Environment=NODE_ENV=production
131+
Environment=TMPDIR=$HOME/.tmp
132+
Type=exec
133+
Restart=on-failure
134+
WorkingDirectory=$HOME/Maintainerr/ui/
135+
ExecStart=$HOME/.nvm/nvm-exec yarn next start -p $port
136+
[Install]
137+
WantedBy=default.target
138+
EOU
139+
140+
systemctl --user daemon-reload
141+
systemctl --user enable --now -q maintainerr-server
142+
systemctl --user enable --now -q maintainerr-ui
143+
144+
touch $HOME/.install/.maintainerr.lock
145+
echo "Maintainerr is up and running on http://$(hostname -f):$port"
146+
147+
}
148+
149+
function _remove() {
150+
systemctl --user disable --now maintainerr-ui
151+
systemctl --user disable --now maintainerr-server
152+
sleep 2
153+
rm -rf $HOME/maintainerr
154+
rm -rf $HOME/.config/maintainerr
155+
rm -rf $HOME/.config/systemd/user/maintainerr-ui.service
156+
rm -rf $HOME/.config/systemd/user/maintainerr-server.service
157+
rm -rf $HOME/.install/.maintainerr.lock
158+
}
159+
160+
echo 'This is unsupported software. You will not get help with this, please answer `yes` if you understand and wish to proceed'
161+
if [[ -z ${eula} ]]; then
162+
read -r eula
163+
fi
164+
165+
if ! [[ $eula =~ yes ]]; then
166+
echo "You did not accept the above. Exiting..."
167+
exit 1
168+
else
169+
echo "Proceeding with installation"
170+
fi
171+
172+
echo "Welcome to the Maintainerr installer..."
173+
echo ""
174+
echo "What do you like to do?"
175+
echo ""
176+
echo "install = Install Maintainerr"
177+
echo "uninstall = Completely removes Maintainerr"
178+
echo "exit = Exits Installer"
179+
while true; do
180+
read -r -p "Enter it here: " choice
181+
case $choice in
182+
"install")
183+
clear
184+
_deps
185+
_maintainerr_install
186+
_service
187+
break
188+
;;
189+
"uninstall")
190+
_remove
191+
break
192+
;;
193+
"exit")
194+
break
195+
;;
196+
*)
197+
echo "Unknown Option."
198+
;;
199+
esac
200+
done
201+
exit

0 commit comments

Comments
 (0)