blob: 5be96ae735efbc7962e61665af6d43f042193203 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
function help() {
echo ""
echo "bizdev" | figlet | lolcat
echo ""
echo " bild compile code"
echo " ci run all builds and tests"
echo " deps manage dependencies with niv"
echo " ghci start ghci with correct options"
echo " help show this message"
echo " lint auto-lint all changed files"
echo " pie product improvement engine"
echo " push send a namespace to the cloud"
echo " ship lint, bild, and push one (or all) namespace(s)"
}
# color codes for use with printf
RED='\033[0;31m'
GRN='\033[0;32m'
YEL='\033[0;33m'
NC='\033[0m' # No Color
alias runghc="runghc --ghc-arg=-i$BIZ_ROOT"
alias guile="guile -L $BIZ_ROOT"
alias tree="tree -I _"
# link git hooks
rm -f $BIZ_ROOT/.git/hooks/{post-checkout,post-merge,pre-commit}
ln -s $BIZ_ROOT/Biz/Ide/post-checkout $BIZ_ROOT/.git/hooks/post-checkout
ln -s $BIZ_ROOT/Biz/Ide/post-merge $BIZ_ROOT/.git/hooks/post-merge
ln -s $BIZ_ROOT/Biz/Lint.py $BIZ_ROOT/.git/hooks/pre-commit
function bild() {
timeout 5m runghc Biz.Bild $@
}
function deps() {
niv --sources-file $BIZ_ROOT/Biz/Bild/Sources.json $@
}
alias ghci="ghci -i$BIZ_ROOT -ghci-script $BIZ_ROOT/.ghci"
function lint {
runghc Biz.Lint $@
}
function pie() {
runghc Biz.Pie $@
}
# TODO: convert to haskell, see:
# - https://github.com/awakesecurity/nix-deploy/blob/master/src/Main.hs
# - http://www.haskellforall.com/2018/08/nixos-in-production.html
function push() {
prefix=$(echo $PWD | sed -e "s|^$BIZ_ROOT/*||g")
if [[ "$prefix" == "" ]]
then
target="$1"
else
target="$prefix.$1"
fi
what=$(realpath "$BIZ_ROOT/_/bild/nix/$target")
# hack: get the domain from the activation script. there does not seem
# to be a way to get it from nix-instantiate
where=$(rg -r '$2' -e '(domainname ")(.*)(")' "$what/activate")
nix copy --to ssh://root@$where $what
ssh root@$where $what/bin/switch-to-configuration switch
ssh root@$where nix-env --profile /nix/var/nix/profiles/system --set $what
printf "${GRN}good: push: $target${NC}"
}
# TODO: convert to haskell
function ship() {
stuff=(${@})
if [[ ${#stuff[@]} -eq 0 ]]
then
stuff=(
Biz/Cloud.nix
Biz/Dev.nix
Biz/Que/Prod.nix
# Hero/Prod.nix # disabled bc herocomcis.app domain is broken
)
fi
lint \
&& bild --test ${stuff[@]} \
&& for thing in ${stuff[@]}
do
push $thing
done
}
function run-sentry() {
urls=(
http://que.run
https://devalloc.io
https://simatime.com
https://tv.simatime.com
https://bsima.me
# https://herocomics.app
)
for url in ${urls[@]}
do
code=$(curl -L --max-time 10 --silent --show-error --insecure \
--output /dev/null \
--write-out "%{http_code}" "$url")
case "$code" in
2[0-9][0-9]) printf "${GRN}$code $url${NC}\n";;
3[0-9][0-9]) printf "${YEL}$code $url${NC}\n";;
4[0-9][0-9]) printf "${YEL}$code $url${NC}\n";;
5[0-9][0-9]) printf "${RED}$code $url${NC}\n";;
*) printf "${RED}$code $url${NC}\n";;
esac
done
}
function sentry() {
while true
do
clear
printf "%s sentry\n\n" "$(date +%Y.%m.%d..%H.%M)"
run-sentry
sleep 120
done
}
# Poor man's ci
function run-ci() {
lint **/* && bild --test **/*
}
alias ci="time run-ci"
export PS1='\n$(r=$? && [ $r -eq 0 ] && printf "biz" || printf "%3.*s" $r $r)> '
help
|