summaryrefslogtreecommitdiff
path: root/Biz/Bild/ShellHook.sh
blob: 75a0842bad6b22370c39391e22086dd95b4a515d (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
function help() {
  echo ""
  echo "bizdev" | figlet | lolcat
  echo ""
  echo "   bild   compile code"
  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)"
}

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
}

function lint() {
  alias lint=$BIZ_ROOT/Biz/lint.py
}

function pie() {
  runghc Biz.Pie $@
}

# TODO: convert to haskell
function push() {
  prefix=$(echo $PWD | sed -e "s|^$BIZ_ROOT/*||g" -e "s|/|.|g")
  if [[ "$prefix" == "" ]]
  then
    target="$1"
  else
    target="$prefix.$1"
  fi
  what=$(realpath "$BIZ_ROOT/_/bild/$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() {
  set -ex
  $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
}

help