Ctrl K
ComunidadGuías…

versions.sh

Rama newjitsu · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
VERSION_FILE=$1

# Read version file
if [ ! -f "$VERSION_FILE" ]; then
  echo "Error: Version file $VERSION_FILE not found"
  exit 1
fi

BASE_VERSION=$(jq -r '.version' "$VERSION_FILE")
TAG_PREFIX=$(jq -r '.tag_prefix' "$VERSION_FILE")
STABLE_BRANCH=$(jq -r '.stable_branch' "$VERSION_FILE")
BETA_BRANCH=$(jq -r '.beta_branch' "$VERSION_FILE")

# Get current branch
CURRENT_BRANCH="${GITHUB_REF_NAME}"

# Determine channel: explicit override wins, otherwise derive from branch
if [ -n "${CHANNEL_OVERRIDE}" ]; then
  CHANNEL="${CHANNEL_OVERRIDE}"
elif [ "$CURRENT_BRANCH" = "$STABLE_BRANCH" ]; then
  CHANNEL="stable"
elif [ "$CURRENT_BRANCH" = "$BETA_BRANCH" ]; then
  CHANNEL="beta"
else
  CHANNEL="canary"
fi

PATCH="0"

PATTERN="^${TAG_PREFIX}${BASE_VERSION}[.]\d+$"
LATEST_STABLE_TAG=$(git tag -l | grep -E "$PATTERN" | sort -V | tail -n1)

echo "Latest tag: $LATEST_STABLE_TAG"

if [[ "$LATEST_STABLE_TAG" =~ ^${TAG_PREFIX}([0-9]+\.[0-9]+)\.?([0-9]*).*$ ]]; then
  if [ "${BASH_REMATCH[1]}" = "$BASE_VERSION" ]; then
    if [ -n "${BASH_REMATCH[2]}" ]; then
      PATCH="${BASH_REMATCH[2]}"
    fi
  else
    echo "Tag version ${BASH_REMATCH[1]} does not match base version $BASE_VERSION"
    PATCH="-1"
  fi
else
  PATCH="-1"
fi

PATCH=$((PATCH + 1))

echo "Current branch: $CURRENT_BRANCH"
echo "Base version: $BASE_VERSION"
echo "Next patch version: $PATCH"
echo "Tag prefix: $TAG_PREFIX"
echo "Channel: $CHANNEL"

if [ "$CHANNEL" = "stable" ]; then
    VERSION="${BASE_VERSION}.${PATCH}"
elif [ "$CHANNEL" = "beta" ]; then
    PATTERN="${TAG_PREFIX}${BASE_VERSION}.${PATCH}-beta.*"
    LATEST_TAG=$(git tag -l "$PATTERN" | sort -V | tail -n1)
    # Extract beta number and increment
    BETA_NUM=$(echo "$LATEST_TAG" | sed "s|${TAG_PREFIX}${BASE_VERSION}.${PATCH}-beta.||")
    if [ -z "$BETA_NUM" ]; then
      BETA_NUM=-1
    fi
    echo "Previous beta number: $BETA_NUM"
    NEW_BETA=$((BETA_NUM + 1))
    VERSION="${BASE_VERSION}.${PATCH}-beta.${NEW_BETA}"
else
  # Canary: BASE_VERSION-canary.DATE.SHORT_SHA
  SHORT_SHA=$(git rev-parse --short=7 HEAD)
  DATE=$(date +%Y%m%d)
  VERSION="${BASE_VERSION}.${PATCH}-canary.${DATE}.${SHORT_SHA}"
fi

TAG="${TAG_PREFIX}${VERSION}"

echo "Generated version: $VERSION"
echo "Generated tag: $TAG"

echo "version=${VERSION}" >> $GITHUB_OUTPUT
echo "tag=${TAG}" >> $GITHUB_OUTPUT
echo "channel=${CHANNEL}" >> $GITHUB_OUTPUT