Snippets

Lineate LLC Build scripts for DEB & RPM packages

Created by Anton Talevnin last modified
#!/usr/bin/env bash
## This script creates a DEB packages for <project-name> project.
## Just run it after the source code has been pulled from repository.
## The created DEB:  *.deb, you can find in $BUILDSPACE directory
################################################################################

# Location of the source code
export WORKSPACE="$(cd "$(dirname "$0")/.." && pwd -P)" #"
# A temp directory for intermediate results
export BUILDSPACE="${BUILDSPACE:-$WORKSPACE/tmp}"

## Export name and email of maintainer
export DEBEMAIL="devops-team@thumbtack.net "
export DEBFULLNAME="Thumbtack DevOps Team"

function git_version(){
  local ws=$(test -n "$1" && echo "--git-dir=${1}/.git")

  # Get latest tag for current branch and number of ahead commits
  local tag=$(git $ws describe --tags --abbrev=0)
  [[ $tag =~ ^v*[0-9]+\.[0-9]+\.[0-9]+$ ]] || {
    echo "Error: Git tag is not set or has invalid format: $tag" >&2
    return 1
  }

  local rev=$(git $ws rev-list $tag.. | wc -l)
  local hash=$(git $ws rev-parse --short HEAD)
  test "${rev}" == "0" && echo ${tag#v} || printf "%s-r%03d+%s" ${tag#v} ${rev} ${hash};
}

upload_artifact(){
  local repo="https://repository.thumbtack.lo/nexus/service/local/artifact/maven/content"
  local pkg_name="$1" pkg_ver="$2" artifact="$3"
  curl -X PUT --user "" --data-binary @${artifact} \
       "$repo/com/penton/eqw/${pkg_name}/${pkg_ver}/${pkg_name}-${pkg_ver}.tgz"
}


set -e

# This version will be assigned for creating DEB
PKG_VERSION=$(git_version)
# Save a git branch to add in history of DEB package
PKG_BRANCH=$(git --git-dir=${WORKSPACE}/.git rev-parse --abbrev-ref HEAD)
## Choose distribution for the DEB package stable/testing/unstable
PKG_DISTRIBUTION=unstable
[[ $PKG_VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && PKG_DISTRIBUTION=stable

rm -rf $BUILDSPACE

echo "Building project v${PKG_VERSION} (${DISTRIBUTION})..."
export BUILDSPACE="${BUILDSPACE}/resource-tool-${PKG_VERSION}"
mkdir -p ${BUILDSPACE}
pushd $BUILDSPACE
  yes | dh_make -s --createorig --templates ${WORKSPACE}/ops-tools/debian
  dch -v "$PKG_VERSION" "Git commit: $(git --git-dir=$WORKSPACE/.git rev-parse HEAD)($PKG_BRANCH)" -D ${PKG_DISTRIBUTION}
  dpkg-buildpackage -b -us -uc
  echo "${PKG_VERSION}" > ../build.version
popd

Comments (6)

  1. Sergey Pechenko

    Проверено на thumbtack.ru:

    yes | dh_make -s --createorig --templates ${WORKSPACE}/ops-tools/debian => dh_make --yes -s --native --createorig --templates ${WORKSPACE}/ops-tools/debian Первая строка не собирает deb-пакет без ключа --native.

    dch -v "$PKG_VERSION" "Git commit: $(git --git-dir=$WORKSPACE/.git rev-parse HEAD)($PKG_BRANCH)" -D ${PKG_DISTRIBUTION} Выражение в скобках неудобоваримо, я бы вынес в отдельную переменную.

    dpkg-buildpackage -b -us -uc => dpkg-buildpackage -b -pgpg Третья строка собирает неподписанные пакеты, в то время как в наших полиси написано прямо обратное - пакеты должны быть подписаны.

    1. Anton Talevnin

      Первая строка не собирает deb-пакет без ключа --native.

      Видимо стоит описать окружение, в котором ты собирал. У меня все работает и без этого ключика, проверено на resource-tool

      Выражение в скобках неудобоваримо, я бы вынес в отдельную переменную

      Можно, но и использование переменной ради одного использования можно назвать неудобоваримым.

      Третья строка собирает неподписанные пакеты

      Полностью согласен, надо переделать

  2. Ilya Zaytsev

    [[ $tag =~ ^[0-9]+.[0-9]+.[0-9]+$ ]] && PKG_DISTRIBUTION=stable Наверное не $tag, а $PKG_VERSION?

  3. Sergey Pozdnyakov

    Надо еще v удалить из регэкспа тега и #v из переменных

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.