#! /bin/bash
# @file        prepack
#              Hook which generates the bundle on pack (or publish), and ensures that we only publish
#              release packages.
# @author      Wes Garland, wes@distributive.network
# @date        Oct 2024

set -e
cd `dirname "$0"`/..
DCP_VERSION=$(node -p "require('./package').dcp.version")

if [ $(git rev-parse --abbrev-ref HEAD) != "release" ]; then
  BUILD_TYPE="debug"
else
  BUILD_TYPE="release"
fi

if [ ! -d node_modules ]; then
  echo "node_modules missing; please run npm ci before packing" >&2
  exit 1
fi

if [ ! "${NPM_PREPACK_SKIP_BUNDLE_REBUILD}" ]; then
  if ! [ -d .dcp-build ]; then
    git clone --filter=blob:none $(node -p "require('./package').dcp.repository") .dcp-build
  else
    git fetch
  fi

  (
    for var in $(compgen -e | grep '^npm_')
    do
      eval unset ${var}
    done
    cd .dcp-build
    git checkout --force "$DCP_VERSION"
    echo
    . lib/ansi.incl.sh
    echo "$(ansi green)Building DCP bundle:$(ansi reset)"
    git log --color=always -1 "${DCP_VERSION}" | sed "s/^/$(ansi green)| $(ansi reset)/"
    echo
    ./configure.sh --with-build="${BUILD_TYPE}" --disable-evaluator
    # npm 9.8.0 bug workaround; it is ignoring --omit-dev /wg jan 2025
    cat package.json | sed 's/devDependencies/XdevDependencies/' > package.json.$$
    mv package.json.$$ package.json
    npm ci --omit-dev
    cd ..
    build/bundle --no-cache --dcp=.dcp-build --build="${BUILD_TYPE}"
  )
fi

if [ "${DCP_VERSION}" != $(node -r ./index -p "require('dcp/build').version") ]; then
  echo "Bundle built from wrong version of DCP repo!" >&2
  exit 1
fi

if [ $(node -r ./index -p "require('dcp/build').config.build") != "${BUILD_TYPE}" ]; then
  echo "Bundle is not a ${BUILD_TYPE} build!" >&2
  exit 1
fi
