Skip to content
Visibility internal Owner _ Approver _ Created _ Updated _

release.sh



FieldValue
TypeShell
SourceProduct/Projects/Uvilo_Method/Skills/Uvilo_Method_Release/scripts/release.sh
ParentProduct
GitHubProduct/Projects/Uvilo_Method/Skills/Uvilo_Method_Release/scripts/release.sh

This page is auto-generated. Edit the source to change the content.



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

###############################################################################
# release.sh — Format and publish a new version of "The Uvilo Method"
#
# Usage:
#   bash release.sh              # Uses today's date
#   bash release.sh 2026-03-01   # Uses specified date
###############################################################################

# --- Constants ---------------------------------------------------------------
SOURCE_DIR="/Users/erik/Library/CloudStorage/GoogleDrive-erikschannen@gmail.com/Shared drives/Uvilo/Content/The Uvilo Method"
SOURCE_FILE="Output The Uvilo Method Prompt.md"
CSS_FILE="${SOURCE_DIR}/Themes/uvilo.css"

# --- Date --------------------------------------------------------------------
DATE="${1:-$(date '+%Y-%m-%d')}"
echo "📅 Release date: ${DATE}"

# --- Validation --------------------------------------------------------------
if [[ ! -f "${SOURCE_DIR}/${SOURCE_FILE}" ]]; then
  echo "❌ Source file not found: ${SOURCE_DIR}/${SOURCE_FILE}"
  echo "   Is Google Drive for Desktop running and synced?"
  exit 1
fi

if ! command -v pandoc &>/dev/null; then
  echo "❌ pandoc not found. Install with: brew install pandoc"
  exit 1
fi

if ! command -v weasyprint &>/dev/null; then
  echo "âš ī¸  weasyprint not found. PDF generation will fail."
  echo "   Install with: pip install weasyprint --break-system-packages"
  read -p "Continue without PDF? [y/N] " -n 1 -r
  echo
  [[ $REPLY =~ ^[Yy]$ ]] || exit 1
  SKIP_PDF=true
else
  SKIP_PDF=false
fi

# --- Working directory -------------------------------------------------------
cd "${SOURCE_DIR}"
MD_FILE="The Uvilo Method ${DATE}.md"
PDF_FILE="The Uvilo Method ${DATE}.pdf"
DOCX_FILE="The Uvilo Method ${DATE}.docx"

# --- Step 1: Duplicate -------------------------------------------------------
echo "📋 Step 1: Duplicating source file..."
cp "${SOURCE_FILE}" "${MD_FILE}"
echo "   Created: ${MD_FILE}"

# --- Step 2: Stamp version date ---------------------------------------------
echo "📝 Step 2: Stamping version date..."
if grep -q 'Version: [0-9A-Z-]*' "${MD_FILE}" 2>/dev/null; then
  sed -i '' "s/Version: [0-9A-Z-]*/Version: ${DATE}/" "${MD_FILE}"
  echo "   Updated version to ${DATE}"
else
  echo "   âš ī¸  No 'Version:' line found — skipping"
fi

# --- Step 3: Generate TOC (GitHub-flavor for .md release) --------------------
echo "📑 Step 3a: Generating GitHub-flavor TOC for .md release..."

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
npx tsx "${SCRIPT_DIR}/generate-toc.ts" --style github --skip-first "${MD_FILE}"

# --- Step 3b: Create temp pandoc-flavor .md for PDF/DOCX generation ----------
echo "📑 Step 3b: Creating pandoc-flavor temp file for PDF/DOCX..."
PANDOC_MD_FILE="_pandoc_temp_${MD_FILE}"
cp "${SOURCE_FILE}" "${PANDOC_MD_FILE}"
# Apply same version stamp to temp file
if grep -q 'Version: [0-9A-Z-]*' "${PANDOC_MD_FILE}" 2>/dev/null; then
  sed -i '' "s/Version: [0-9A-Z-]*/Version: ${DATE}/" "${PANDOC_MD_FILE}"
fi
npx tsx "${SCRIPT_DIR}/generate-toc.ts" --style pandoc --skip-first "${PANDOC_MD_FILE}"

# --- Step 4: Generate PDF ----------------------------------------------------
if [[ "${SKIP_PDF}" == "false" ]]; then
  echo "📄 Step 4: Generating PDF..."
  if [[ -f "${CSS_FILE}" ]]; then
    pandoc --pdf-engine weasyprint --css "${CSS_FILE}" \
      -o "${PDF_FILE}" "${PANDOC_MD_FILE}"
  else
    echo "   âš ī¸  CSS not found at ${CSS_FILE}, generating without custom styles"
    pandoc --pdf-engine weasyprint -o "${PDF_FILE}" "${PANDOC_MD_FILE}"
  fi
  echo "   Created: ${PDF_FILE}"
else
  echo "â­ī¸  Step 4: Skipping PDF (weasyprint not available)"
fi

# --- Step 5: Generate DOCX --------------------------------------------------
echo "📄 Step 5: Generating DOCX..."
pandoc -o "${DOCX_FILE}" "${PANDOC_MD_FILE}"
echo "   Created: ${DOCX_FILE}"
echo "   â„šī¸  Google Drive will auto-convert to Google Docs format"

# Clean up temp pandoc file
rm -f "${PANDOC_MD_FILE}"

# --- Step 6: Create output folder & copy files ------------------------------
echo "📁 Step 6: Copying files to output folder..."

SOURCE_OUTPUT="${SOURCE_DIR}/The Uvilo Method ${DATE}"

# Create output directory
mkdir -p "${SOURCE_OUTPUT}"
echo "   Created: ${SOURCE_OUTPUT}"

# Copy files
cp "${MD_FILE}" "${SOURCE_OUTPUT}/"
echo "   Copied: ${MD_FILE}"

if [[ -f "${PDF_FILE}" ]]; then
  cp "${PDF_FILE}" "${SOURCE_OUTPUT}/"
  echo "   Copied: ${PDF_FILE}"
fi

cp "${DOCX_FILE}" "${SOURCE_OUTPUT}/"
echo "   Copied: ${DOCX_FILE}"

# Clean up working directory files
rm -f "${MD_FILE}" "${PDF_FILE}" "${DOCX_FILE}"

# --- Done --------------------------------------------------------------------
echo ""
echo "✅ Release complete!"
echo "   📂 Output: ${SOURCE_OUTPUT}"
echo "   Files:"
ls -1 "${SOURCE_OUTPUT}/" | sed 's/^/      /'