g1-ts-common-packages/scripts/publish-package.sh

116 lines
3.3 KiB
Bash

#!/bin/bash
# Script to publish a package to the Gitea registry using the deploy key
# Ensure the scripts directory exists
mkdir -p scripts
# Check if pnpm is installed
if ! command -v pnpm &> /dev/null; then
echo "Error: pnpm is not installed or not in your PATH."
echo "Please install pnpm using one of the following methods:"
echo ""
echo "Using npm:"
echo " npm install -g pnpm"
echo ""
echo "Using Homebrew (macOS):"
echo " brew install pnpm"
echo ""
echo "Using Windows:"
echo " npm install -g pnpm"
echo " or"
echo " winget install pnpm"
echo ""
echo "For more installation options, visit: https://pnpm.io/installation"
exit 1
fi
# Configuration
KEY_FILE=".deploy-key"
TOKEN_FILE=".gitea-token"
GITEA_URL="https://git.generation.one"
REGISTRY_URL="$GITEA_URL/api/packages/GenerationOne/npm/"
# Check if arguments are provided
if [ $# -lt 1 ]; then
echo "Usage: $0 <package-directory> [version-bump]"
echo "Example: $0 packages/sse-client patch"
echo "Version bump can be: patch, minor, major, or none (default: none)"
echo "To set a specific version: $0 packages/sse-client version:0.2.0"
exit 1
fi
PACKAGE_DIR="$1"
VERSION_BUMP="${2:-none}"
# Check if package directory exists
if [ ! -d "$PACKAGE_DIR" ]; then
echo "Package directory '$PACKAGE_DIR' does not exist."
exit 1
fi
# Check if token is available
if [ -f "$TOKEN_FILE" ]; then
# Read the token from file
GITEA_TOKEN=$(cat "$TOKEN_FILE")
echo "Using token from $TOKEN_FILE"
else
# Check if token is in environment variable
if [ -z "$GITEA_TOKEN" ]; then
echo "Gitea token not found."
echo "Please either:"
echo "1. Create a file named '$TOKEN_FILE' with your Gitea access token, or"
echo "2. Set the GITEA_TOKEN environment variable"
echo "You can generate a token at $GITEA_URL/user/settings/applications"
echo "Make sure the token has 'packages:write' permission."
exit 1
else
echo "Using token from GITEA_TOKEN environment variable"
fi
fi
# Navigate to the package directory
cd "$PACKAGE_DIR" || exit 1
# Bump version if requested
if [ "$VERSION_BUMP" != "none" ]; then
# Check if it's a specific version (format: version:x.y.z)
if [[ "$VERSION_BUMP" == version:* ]]; then
SPECIFIC_VERSION="${VERSION_BUMP#version:}"
echo "Setting specific version ($SPECIFIC_VERSION)..."
npm version "$SPECIFIC_VERSION" --no-git-tag-version --allow-same-version
else
echo "Bumping version ($VERSION_BUMP)..."
npm version "$VERSION_BUMP" --no-git-tag-version
fi
fi
# Determine which package manager to use (prefer pnpm, fallback to npm)
PKG_MANAGER="npm"
if command -v pnpm &> /dev/null; then
PKG_MANAGER="pnpm"
echo "Using pnpm as package manager"
else
echo "pnpm not found, falling back to npm"
fi
# Install dependencies
echo "Installing dependencies..."
$PKG_MANAGER install --no-frozen-lockfile
# Build the package
echo "Building package..."
$PKG_MANAGER run build
# Set up .npmrc for publishing
echo "Setting up .npmrc for publishing..."
echo "@g1:registry=$REGISTRY_URL" > .npmrc
echo "//git.generation.one/api/packages/GenerationOne/npm/:_authToken=$GITEA_TOKEN" >> .npmrc
echo "legacy-peer-deps=true" >> .npmrc
echo "resolution-mode=highest" >> .npmrc
# Publish the package
echo "Publishing package..."
$PKG_MANAGER publish --no-git-checks
echo "Package published successfully!"