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