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