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