github.com/l3x/learn-fp-go@v0.0.0-20171228022418-7639825d0b71/2-design-patterns/ch06-onion-arch/04_onion/init (about)

     1  #!/bin/bash
     2  # Author : Lex Sheehan
     3  # Purpose: This script initializes a go project with glide dependency management
     4  # For details see: https://www.amazon.com/Learning-Functional-Programming-Lex-Sheehan-ebook/dp/B0725B8MYW
     5  # License: MIT, 2017 Lex Sheehan LLC
     6  MY_DEV_DIR=~/dev
     7  CURRENT_GO_VERSION=1.9.2
     8  USES_TOML_CONFIG_YN=no
     9  LOCAL_BIN_DIR=/usr/local/bin/
    10  #WIN_GOPATH="E:\\\alice\\\dev\\\learn-fp-go\\\1-functional-fundamentals\\\ch01-pure-fp\\\01_oop"
    11  # ---------------------------------------------------------------
    12  # Verify variables above are correct.  Do not modify lines below.
    13  if [ ! -z $WIN_GOPATH ]; then
    14      export GOPATH="$WIN_GOPATH"
    15      export GOBIN="$GOPATH\\bin"
    16      pushd $HOME
    17      popd
    18  fi
    19  if [ -L "$(pwd)" ]; then
    20      echo "You must be in the real project directory to run this init script.  You are currently in a linked directory"
    21      echo "Running:  ln -l \"$(pwd)\""
    22      ls -l "$(pwd)"
    23      return
    24  fi
    25  CURRENT_GOVERSION="go$CURRENT_GO_VERSION"
    26  ORIG_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
    27  DEV_DIR="$MY_DEV_DIR/$(basename $ORIG_DIR)"
    28  PROJECT_DIR_LINK="$MY_DEV_DIR/$(basename $ORIG_DIR)"
    29  if [ -L "$PROJECT_DIR_LINK" ]; then
    30      rm "$PROJECT_DIR_LINK"
    31  fi
    32  if [ ! -d "$MY_DEV_DIR" ]; then
    33      mkdir "$MY_DEV_DIR"
    34  fi
    35  # Create link to project directory in MY_DEV_DIR
    36  set -x
    37  ln -s "$ORIG_DIR" "$PROJECT_DIR_LINK"
    38  { set +x; } 2>/dev/null
    39  cd "$PROJECT_DIR_LINK"
    40  if [ -z $WIN_GOPATH ]; then
    41      export GOPATH=$ORIG_DIR
    42      export GOBIN=$ORIG_DIR/bin
    43  fi
    44  if [ -e "$GOBIN" ]; then
    45      rm "$GOBIN/*" 2>/dev/null
    46  else
    47      mkdir "$GOBIN"
    48  fi
    49  #[ $(which "$(basename $(pwd))") ] && { echo "An executable named $(basename $(pwd)) found on path here: $(which $(basename $(pwd))). Continue anyway? (yes/no)"; read CONTINUE_YN; if [[ "$CONTINUE_YN" =~ ^(yes|y)$ ]]; then echo 'Okay, but when you run go-run it may run the pre-existing binary.'; else echo "You might want to rename this project directory ($(basename $(pwd))) to a name that does not match a pre-existing binary name."; return; fi; } 2>/dev/null
    50  APP_NAME=$(basename $(pwd))
    51  GOVERSION=$(go version)
    52  echo "Installed Go version: $GOVERSION"
    53  type goenv 2>/dev/null
    54  if [ $? == 0 ]; then
    55      # Attempt to automatically set desired/current go version.  This requires goenv.
    56      . goenv "$CURRENT_GO_VERSION"
    57      echo "GOVERSION: $GOVERSION"
    58      echo "CURRENT_GOVERSION: $CURRENT_GOVERSION"
    59      if [ -z "$GOVERSION" ] || [[ "$(echo $GOVERSION | awk '{print $3}')" != "$CURRENT_GOVERSION" ]]; then
    60        echo "Expected Go version $CURRENT_GOVERSION to be installed"
    61        return
    62      fi
    63  else
    64      if [ -z "$GOVERSION" ] || [[ "$(echo $GOVERSION | awk '{print $3}')" != "$CURRENT_GOVERSION" ]]; then
    65          echo "Expected Go version $CURRENT_GOVERSION to be installed.  Consider using github.com/l3x/goenv to manage your go runtimes."
    66          return
    67      fi
    68  fi
    69  command -v goimports >/dev/null 2>&1 || { echo >&2 "Missing goimports.  For details, see: https://github.com/bradfitz/goimports"; return; }
    70  command -v glide >/dev/null 2>&1 || { echo >&2 "Missing glide.  For details, see: https://github.com/Masterminds/glide"; return; }
    71  if [ ! -e ./src ]; then
    72      mkdir src
    73  fi
    74  
    75  if [ ! -e ./src/mypackage/ ]; then
    76      mkdir ./src/mypackage
    77  fi
    78  
    79  if [ ! -e ./src/mypackage/myname.go ]; then
    80      cat > ./src/mypackage/myname.go <<TEXT
    81  package mypackage
    82  
    83  func MyName() string { return "Alice" }
    84  TEXT
    85  fi
    86  
    87  if [ ! -e ./main.go ]; then
    88      cat > ./main.go <<TEXT
    89  package main
    90  
    91  import (
    92      "mypackage"
    93  )
    94  
    95  func main() {
    96      println("hello from main.go")
    97      println(mypackage.MyName() + " says hi from mypackage")
    98  }
    99  TEXT
   100  fi
   101  
   102  if [ ! -e ./.gitignore ]; then
   103      cat > ./.gitignore <<TEXT
   104  # Binaries for programs and plugins
   105  *.exe
   106  *.dll
   107  *.so
   108  *.dylib
   109  
   110  # Test binary, build with `go test -c`
   111  *.test
   112  
   113  # Output of the go coverage tool, specifically when used with LiteIDE
   114  *.out
   115  
   116  # Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736
   117  .glide/
   118  
   119  # Temporary backup file created by sed in prune-project alias
   120  main.go-e
   121  TEXT
   122  fi
   123  
   124  if [ "${PATH/$GOBIN}" == "$PATH" ] ; then
   125    export PATH=$PATH:$GOBIN
   126  fi
   127  
   128  if [[ "$USES_TOML_CONFIG_YN" =~ ^(yes|y)$ ]]; then
   129      if [ ! -e ./config.toml ]; then
   130          echo You were missing the config.toml configuration file... Creating bare config.toml file ...
   131          echo -e "# Runtime environment\napp_env = \"development\"" > config.toml
   132      fi
   133      ls -l config.toml
   134      if [ ! -z $WIN_GOPATH ]; then
   135          alias go-run="go build && ./$APP_NAME.exe -config ./config.toml"
   136      else
   137          alias go-run="go install && $APP_NAME -config ./config.toml"
   138      fi
   139  else
   140      if [ ! -z $WIN_GOPATH ]; then
   141          alias go-run="go build && ./$APP_NAME.exe"
   142      else
   143          alias go-run="go install && $APP_NAME"
   144      fi
   145  fi
   146  alias go-test='go test  ./... 2>&1 | grep -v "$(basename $(pwd))\t\[no test files"'
   147  alias go-test-bench='go test -bench=. ./... 2>&1 | grep -v "$(basename $(pwd))\t\[no test files"'
   148  alias glide-ignore-project-dirs="printf \"ignore:\n$(find ./src -maxdepth 1 -type d | tail -n +2 | sed 's|./src\/||' | sed -e 's/^/- \.\//')\n\""
   149  alias prune-project="(rm -rf bin pkg vendors;rm glide.*;rm -rf ./src/mypackage;sed -i -e '/mypackage/ s/^#*/\/\//' main.go) 2>/dev/null"
   150  alias show-path='echo $PATH | tr ":" "\n"'
   151  alias prune-path='export PATH="$(echo $PATH | tr ":" "\n" | uniq | grep -v "$(dirname $ORIG_DIR)" | tr "\n" ":")"; if [[ "$PATH" =~ ':'$ ]]; then export PATH="${PATH::-1}";fi'
   152  alias find-imports='find . -type f -name "*.go" -exec grep -A3 "import" {} \; -exec echo {} \; -exec echo --- \;'
   153  alias go-fmt='set -x;goimports -w main.go src/*;{ set +x; } 2>/dev/null'
   154  if [ ! -z $WIN_GOPATH ]; then
   155      export GOPATH="$WIN_GOPATH"
   156      alias glide-update='if [ ! -z $(readlink `pwd`) ]; then export LINKED=true && pushd "$(readlink `pwd`)"; fi;rm -rf {vendor,vendors};rm glide.* 2>/dev/null;export GOPATH="$WIN_GOPATH:$WIN_GOPATH\\\vendors" && export GOBIN="$WIN_GOPATH/bin" && glide init --non-interactive && glide-ignore-project-dirs >> glide.yaml && glide up && mvglide && if [ $LINKED==true ]; then popd;fi'
   157      alias mvglide='mkdir -p vendors && mv vendor/ vendors/src/ && export GOPATH="$GOPATH"\\\\vendors:"$GOPATH";echo "vendor packages have been moved to $(pwd)/vendors and your GOPATH: $GOPATH"'
   158  else
   159      alias glide-update='if [ ! -z $(readlink `pwd`) ]; then export LINKED=true && pushd "$(readlink `pwd`)"; fi;rm -rf {vendor,vendors};rm glide.* 2>/dev/null;export GOPATH=$(pwd):$(pwd)/vendors && export GOBIN=$(pwd)/bin && glide init --non-interactive && glide-ignore-project-dirs >> glide.yaml && glide up && mvglide && if [ $LINKED==true ]; then popd;fi'
   160      alias mvglide='mkdir -p vendors && mv vendor/ vendors/src/ && export GOPATH=$(pwd)/vendors:$(pwd);echo "vendor packages have been moved to $(pwd)/vendors and your GOPATH: $GOPATH"'
   161  fi
   162  tdml() {
   163     if [ -z $1 ]; then LEVEL=2; else LEVEL=$1;fi
   164     tree -C -d -L $LEVEL
   165  }
   166  get-go-binary() {
   167      GO_BINARY_URL="$1"
   168      if [ -z $GO_BINARY_URL ]; then
   169          echo "Missing GO_BINARY_URL.  Usage: get-go-binary <GO_BINARY_URL>   Example: get-go-binary github.com/nicksnyder/go-i18n/goi18n"
   170          return
   171      fi
   172      TMP_DIR="tmp_dir_$RANDOM"; mkdir "$TMP_DIR"; pushd "$TMP_DIR";
   173      if [ ! -z $WIN_GOPATH ]; then
   174          export GOPATH="$WIN_GOPATH"
   175      else
   176          export GOPATH="$(pwd)"
   177      fi
   178      go get -u $GO_BINARY_URL; popd; rm -rf "$TMP_DIR"
   179  }
   180  echo You should only need to run this init script once.
   181  echo Add Go source code files under the src directory.
   182  echo After updating dependencies, i.e., adding a new import statement, run:  glide-update
   183  echo To build and run your app, run:  go-run