summaryrefslogtreecommitdiffstats
path: root/scripts/action
blob: 61fe16243e9cbd895d51cc015ad3f986d54d80ca (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
#!/usr/bin/env bash
set -euo pipefail

##? action release

export NAVI_HOME="$(cd "$(dirname "$0")/.." && pwd)"
source "${NAVI_HOME}/scripts/install"

is_windows() {
   local -r target="$1"
   echo "$target" | grep -q "windows"
}

get_env_target() {
   eval $(rustc --print cfg | grep target)
   local r raw="${target_arch}-${target_vendor}-${target_os}-${target_env}"
   echoerr "env_raw: $raw"
   if echo "$raw" | grep -q "x86_64-apple-macos"; then
      echo "x86_64-apple-darwin"
   else
      echo "$raw"
   fi
}

as_cross_target() {
   echo "$1" | sed "s/osx/apple-darwin/g"
}

_tap() {
   echoerr "$@"
   "$@"
}

release() {
   local -r target="${1:-}"
   echoerr "target: $target"
   local -r cross_target="$(as_cross_target "$target")"
   echoerr "cross_target: $cross_target"

   TAR_DIR="${NAVI_HOME}/target/tar"
   local use_zip=false
   local cross=true

   local -r env_target="$(get_env_target)"
   echoerr "env_target: $env_target"

   if [[ $cross_target == $env_target ]]; then
      cross=false
   fi

   cd "$NAVI_HOME"

   rm -rf "${NAVI_HOME}/target" 2> /dev/null || true

   if $cross; then
      cargo install cross 2> /dev/null || true
      _tap cross build --release --locked --target "$cross_target"
      local -r bin_folder="${cross_target}/release"
   else
      _tap cargo build --release --locked
      local -r bin_folder="release"
   fi

   _ls "${bin_folder}"

   if is_windows "$target"; then
      local -r exe_ext=".exe"
      use_zip=true
   else
      local -r exe_ext=""
   fi

   bin_path="${NAVI_HOME}/target/${bin_folder}/navi${exe_ext}"

   chmod +x "$bin_path"
   mkdir -p "$TAR_DIR" 2> /dev/null || true

   cp "$bin_path" "$TAR_DIR"

   cd "$TAR_DIR"

   if $use_zip; then
      zip -r navi.zip *
      echo ::set-output name=EXTENSION::zip
   else
      tar -czf navi.tar.gz *
      echo ::set-output name=EXTENSION::tar.gz
   fi

   _ls "${bin_path}"
   _ls "${TAR_DIR}"

}

_ls() {
   echoerr "contents from $@:"
   ls -la "$@" || true
}

workflow() {

   WORKFLOW_DIR="${NAVI_HOME}/target/workflow"

   cd "$NAVI_HOME"

   rm -rf "${NAVI_HOME}/target" 2> /dev/null || true

   mkdir -p "$WORKFLOW_DIR" 2> /dev/null || true

   cp ${NAVI_HOME}/alfred/* "$WORKFLOW_DIR"
   cd "$WORKFLOW_DIR"
   zip -j -r navi.zip *

}

cmd="$1"
shift

case "$cmd" in
   "release") release "$@" ;;
   "workflow") workflow "$@" ;;
   *) exit 2 ;;
esac