Visibility internal Owner _ Approver _ Created _ Updated _
release.sh
| Field | Value |
|---|---|
| Type | Shell |
| Source | Product/Projects/Uvilo_Method/Skills/Uvilo_Method_Release/scripts/release.sh |
| Parent | Product |
| GitHub | Product/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/^/ /'