#!/bin/bash

set -e
set -u

: ${TOPDIR:=/usr/src/packages}

IMAGE_DIR=$TOPDIR/KIWI
BUILD_DIR=/usr/lib/build

cd $IMAGE_DIR


# Setting default for SPEC_IN
SPEC_IN=$BUILD_DIR/image.spec.in

# Overwrite default for SPEC_IN if _image.spec.in
# exists in sources dir
if [ -f $TOPDIR/SOURCES/_image.spec.in ];then
    SPEC_IN=$TOPDIR/SOURCES/_image.spec.in
fi

echo "Using $SPEC_IN as spec file template"

# Local build:
# sles12-docker.x86_64-1.0.0-Build.tar.xz
# OBS build:
# sles12-docker.x86_64-1.0.0-Build5.2.tar.xz


EXT=".tar.xz"
ARCH=$( rpm --eval '%{_arch}')
PREFIX="@(sles|opensuse)*-docker.${ARCH}-"
SUFFIX="-Build*${EXT}"

shopt -s nullglob
shopt -s extglob

IMAGE=$(echo ${PREFIX}*${SUFFIX})
PACKAGES=$(echo ${PREFIX}*.packages)

if [ -z "$IMAGE" ]; then
    echo "Couldn't find anything in $IMAGE_DIR matching ${PREFIX}*${SUFFIX}."
    echo "Will skip containment rpm wrapping steps."
    exit 0
fi

echo "Attempting to wrap $IMAGE in a containment rpm ..."

declare -A SUSE_PRODUCT_MAP

SUSE_PRODUCT_MAP[sles]="SUSE Linux Enterprise Server"
SUSE_PRODUCT_MAP[opensuse]="openSUSE"

SUSE_VERSION="${IMAGE#@(sles|opensuse)}"
SUSE_VERSION="${SUSE_VERSION%%-docker.$ARCH*$EXT}"
SUSE_PRODUCT=$(echo ${IMAGE} | perl -p -e 's/^(sles|opensuse).*/$1/')
SUSE_PRODUCT_NAME=${SUSE_PRODUCT_MAP[$SUSE_PRODUCT]}

NAME="${SUSE_PRODUCT}${SUSE_VERSION}-docker-image"
RELEASE=$(date +%Y%m%d)

VERSION="${IMAGE#$PREFIX}"
IMAGE_NAME="${IMAGE%%$EXT}"
VERSION="${VERSION%%$SUFFIX}"
if [ -z "$VERSION" ]; then
    echo "Local build detected"
    # Just arbitrarily assign the version since we have nothing else
    # to go on.
    VERSION=1
fi

echo "name $NAME"
echo "version $VERSION"
echo "release $RELEASE"
echo "image_name $IMAGE_NAME"


# keep __SLE_VERSION__ in there for backwards compatiblity
# with older spec file templates
sed -e "s/__NAME__/$NAME/g" \
    -e "s/__VERSION__/$VERSION/g" \
    -e "s/__RELEASE__/$RELEASE/g" \
    -e "s/__SOURCE__/$IMAGE/g" \
    -e "s/__SLE_VERSION__/$SUSE_VERSION/g" \
    -e "s/__SUSE_VERSION__/$SUSE_VERSION/g" \
    -e "s/__SUSE_PRODUCT_NAME__/$SUSE_PRODUCT_NAME/g" \
    -e "s/__IMAGE_NAME__/$IMAGE_NAME/g" \
    < $SPEC_IN \
    > $BUILD_DIR/image.spec

changelog-generator --new-packages $PACKAGES \
  --old-packages /usr/share/changelog-generator-data/old.packages.$ARCH \
  --changelog /usr/share/changelog-generator-data/old.changes.$ARCH > $BUILD_DIR/image.changes

cat $BUILD_DIR/image.changes >> $BUILD_DIR/image.spec
mv $BUILD_DIR/image.changes $IMAGE_DIR

# Local builds have the file already in place, that's not true on IBS
if [ ! -f $TOPDIR/SOURCES/$IMAGE ]; then
  ln $IMAGE $TOPDIR/SOURCES
fi

# Make sure /usr/src/packages/* dirs exist
if [ ! -f $TOPDIR/BUILD ]; then
  echo "Create BUILD dir"
  mkdir -p $TOPDIR/BUILD
fi

if [ ! -f $TOPDIR/SRPMS ]; then
  echo "Create SRPMS dir"
  mkdir -p $TOPDIR/SRPMS
fi

if [ ! -f $TOPDIR/RPMS/$ARCH ]; then
  echo "Create SRPMS dir"
  mkdir -p $TOPDIR/RPMS/$ARCH
fi

rpmbuild -ba $BUILD_DIR/image.spec

# required for the BS to find the rpm, because it is
# a "non-standard result file for KIWI"
mkdir -p $TOPDIR/OTHER
mv $TOPDIR/RPMS/$ARCH/$NAME-$VERSION-$RELEASE.$ARCH.rpm $TOPDIR/OTHER/
mv $TOPDIR/SRPMS/$NAME-$VERSION-$RELEASE.src.rpm $TOPDIR/OTHER/

