summaryrefslogtreecommitdiff
path: root/Biz/Bild/ShellHook.sh
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