github.com/ezbuy/gauge@v0.9.4-0.20171013092048-7ac5bd3931cd/build/mkdeb.sh (about) 1 #!/bin/bash 2 # Copyright 2015 ThoughtWorks, Inc. 3 4 # This file is part of Gauge. 5 6 # Gauge is free software: you can redistribute it and/or modify 7 # it under the terms of the GNU General Public License as published by 8 # the Free Software Foundation, either version 3 of the License, or 9 # (at your option) any later version. 10 11 # Gauge is distributed in the hope that it will be useful, 12 # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 # GNU General Public License for more details. 15 16 # You should have received a copy of the GNU General Public License 17 # along with Gauge. If not, see <http://www.gnu.org/licenses/>. 18 19 # Original source: https://github.com/gauge/gauge/blob/master/script/mkdeb 20 21 # Usage: 22 # ./build/mkdeb.sh [--rebuild] 23 24 if [[ -z $GOPATH ]]; then 25 export GOPATH=`pwd` 26 fi 27 if [[ -z $GOBIN ]]; then 28 export GOBIN="$GOPATH/bin" 29 fi 30 31 cd $GOPATH/src/github.com/getgauge/gauge 32 33 go get github.com/tools/godep && $GOBIN/godep restore 34 35 set -e 36 37 function err () { 38 echo "ERROR: $1" 39 exit 1 40 } 41 42 ROOT=`pwd -P` 43 DEPLOY_DIR="$ROOT/deploy" 44 BUILD_DIR="$ROOT/build" 45 OS=`uname -s | tr '[:upper:]' '[:lower:]'` 46 ARCH="i386" 47 NAME="gauge" 48 FILE_EXT="zip" 49 FILE_MODE=755 50 CONTROL_FILE="$BUILD_DIR/packaging/deb/control" 51 POSTINST_FILE="$BUILD_DIR/packaging/deb/postinst" 52 53 if [ "$OS" != "linux" ]; then 54 err "This script can only be run on Linux systems" 55 fi 56 57 if [ "$1" == "--rebuild" ]; then 58 REBUILD_NEEDED=1 59 fi 60 61 function rebuild () { 62 rm -rf "$DEPLOY_DIR" 63 go run build/make.go --all-platforms --target-linux 64 go run build/make.go --distro --all-platforms --target-linux 65 } 66 67 function check_and_rebuild() { 68 if [ ! -d "$DEPLOY_DIR" ]; then 69 echo -e "Building distro packages...\n" 70 rebuild 71 elif [ ! -z "$REBUILD_NEEDED" ]; then 72 echo -e "Rebuild flag set. Rebuilding distro packages...\n" 73 rebuild 74 else 75 echo -e "Reusing existing distro package. Use '--rebuild' to trigger a package rebuild...\n" 76 fi 77 } 78 79 function set_arch() { 80 if [ -z "$1" ]; then 81 ARCHTYPE=$(ls $NAME*.$FILE_EXT | head -1 | rev | cut -d '-' -f 1 | rev | cut -d '.' -f 2) 82 else 83 ARCHTYPE=$(echo $1 | sed "s/^[a-z]*\///" | rev | cut -d '-' -f 1 | rev | cut -d '.' -f 2) 84 fi 85 86 if [ "$ARCHTYPE" == "x86_64" ]; then 87 ARCH="amd64" 88 else 89 ARCH="i386" 90 fi 91 } 92 93 function set_version() { 94 if [ -z "$1" ]; then 95 VERSION=$(ls $NAME*$ARCHTYPE.$FILE_EXT | head -1 | sed "s/\.[^\.]*$//" | sed "s/$NAME-//" | sed "s/-[a-z]*\.[a-z0-9_]*$//") 96 else 97 VERSION=$(echo `basename $1` | sed "s/^[a-z]*\///" | sed "s/\.[^\.]*$//" | sed "s/$NAME-//" | sed "s/-[a-z]*\.[a-z0-9_]*$//") 98 fi 99 } 100 101 function set_pkg_info() { 102 PKG="$DEPLOY_DIR/$NAME-$VERSION-$OS.$ARCHTYPE.$FILE_EXT" 103 PKG_SRC="$DEPLOY_DIR/$NAME-$VERSION-pkg" 104 } 105 106 function set_info() { 107 set_arch "$1" 108 set_version "$1" 109 set_pkg_info 110 } 111 112 function clean_stage() { 113 TARGET_ROOT="$DEPLOY_DIR/deb" 114 rm -rf "$TARGET_ROOT" 115 mkdir -p "$TARGET_ROOT" 116 chmod $FILE_MODE "$TARGET_ROOT" 117 TARGET="$TARGET_ROOT/$NAME-$VERSION-$ARCH" 118 DEB_PATH="$DEPLOY_DIR/" 119 } 120 121 function prep_deb() { 122 echo "Preparing .deb data..." 123 mkdir -m $FILE_MODE -p "$TARGET/usr/local/gauge" 124 125 cp -r "$PKG_SRC/bin" "$TARGET/usr/local" 126 127 mkdir -m $FILE_MODE -p "$TARGET/DEBIAN" 128 cp "$CONTROL_FILE" "$TARGET/DEBIAN/control" 129 chmod +x "$POSTINST_FILE" 130 cp "$POSTINST_FILE" "$TARGET/DEBIAN/postinst" 131 132 chmod +x $TARGET/usr/local/bin/* 133 134 sync 135 136 CONTROL_DATA=$(cat "$TARGET/DEBIAN/control") 137 INSTALLED_SIZE=$(du -s $PKG_SRC/bin/ | sed "s/^\([0-9]*\).*$/\1/") 138 while [ $INSTALLED_SIZE -lt 1 ]; do 139 INSTALLED_SIZE=$(du -s $PKG_SRC/bin/ | sed "s/^\([0-9]*\).*$/\1/") 140 done 141 echo "$CONTROL_DATA" | sed "s/<version>/$VERSION/" | sed "s/<arch>/$ARCH/" | sed "s/<size>/$INSTALLED_SIZE/" > "$TARGET/DEBIAN/control" 142 143 # Copy generated LICENSE.md to /usr/share/doc/gauge/copyright 144 mkdir -m $FILE_MODE -p "$TARGET/usr/share/doc/$NAME" 145 cp "$ROOT/LICENSE" "$TARGET/usr/share/doc/$NAME/copyright" 146 } 147 148 function create_deb() { 149 echo "Generating .deb..." 150 fakeroot dpkg-deb -b "$TARGET" 151 mv "$TARGET_ROOT/$NAME-$VERSION-$ARCH.deb" "$DEB_PATH" 152 } 153 154 function cleanup_temp() { 155 rm -rf "$TARGET_ROOT" 156 rm -rf "$PKG_SRC" 157 } 158 159 function print_status() { 160 echo -e "\nCreated .deb package at: $DEB_PATH$NAME-$VERSION-$ARCH.deb" 161 echo -e " Version : $VERSION" 162 echo -e " Arch : $ARCH\n" 163 } 164 165 function init() { 166 check_and_rebuild 167 168 for f in `ls $DEPLOY_DIR/$NAME-*$OS*.$FILE_EXT`; do 169 clean_stage 170 171 pushd $DEPLOY_DIR > /dev/null 172 set_info "$f" 173 unzip -q "$PKG" -d "$PKG_SRC" 174 popd > /dev/null 175 176 clean_stage 177 prep_deb 178 create_deb 179 cleanup_temp 180 print_status 181 done 182 } 183 184 # Let the game begin 185 init