#!/usr/bin/env bash
set -euo pipefail

# Usage: ./deploy.sh [patch|minor|major]
# Default bump is patch.

BUMP="${1:-patch}"

case "$BUMP" in
  patch|minor|major) ;;
  *) echo "Usage: $0 [patch|minor|major]" >&2; exit 1 ;;
esac

cd "$(dirname "$0")"

if [[ -n "$(git status --porcelain)" ]]; then
  echo "Working tree is not clean. Commit or stash changes before deploying." >&2
  exit 1
fi

OLD_VERSION="$(node -p "require('./package.json').version")"

# npm version bumps package.json (and package-lock.json), creates a commit and a tag.
# `--tag-version-prefix=""` so tags are bare versions (e.g. 0.7.121, not v0.7.121).
NEW_TAG="$(npm version "$BUMP" --tag-version-prefix="" -m "chore(release): %s")"
NEW_VERSION="$NEW_TAG"

echo "Bumped: $OLD_VERSION -> $NEW_VERSION"

BRANCH="$(git rev-parse --abbrev-ref HEAD)"
git push origin "$BRANCH"
git push origin "$NEW_TAG"

echo "Pushed $BRANCH and tag $NEW_TAG to origin."
