From 6cd39b83ae186f0e865060f5627630ad6d168a0d Mon Sep 17 00:00:00 2001
From: Bartek Wrona <wrona@syncad.com>
Date: Tue, 7 May 2024 22:03:28 +0200
Subject: [PATCH] Implemented common version of bump_npm_version.sh script (
 based on work being originally done in
 https://gitlab.syncad.com/hive/hive/-/blob/develop/scripts/ci-helpers/bump_npm_version.sh?ref_type=heads
 )

---
 .../bash/npm-helpers/npm_generate_version.sh  | 74 +++++++++++++++++++
 1 file changed, 74 insertions(+)
 create mode 100755 scripts/bash/npm-helpers/npm_generate_version.sh

diff --git a/scripts/bash/npm-helpers/npm_generate_version.sh b/scripts/bash/npm-helpers/npm_generate_version.sh
new file mode 100755
index 0000000..ba70985
--- /dev/null
+++ b/scripts/bash/npm-helpers/npm_generate_version.sh
@@ -0,0 +1,74 @@
+#!/usr/bin/env bash
+
+set -e
+
+SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
+
+PROJECT_DIR="${1:?Missing arg #1 specifying a project source directory}"
+
+REGISTRY_URL="${2:?Missing arg #2 pointing an NPM registry URL}"
+
+SCOPE="${3:?Missing arg #3 pointing a package scope}"
+
+PROJECT_NAME="${4:?Missing arg #4 pointing a project name}"
+
+git config --global --add safe.directory '*'
+
+git fetch --tags --quiet
+
+pushd "${PROJECT_DIR}"
+
+GIT_COMMIT_HASH=$(git rev-parse HEAD)
+SHORT_HASH=$(git rev-parse --short HEAD)
+CURRENT_BRANCH_IMPL=$(git branch -r --contains "${SHORT_HASH}")
+if [ "${CURRENT_BRANCH_IMPL}" = "" ]; then
+  CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
+else
+  CURRENT_BRANCH="${CURRENT_BRANCH_IMPL#*/}"
+fi
+GIT_COMMIT_TIME=$(TZ=UTC0 git show --quiet --date='format-local:%Y%m%d%H%M%S' --format="%cd")
+TAG_TIME=${GIT_COMMIT_TIME:2}
+TAG=$(git tag --sort=-taggerdate | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+(-.+)?' | tail -1)
+
+echo "Preparing npm packge for ${CURRENT_BRANCH}@${TAG} (#${SHORT_HASH})"
+
+if [ "${TAG}" = "" ]; then
+  echo "Could not find a valid tag name for branch"
+  exit 1
+fi
+
+DIST_TAG=""
+NEW_VERSION=""
+
+if [[ "$CURRENT_BRANCH" = "master" ]] || [[ "$CURRENT_BRANCH" = "main" ]]; then
+  DIST_TAG="latest"
+  NEW_VERSION="${TAG}"
+elif [ "$CURRENT_BRANCH" = "develop" ]; then
+  DIST_TAG="stable"
+  NEW_VERSION="${TAG}-stable.${TAG_TIME}"
+else
+  DIST_TAG="dev"
+  NEW_VERSION="${TAG}-${TAG_TIME}"
+fi
+
+
+git checkout "${PROJECT_DIR}/package.json" # be sure we're on clean version
+
+jq ".name = \"${SCOPE}/${PROJECT_NAME}\" | .version = \"$NEW_VERSION\" | .publishConfig.registry = \"https://${REGISTRY_URL}\" | .publishConfig.tag = \"${DIST_TAG}\"" "${PROJECT_DIR}/package.json" > "${PROJECT_DIR}/package.json.tmp"
+
+mv "${PROJECT_DIR}/package.json.tmp" "${PROJECT_DIR}/package.json"
+
+# Display detailed publish config data
+jq -r '.name + "@" + .version + " (" + .publishConfig.tag + ") " + .publishConfig.registry' "${PROJECT_DIR}/package.json"
+
+ {
+  echo BUILT_PACKAGE_NAME=${SCOPE}/${PROJECT_NAME}
+  echo BUILT_PACKAGE_VERSION=${NEW_VERSION}
+  echo BUILT_PACKAGE_DIST_TAG=${DIST_TAG}
+  echo BUILT_PACKAGE_GIT_VERSION=${GIT_COMMIT_HASH}
+} > "${PROJECT_DIR}/built_package_version_info.env"
+
+echo "built_package_version_info.env file contents:"
+cat "${PROJECT_DIR}/built_package_version_info.env"
+
+popd
-- 
GitLab