blob: e83973e9cea4c84c176ffd451074b1b68798a2b7 (
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
|
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 " hero compile and start a dev server for herocomics.app"
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 hero() {
export HERO_PORT=3000
export HERO_KEEP=$BIZ_ROOT/_/keep
export HERO_SKEY=$BIZ_ROOT/_/skey
bild="runghc Biz.Bild"
if [[ ! -z "${IN_NIX_SHELL}" ]]
then
out="_/bild/dev"
# in dev mode, mmc.js is a directory of js assets
export HERO_NODE=$BIZ_ROOT/$out/static/mmc.js
rg --files \
| entr -rcs \
"$bild Hero.Host.hs && $bild Hero.Node.hs && $out/bin/mmc"
else
out="_/bild/nix"
export HERO_NODE=$BIZ_ROOT/$out/Hero.Node/static
rg --files \
| entr -rcs \
"$bild Hero.Host && $bild Hero.Node && $out/Hero.Host/bin/mmc"
fi
}
alias lint=$BIZ_ROOT/Biz/Lint.py
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
}
# TODO: convert to haskell
function ship() {
$BIZ_ROOT/Biz/Lint.py
stuff=(${1})
if [[ ${#stuff[@]} -eq 0 ]]
then
stuff=(
Biz.Cloud
Biz.Dev
Que.Prod
Hero.Prod
)
fi
for thing in ${stuff[@]}
do
bild $thing
done
for thing in ${stuff[@]}
do
push $thing
done
}
# Poor man's ci
function ci() {
set -e
lint **/*
stuff=(
Biz/Pie.hs
Biz/Pie.nix
Biz/Devalloc.hs
Biz/Que/Site.hs
Biz/Que/Host.hs
Biz/Que/Prod.nix
Biz/Cloud.nix
Biz/Dev.nix
Hero/Host.hs
Hero/Node.hs
Hero/Prod.nix
)
for thing in ${stuff[@]}
do
bild "$thing"
done
set +e
}
help
|