blob: 85694eca0262efbc01959fb80af6048f70658792 (
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
|
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)"
}
alias runghc="runghc --ghc-arg=-i$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() {
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
echo "push: $target"
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
}
# 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
)
RED='\033[0;31m'
GRN='\033[0;32m'
YEL='\033[0;33m'
NC='\033[0m' # No Color
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
}
export -f run-sentry
alias sentry="watch --color --exec bash -c run-sentry"
# 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
|