github.com/getgauge/gauge@v1.6.9/build/mkrpm.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/mkrpm
    10  
    11  # Usage:
    12  # ./build/mkrpm.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  RELEASE=all
    30  SPEC_FILE="$BUILD_DIR/packaging/rpm/gauge.spec"
    31  
    32  if [ "$OS" != "linux" ]; then
    33      err "This script can only be run on Linux systems"
    34  fi
    35  
    36  if [ "$1" == "--rebuild" ]; then
    37      REBUILD_NEEDED=1
    38  fi
    39  
    40  if [ "$2" == "--nightly" ]; then
    41      NIGHTLY="--nightly"
    42  fi
    43  
    44  function rebuild () {
    45      rm -rf "$DEPLOY_DIR"
    46      go run build/make.go --all-platforms --target-linux $NIGHTLY
    47      go run build/make.go --distro --all-platforms --target-linux $NIGHTLY
    48  }
    49  
    50  function check_and_rebuild() {
    51      if [ ! -d "$DEPLOY_DIR" ]; then
    52          echo -e "Building distro packages...\n"
    53          rebuild
    54      elif [ ! -z "$REBUILD_NEEDED" ]; then
    55          echo -e "Rebuild flag set. Rebuilding distro packages...\n"
    56          rebuild
    57      else
    58          echo -e "Reusing existing distro package. Use '--rebuild' to trigger a package rebuild...\n"
    59      fi
    60  }
    61  
    62  function set_arch() {
    63      if [ -z "$1" ]; then
    64          ARCHTYPE=$(ls $NAME*.$FILE_EXT | head -1 | rev | cut -d '-' -f 1 | rev | cut -d '.' -f 2)
    65      else
    66          ARCHTYPE=$(echo $1 | sed "s/^[a-z]*\///" | rev | cut -d '-' -f 1 | rev | cut -d '.' -f 2)
    67      fi
    68  
    69      if [ "$ARCHTYPE" == "x86_64" ]; then
    70          ARCH="x86_64"
    71      else
    72          ARCH="i386"
    73      fi
    74  }
    75  
    76  function set_version() {
    77      if [ -z "$1" ]; then
    78          VERSION=$(ls $NAME*$ARCHTYPE.$FILE_EXT | head -1 | sed "s/\.[^\.]*$//" | sed "s/$NAME-//" | sed "s/-[a-z]*\.[a-z0-9_]*$//")
    79      else
    80          VERSION=$(echo `basename $1` | sed "s/^[a-z]*\///" | sed "s/\.[^\.]*$//" | sed "s/$NAME-//" | sed "s/-[a-z]*\.[a-z0-9_]*$//")
    81      fi
    82      RPM_VERSION=$(echo $VERSION | sed "s/-//g")
    83  }
    84  
    85  function set_pkg_info() {
    86      PKG="$DEPLOY_DIR/$NAME-$VERSION-$OS.$ARCHTYPE.$FILE_EXT"
    87      PKG_SRC="$DEPLOY_DIR/$NAME-$VERSION-pkg"
    88  }
    89  
    90  function set_info() {
    91      set_arch "$1"
    92      set_version "$1"
    93      set_pkg_info
    94  }
    95  
    96  function clean_stage() {
    97      TARGET="$HOME/rpmbuild"
    98      rm -rf "$TARGET"
    99      RPM_PATH="$DEPLOY_DIR/"
   100  }
   101  
   102  function prep_rpm() {
   103      echo "Preparing .rpm data..."
   104      rpmdev-setuptree
   105  
   106      mkdir -m $FILE_MODE -p "$TARGET/BUILD/bin/"
   107      cp -r "$PKG_SRC/gauge" "$TARGET/BUILD/bin/"
   108  
   109      SPEC_DATA=`cat "$SPEC_FILE"`
   110      echo "$SPEC_DATA" | sed "s/<version>/$RPM_VERSION/g" | sed "s/<release>/$RELEASE/g" > "$TARGET/SPECS/gauge.spec"
   111      cat $TARGET/SPECS/gauge.spec
   112      # Copy generated LICENSE.md to /usr/share/doc/gauge/copyright
   113      mkdir -m $FILE_MODE -p "$TARGET/BUILD/usr/local/share/doc/$NAME"
   114      cp "$ROOT/LICENSE" "$TARGET/BUILD/usr/local/share/doc/$NAME/copyright"
   115  }
   116  
   117  function create_rpm() {
   118      echo "Generating .rpm..."
   119      rpmbuild --target $ARCH-redhat-linux -ba "$TARGET/SPECS/gauge.spec"
   120      mv $TARGET/RPMS/$ARCH/$NAME-$RPM_VERSION-$RELEASE.$ARCH.rpm "$RPM_PATH/"
   121  }
   122  
   123  function cleanup_temp() {
   124      rm -rf "$TARGET"
   125      rm -rf "$PKG_SRC"
   126  }
   127  
   128  function print_status() {
   129      echo -e "\nCreated .rpm package in: $RPM_PATH$NAME-$RPM_VERSION-$RELEASE.$ARCH.rpm"
   130      echo -e "  Version : $VERSION"
   131      echo -e "  Arch    : $ARCH\n"
   132  }
   133  
   134  function init() {
   135      check_and_rebuild
   136  
   137      for f in `ls $DEPLOY_DIR/$NAME-*$OS*.$FILE_EXT`; do
   138          clean_stage
   139  
   140          pushd $DEPLOY_DIR > /dev/null
   141          set_info "$f"
   142          unzip -q "$PKG" -d "$PKG_SRC"
   143          popd > /dev/null
   144  
   145          clean_stage
   146          prep_rpm
   147          create_rpm
   148          cleanup_temp
   149          print_status
   150      done
   151  }
   152  
   153  # Let the game begin
   154  init