github.com/getgauge/gauge@v1.6.9/build/mkdeb.sh (about)

     1  #!/bin/bash
     2  
     3  # ----------------------------------------------------------------
     4  #   Copyright (c) ThoughtWorks, Inc.
     5  #   Licensed under the Apache License, Version 2.0
     6  #   See LICENSE.txt in the project root for license information.
     7  # ----------------------------------------------------------------
     8  
     9  # Original source: https://github.com/gauge/gauge/blob/master/script/mkdeb
    10  
    11  # Usage:
    12  # ./build/mkdeb.sh [--rebuild]
    13  
    14  set -e
    15  
    16  function err () {
    17      echo "ERROR: $1"
    18      exit 1
    19  }
    20  
    21  ROOT=`pwd -P`
    22  DEPLOY_DIR="$ROOT/deploy"
    23  BUILD_DIR="$ROOT/build"
    24  OS=`uname -s | tr '[:upper:]' '[:lower:]'`
    25  ARCH="i386"
    26  NAME="gauge"
    27  FILE_EXT="zip"
    28  FILE_MODE=755
    29  CONTROL_FILE="$BUILD_DIR/packaging/deb/control"
    30  
    31  if [ "$OS" != "linux" ]; then
    32      err "This script can only be run on Linux systems"
    33  fi
    34  
    35  if [ "$1" == "--rebuild" ]; then
    36      REBUILD_NEEDED=1
    37  fi
    38  
    39  function rebuild () {
    40      rm -rf "$DEPLOY_DIR"
    41      go run build/make.go --all-platforms --target-linux
    42      go run build/make.go --distro --all-platforms --target-linux
    43  }
    44  
    45  function check_and_rebuild() {
    46      if [ ! -d "$DEPLOY_DIR" ]; then
    47          echo -e "Building distro packages...\n"
    48          rebuild
    49      elif [ ! -z "$REBUILD_NEEDED" ]; then
    50          echo -e "Rebuild flag set. Rebuilding distro packages...\n"
    51          rebuild
    52      else
    53          echo -e "Reusing existing distro package. Use '--rebuild' to trigger a package rebuild...\n"
    54      fi
    55  }
    56  
    57  function set_arch() {
    58      if [ -z "$1" ]; then
    59          ARCHTYPE=$(ls $NAME*.$FILE_EXT | head -1 | rev | cut -d '-' -f 1 | rev | cut -d '.' -f 2)
    60      else
    61          ARCHTYPE=$(echo $1 | sed "s/^[a-z]*\///" | rev | cut -d '-' -f 1 | rev | cut -d '.' -f 2)
    62      fi
    63  
    64      if [ "$ARCHTYPE" == "x86_64" ]; then
    65          ARCH="amd64"
    66      else
    67          ARCH="i386"
    68      fi
    69  }
    70  
    71  function set_version() {
    72      if [ -z "$1" ]; then
    73          VERSION=$(ls $NAME*$ARCHTYPE.$FILE_EXT | head -1 | sed "s/\.[^\.]*$//" | sed "s/$NAME-//" | sed "s/-[a-z]*\.[a-z0-9_]*$//")
    74      else
    75          VERSION=$(echo `basename $1` | sed "s/^[a-z]*\///" | sed "s/\.[^\.]*$//" | sed "s/$NAME-//" | sed "s/-[a-z]*\.[a-z0-9_]*$//")
    76      fi
    77  }
    78  
    79  function set_pkg_info() {
    80      PKG="$DEPLOY_DIR/$NAME-$VERSION-$OS.$ARCHTYPE.$FILE_EXT"
    81      PKG_SRC="$DEPLOY_DIR/$NAME-$VERSION-pkg"
    82  }
    83  
    84  function set_info() {
    85      set_arch "$1"
    86      set_version "$1"
    87      set_pkg_info
    88  }
    89  
    90  function clean_stage() {
    91      TARGET_ROOT="$DEPLOY_DIR/deb"
    92      rm -rf "$TARGET_ROOT"
    93      mkdir -p "$TARGET_ROOT"
    94      chmod $FILE_MODE "$TARGET_ROOT"
    95      TARGET="$TARGET_ROOT/$NAME-$VERSION-$ARCH"
    96      DEB_PATH="$DEPLOY_DIR/"
    97  }
    98  
    99  function prep_deb() {
   100      echo "Preparing .deb data..."
   101      mkdir -m $FILE_MODE -p "$TARGET/usr/local/bin/"
   102  
   103      cp -r "$PKG_SRC/gauge" "$TARGET/usr/local/bin/"
   104  
   105      mkdir -m $FILE_MODE -p "$TARGET/DEBIAN"
   106      cp "$CONTROL_FILE" "$TARGET/DEBIAN/control"
   107  
   108      chmod +x $TARGET/usr/local/bin/gauge
   109  
   110      sync
   111  
   112      CONTROL_DATA=$(cat "$TARGET/DEBIAN/control")
   113      INSTALLED_SIZE=$(du -s $PKG_SRC/ | sed "s/^\([0-9]*\).*$/\1/")
   114      while [ $INSTALLED_SIZE -lt 1 ]; do
   115              INSTALLED_SIZE=$(du -s $PKG_SRC/ | sed "s/^\([0-9]*\).*$/\1/")
   116      done
   117      echo "$CONTROL_DATA" | sed "s/<version>/$VERSION/" | sed "s/<arch>/$ARCH/" | sed "s/<size>/$INSTALLED_SIZE/" > "$TARGET/DEBIAN/control"
   118  
   119      # Copy generated LICENSE.md to /usr/share/doc/gauge/copyright
   120      mkdir -m $FILE_MODE -p "$TARGET/usr/share/doc/$NAME"
   121      cp "$ROOT/LICENSE" "$TARGET/usr/share/doc/$NAME/copyright"
   122  }
   123  
   124  function create_deb() {
   125      echo "Generating .deb..."
   126      fakeroot dpkg-deb -b "$TARGET"
   127      mv "$TARGET_ROOT/$NAME-$VERSION-$ARCH.deb" "$DEB_PATH"
   128  }
   129  
   130  function cleanup_temp() {
   131      rm -rf "$TARGET_ROOT"
   132      rm -rf "$PKG_SRC"
   133  }
   134  
   135  function print_status() {
   136      echo -e "\nCreated .deb package at: $DEB_PATH$NAME-$VERSION-$ARCH.deb"
   137      echo -e "  Version : $VERSION"
   138      echo -e "  Arch    : $ARCH\n"
   139  }
   140  
   141  function init() {
   142      check_and_rebuild
   143  
   144      for f in `ls $DEPLOY_DIR/$NAME-*$OS*.$FILE_EXT`; do
   145          clean_stage
   146  
   147          pushd $DEPLOY_DIR > /dev/null
   148          set_info "$f"
   149          unzip -q "$PKG" -d "$PKG_SRC"
   150          popd > /dev/null
   151  
   152          clean_stage
   153          prep_deb
   154          create_deb
   155          cleanup_temp
   156          print_status
   157      done
   158  }
   159  
   160  # Let the game begin
   161  init