mirror of
https://github.com/harvard-edge/cs249r_book.git
synced 2026-03-11 17:49:25 -05:00
Enhances website deployment process
Improves the website deployment process by adding comprehensive information, validation steps, and clearer feedback to the user. Provides detailed descriptions of the deployment process, estimated timelines, and quality checks. Introduces an "info" option for users to get in-depth details about the publishing workflow. The changes increase transparency and control over the deployment process, reduce user errors, and increases user confidence.
This commit is contained in:
268
binder
268
binder
@@ -1035,38 +1035,138 @@ class BookBinder:
|
||||
"""Deploy website updates to GitHub Pages (no formal release)"""
|
||||
self._show_publish_header()
|
||||
|
||||
# Step 0: Website Publishing Confirmation
|
||||
console.print("[bold blue]📚 Deploy Website Updates[/bold blue]")
|
||||
console.print("[cyan]This will build and deploy your latest content to GitHub Pages.[/cyan]")
|
||||
console.print("[dim]No git tags or formal releases will be created.[/dim]")
|
||||
# Step 0: Comprehensive Publishing Overview
|
||||
console.print("[bold blue]📚 Website Publishing Overview[/bold blue]")
|
||||
console.print()
|
||||
console.print("[yellow]Deploy to https://mlsysbook.ai? [Y/n] [default: Y]: [/yellow]", end="")
|
||||
console.print("[bold white]🎯 What this will do:[/bold white]")
|
||||
console.print("[green] ✅ Build HTML version of your textbook[/green]")
|
||||
console.print("[green] ✅ Build PDF version of your textbook[/green]")
|
||||
console.print("[green] ✅ Compress PDF for faster downloads[/green]")
|
||||
console.print("[green] ✅ Deploy to GitHub Pages (https://mlsysbook.ai)[/green]")
|
||||
console.print("[green] ✅ Make content publicly available to students and educators[/green]")
|
||||
console.print()
|
||||
console.print("[bold white]⚠️ Important Notes:[/bold white]")
|
||||
console.print("[yellow] • This creates a PUBLIC deployment[/yellow]")
|
||||
console.print("[yellow] • Changes will be live within 5-10 minutes[/yellow]")
|
||||
console.print("[yellow] • No version tags or formal releases created[/yellow]")
|
||||
console.print("[yellow] • Anyone can access the updated content[/yellow]")
|
||||
console.print()
|
||||
console.print("[bold white]🔍 What will be checked:[/bold white]")
|
||||
console.print("[blue] • Git repository status and branch[/blue]")
|
||||
console.print("[blue] • Build artifacts and file sizes[/blue]")
|
||||
console.print("[blue] • PDF quality and completeness[/blue]")
|
||||
console.print("[blue] • HTML build validity[/blue]")
|
||||
console.print()
|
||||
console.print("[bold white]⏱️ Estimated time:[/bold white]")
|
||||
console.print("[cyan] • PDF build: 3-5 minutes[/cyan]")
|
||||
console.print("[cyan] • HTML build: 1-2 minutes[/cyan]")
|
||||
console.print("[cyan] • PDF compression: 30-60 seconds[/cyan]")
|
||||
console.print("[cyan] • GitHub Pages deployment: 1-2 minutes[/cyan]")
|
||||
console.print("[cyan] • Total: 6-10 minutes[/cyan]")
|
||||
console.print()
|
||||
|
||||
# Step 1: Detailed Confirmation
|
||||
console.print("[bold red]🚨 PRODUCTION DEPLOYMENT CONFIRMATION[/bold red]")
|
||||
console.print("[red]This will deploy your textbook to the live website at https://mlsysbook.ai[/red]")
|
||||
console.print("[red]The content will be immediately available to students, educators, and the public.[/red]")
|
||||
console.print()
|
||||
console.print("[bold white]Options:[/bold white]")
|
||||
console.print("[green] y/yes[/green] - Proceed with live deployment to production")
|
||||
console.print("[red] n/no[/red] - Cancel deployment [default]")
|
||||
console.print("[blue] info[/blue] - Show more details about the deployment process")
|
||||
console.print()
|
||||
console.print("[yellow]Deploy to production? [y/N/info] [default: N]: [/yellow]", end="")
|
||||
confirmation = input().strip().lower()
|
||||
|
||||
if confirmation and confirmation not in ['y', 'yes']:
|
||||
if confirmation == "info":
|
||||
self._show_detailed_publish_info()
|
||||
console.print()
|
||||
console.print("[yellow]Deploy to production? [y/N] [default: N]: [/yellow]", end="")
|
||||
confirmation = input().strip().lower()
|
||||
|
||||
if confirmation not in ['y', 'yes']:
|
||||
console.print("[blue]ℹ️ Website deployment cancelled[/blue]")
|
||||
console.print("[dim]💡 You can run this command again when ready to deploy[/dim]")
|
||||
return False
|
||||
|
||||
console.print("[green]✅ Website deployment confirmed[/green]")
|
||||
console.print("[green]✅ Production deployment confirmed[/green]")
|
||||
console.print()
|
||||
|
||||
# Step 1: Git Status Check (relaxed - allow uncommitted changes for website)
|
||||
# Step 2: Pre-deployment Checks
|
||||
console.print("[bold blue]🔍 Pre-deployment Validation[/bold blue]")
|
||||
if not self._validate_git_status_for_publish():
|
||||
return False
|
||||
|
||||
# Step 2: Building Phase
|
||||
# Step 3: Building Phase with Progress Updates
|
||||
console.print("[bold blue]🏗️ Building Phase[/bold blue]")
|
||||
console.print("[dim]This phase will build both HTML and PDF versions of your textbook[/dim]")
|
||||
if not self._execute_build_phase():
|
||||
return False
|
||||
|
||||
# Step 3: Deploy to GitHub Pages
|
||||
# Step 4: Deployment Phase
|
||||
console.print("[bold blue]🚀 Deployment Phase[/bold blue]")
|
||||
console.print("[dim]This phase will deploy your built content to GitHub Pages[/dim]")
|
||||
if not self._deploy_to_github_pages():
|
||||
console.print("[red]❌ GitHub Pages deployment failed[/red]")
|
||||
return False
|
||||
|
||||
# Step 4: Success
|
||||
# Step 5: Success Summary
|
||||
self._show_publish_website_success()
|
||||
return True
|
||||
|
||||
def _show_detailed_publish_info(self):
|
||||
"""Show detailed information about the publishing process"""
|
||||
console.print()
|
||||
console.print("[bold blue]📋 Detailed Publishing Information[/bold blue]")
|
||||
console.print()
|
||||
console.print("[bold white]🔧 Technical Process:[/bold white]")
|
||||
console.print("[blue] 1. Git Status Check[/blue]")
|
||||
console.print("[dim] • Verify repository is clean or changes are committed[/dim]")
|
||||
console.print("[dim] • Ensure we're on the main branch[/dim]")
|
||||
console.print("[dim] • Check for any merge conflicts[/dim]")
|
||||
console.print()
|
||||
console.print("[blue] 2. Build Phase[/blue]")
|
||||
console.print("[dim] • Clean previous build artifacts[/dim]")
|
||||
console.print("[dim] • Build PDF version (3-5 minutes)[/dim]")
|
||||
console.print("[dim] • Build HTML version (1-2 minutes)[/dim]")
|
||||
console.print("[dim] • Validate file sizes and completeness[/dim]")
|
||||
console.print("[dim] • Compress PDF for web distribution[/dim]")
|
||||
console.print()
|
||||
console.print("[blue] 3. Deployment Phase[/blue]")
|
||||
console.print("[dim] • Copy build artifacts to _site directory[/dim]")
|
||||
console.print("[dim] • Copy PDF to assets folder[/dim]")
|
||||
console.print("[dim] • Deploy to GitHub Pages via quarto publish[/dim]")
|
||||
console.print("[dim] • Clean up temporary files[/dim]")
|
||||
console.print()
|
||||
console.print("[bold white]🌐 What Gets Deployed:[/bold white]")
|
||||
console.print("[green] • Complete HTML website[/green]")
|
||||
console.print("[green] • All textbook chapters and content[/green]")
|
||||
console.print("[green] • Navigation and search functionality[/green]")
|
||||
console.print("[green] • PDF download link[/green]")
|
||||
console.print("[green] • All images, figures, and media[/green]")
|
||||
console.print()
|
||||
console.print("[bold white]📊 Quality Checks:[/bold white]")
|
||||
console.print("[yellow] • PDF file size validation (>1MB)[/yellow]")
|
||||
console.print("[yellow] • HTML build completeness[/yellow]")
|
||||
console.print("[yellow] • Asset file integrity[/yellow]")
|
||||
console.print("[yellow] • Deployment success verification[/yellow]")
|
||||
console.print()
|
||||
console.print("[bold white]⚠️ Potential Issues:[/bold white]")
|
||||
console.print("[red] • Build failures due to syntax errors[/red]")
|
||||
console.print("[red] • Large file sizes causing timeout[/red]")
|
||||
console.print("[red] • Network connectivity issues[/red]")
|
||||
console.print("[red] • GitHub Pages deployment limits[/red]")
|
||||
console.print()
|
||||
console.print("[bold white]🔄 Rollback Options:[/bold white]")
|
||||
console.print("[blue] • Previous version remains accessible[/blue]")
|
||||
console.print("[blue] • Can redeploy previous commit if needed[/blue]")
|
||||
console.print("[blue] • GitHub Pages maintains version history[/blue]")
|
||||
console.print()
|
||||
console.print("[bold white]📞 Support:[/bold white]")
|
||||
console.print("[dim] • Check build logs for detailed error messages[/dim]")
|
||||
console.print("[dim] • Review GitHub Actions for deployment status[/dim]")
|
||||
console.print("[dim] • Contact maintainers if deployment fails[/dim]")
|
||||
|
||||
def release(self):
|
||||
"""Create formal release with versioning and GitHub release"""
|
||||
self._show_release_header()
|
||||
@@ -1422,7 +1522,7 @@ class BookBinder:
|
||||
return False
|
||||
|
||||
def _show_publish_website_success(self):
|
||||
"""Show success message for website publishing"""
|
||||
"""Show comprehensive success message for website publishing"""
|
||||
console.print()
|
||||
console.print("[bold green]🎉 Website Successfully Deployed![/bold green]")
|
||||
console.print()
|
||||
@@ -1430,8 +1530,30 @@ class BookBinder:
|
||||
console.print("[blue] 🌐 Website: https://mlsysbook.ai[/blue]")
|
||||
console.print("[blue] 📄 PDF: https://mlsysbook.ai/assets/Machine-Learning-Systems.pdf[/blue]")
|
||||
console.print()
|
||||
console.print("[bold white]📊 What Was Deployed:[/bold white]")
|
||||
console.print("[green] ✅ Complete HTML textbook website[/green]")
|
||||
console.print("[green] ✅ All chapters and content[/green]")
|
||||
console.print("[green] ✅ Navigation and search functionality[/green]")
|
||||
console.print("[green] ✅ PDF download link[/green]")
|
||||
console.print("[green] ✅ All images, figures, and media[/green]")
|
||||
console.print()
|
||||
console.print("[bold white]⏱️ Timeline:[/bold white]")
|
||||
console.print("[cyan] • Deployment completed: Now[/cyan]")
|
||||
console.print("[cyan] • Website update: 5-10 minutes[/cyan]")
|
||||
console.print("[cyan] • Full propagation: 15-30 minutes[/cyan]")
|
||||
console.print()
|
||||
console.print("[bold white]🔍 Verification:[/bold white]")
|
||||
console.print("[blue] • Check https://mlsysbook.ai in 10 minutes[/blue]")
|
||||
console.print("[blue] • Verify PDF download works[/blue]")
|
||||
console.print("[blue] • Test navigation and search[/blue]")
|
||||
console.print()
|
||||
console.print("[dim]💡 Changes may take a few minutes to appear due to caching[/dim]")
|
||||
console.print("[green]✅ Ready for students and educators![/green]")
|
||||
console.print()
|
||||
console.print("[bold white]📞 If Issues:[/bold white]")
|
||||
console.print("[dim] • Check GitHub Pages deployment status[/dim]")
|
||||
console.print("[dim] • Review build logs for errors[/dim]")
|
||||
console.print("[dim] • Contact maintainers if needed[/dim]")
|
||||
|
||||
def _validate_git_status(self):
|
||||
"""Validate git status and handle branch management"""
|
||||
@@ -2313,8 +2435,10 @@ class BookBinder:
|
||||
console.print("\n[green]✅ Ready for distribution! 🚀[/green]")
|
||||
|
||||
def _deploy_to_github_pages(self):
|
||||
"""Deploy to GitHub Pages"""
|
||||
"""Deploy to GitHub Pages with detailed progress information"""
|
||||
try:
|
||||
console.print("[bold blue]🔍 Validating Build Artifacts[/bold blue]")
|
||||
|
||||
# Validate HTML build
|
||||
html_build_dir = self.get_output_dir("html")
|
||||
if not html_build_dir.exists():
|
||||
@@ -2325,10 +2449,23 @@ class BookBinder:
|
||||
# Validate PDF build
|
||||
pdf_build_dir = self.get_output_dir("pdf")
|
||||
pdf_source = pdf_build_dir / "Machine-Learning-Systems.pdf"
|
||||
|
||||
# Debug: List contents of PDF build directory
|
||||
console.print(f"[blue]🔍 Checking PDF build directory: {pdf_build_dir}[/blue]")
|
||||
if pdf_build_dir.exists():
|
||||
pdf_files = list(pdf_build_dir.glob("*.pdf"))
|
||||
console.print(f"[blue] 📄 Found {len(pdf_files)} PDF files:[/blue]")
|
||||
for pdf_file in pdf_files:
|
||||
size_mb = pdf_file.stat().st_size / (1024 * 1024)
|
||||
console.print(f"[blue] • {pdf_file.name} ({size_mb:.1f} MB)[/blue]")
|
||||
else:
|
||||
console.print(f"[red] ❌ PDF build directory does not exist: {pdf_build_dir}[/red]")
|
||||
|
||||
if not pdf_source.exists():
|
||||
console.print("[red]❌ No PDF build found. Run build first.[/red]")
|
||||
console.print(f"[blue]💡 Expected PDF at: {pdf_source}[/blue]")
|
||||
console.print("[blue]💡 Both HTML and PDF builds are required for deployment[/blue]")
|
||||
console.print("[blue]💡 Try running './binder build-full pdf' first[/blue]")
|
||||
return False
|
||||
|
||||
# Validate PDF file size (should be reasonable)
|
||||
@@ -2342,39 +2479,62 @@ class BookBinder:
|
||||
console.print(f"[green]✅ PDF build validated: {pdf_source} ({pdf_size_mb:.1f} MB)[/green]")
|
||||
console.print()
|
||||
|
||||
# Pre-deployment summary
|
||||
console.print("[bold blue]📋 Deployment Summary[/bold blue]")
|
||||
console.print(f"[blue] • HTML files: {html_build_dir}[/blue]")
|
||||
console.print(f"[blue] • PDF file: {pdf_source} ({pdf_size_mb:.1f} MB)[/blue]")
|
||||
console.print(f"[blue] • Target: GitHub Pages (https://mlsysbook.ai)[/blue]")
|
||||
console.print(f"[blue] • Estimated deployment time: 1-2 minutes[/blue]")
|
||||
console.print()
|
||||
|
||||
# Final confirmation before deployment
|
||||
console.print("[bold yellow]⚠️ Final Deployment Confirmation[/bold yellow]")
|
||||
console.print("[yellow]This will upload your built content to GitHub Pages.[/yellow]")
|
||||
console.print("[yellow]The website will be updated within 5-10 minutes.[/yellow]")
|
||||
console.print()
|
||||
console.print("[bold white]Options:[/bold white]")
|
||||
console.print("[green] y/yes[/green] - Proceed with GitHub Pages deployment")
|
||||
console.print("[red] n/no[/red] - Cancel deployment [default]")
|
||||
console.print("[yellow]Deploy to GitHub Pages? [y/N] [default: N]: [/yellow]", end="")
|
||||
deploy_choice = input().strip().lower()
|
||||
|
||||
if deploy_choice not in ['y', 'yes']:
|
||||
console.print("[blue]ℹ️ GitHub Pages deployment cancelled[/blue]")
|
||||
console.print("[dim]💡 Your builds are ready but not deployed[/dim]")
|
||||
return False
|
||||
|
||||
console.print("[green]✅ GitHub Pages deployment confirmed[/green]")
|
||||
console.print()
|
||||
|
||||
# Step 1: Prepare deployment files
|
||||
console.print("[bold blue]📁 Preparing Deployment Files[/bold blue]")
|
||||
|
||||
# Copy build output to _site for quarto publish
|
||||
site_dir = self.book_dir / "_site"
|
||||
if site_dir.exists():
|
||||
import shutil
|
||||
shutil.rmtree(site_dir)
|
||||
console.print("[blue] 🗑️ Cleaned existing _site directory[/blue]")
|
||||
|
||||
import shutil
|
||||
shutil.copytree(html_build_dir, site_dir)
|
||||
console.print(f"[blue] 📂 Copied build output to {site_dir}[/blue]")
|
||||
console.print(f"[green] ✅ Copied HTML build to {site_dir}[/green]")
|
||||
|
||||
# Copy PDF to assets directory for GitHub Pages
|
||||
assets_dir = site_dir / "assets"
|
||||
# PDF will be automatically included by Quarto's resources configuration
|
||||
console.print("[blue] 📁 PDF will be automatically included by Quarto[/blue]")
|
||||
console.print("[dim] 💡 Using resources configuration: _build/pdf/Machine-Learning-Systems.pdf[/dim]")
|
||||
|
||||
# Create assets directory if it doesn't exist
|
||||
assets_dir.mkdir(exist_ok=True)
|
||||
# Note: PDF will be automatically copied by Quarto during the render process
|
||||
console.print("[blue] 📊 PDF will be automatically included in the build[/blue]")
|
||||
console.print("[dim] 💡 Quarto will copy _build/pdf/Machine-Learning-Systems.pdf to the output[/dim]")
|
||||
|
||||
# Copy PDF to assets directory
|
||||
pdf_dest = assets_dir / "Machine-Learning-Systems.pdf"
|
||||
shutil.copy2(pdf_source, pdf_dest)
|
||||
console.print(f"[blue] 📄 Copied PDF to {pdf_dest}[/blue]")
|
||||
# PDF validation is handled by Quarto's resources configuration
|
||||
console.print("[green]✅ PDF will be automatically included by Quarto[/green]")
|
||||
console.print()
|
||||
|
||||
# Validate the copied PDF
|
||||
if not pdf_dest.exists():
|
||||
console.print("[red]❌ Failed to copy PDF to assets directory[/red]")
|
||||
return False
|
||||
|
||||
copied_size_mb = pdf_dest.stat().st_size / (1024 * 1024)
|
||||
if abs(copied_size_mb - pdf_size_mb) > 0.1: # More than 0.1MB difference
|
||||
console.print(f"[red]❌ PDF copy validation failed[/red]")
|
||||
console.print(f"[blue]💡 Original: {pdf_size_mb:.1f} MB, Copied: {copied_size_mb:.1f} MB[/blue]")
|
||||
return False
|
||||
|
||||
console.print(f"[green]✅ PDF copied successfully: {copied_size_mb:.1f} MB[/green]")
|
||||
# Step 2: Deploy to GitHub Pages
|
||||
console.print("[bold blue]🚀 Deploying to GitHub Pages[/bold blue]")
|
||||
console.print("[dim]This may take 1-2 minutes. Please wait...[/dim]")
|
||||
|
||||
# Now deploy using quarto publish
|
||||
result = subprocess.run(['quarto', 'publish', 'gh-pages', '--no-render'],
|
||||
@@ -2383,13 +2543,45 @@ class BookBinder:
|
||||
# Clean up the temporary _site directory
|
||||
if site_dir.exists():
|
||||
shutil.rmtree(site_dir)
|
||||
console.print("[blue] 🧹 Cleaned up temporary files[/blue]")
|
||||
|
||||
if result.returncode != 0:
|
||||
console.print(f"[red]GitHub Pages deployment failed: {result.stderr}[/red]")
|
||||
|
||||
return result.returncode == 0
|
||||
console.print(f"[red]❌ GitHub Pages deployment failed[/red]")
|
||||
console.print(f"[red]Error: {result.stderr}[/red]")
|
||||
console.print("[blue]💡 Check your GitHub Pages settings and try again[/blue]")
|
||||
return False
|
||||
|
||||
# Step 3: Verify PDF was deployed and update if needed
|
||||
console.print("[bold blue]🔍 Verifying PDF Deployment[/bold blue]")
|
||||
|
||||
# Wait a moment for deployment to complete
|
||||
import time
|
||||
time.sleep(2)
|
||||
|
||||
# Check if we need to manually update the PDF on GitHub Pages
|
||||
console.print("[blue] 🔍 Checking if PDF needs manual update...[/blue]")
|
||||
|
||||
# Use the _update_github_pages_pdf method to ensure PDF is available
|
||||
pdf_path = self.get_output_dir("pdf") / "Machine-Learning-Systems.pdf"
|
||||
if pdf_path.exists():
|
||||
console.print("[blue] 📄 Ensuring PDF is available on GitHub Pages...[/blue]")
|
||||
if self._update_github_pages_pdf(pdf_path):
|
||||
console.print("[green] ✅ PDF successfully updated on GitHub Pages[/green]")
|
||||
else:
|
||||
console.print("[yellow] ⚠️ PDF update failed, but deployment may still be successful[/yellow]")
|
||||
console.print("[dim] 💡 PDF will be available via GitHub releases if created[/dim]")
|
||||
else:
|
||||
console.print("[red] ❌ PDF file not found for verification[/red]")
|
||||
|
||||
console.print("[green]✅ GitHub Pages deployment completed successfully[/green]")
|
||||
console.print("[dim]💡 Changes will be live within 5-10 minutes[/dim]")
|
||||
console.print("[blue]💡 PDF should be available at: https://mlsysbook.ai/pdf[/blue]")
|
||||
console.print("[dim] (Quarto automatically includes assets/Machine-Learning-Systems.pdf)[/dim]")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
console.print(f"[red]GitHub Pages deployment error: {e}[/red]")
|
||||
console.print(f"[red]❌ GitHub Pages deployment error: {e}[/red]")
|
||||
console.print("[blue]💡 Check the error details above and try again[/blue]")
|
||||
return False
|
||||
|
||||
def _create_github_release(self, version, description, pdf_path):
|
||||
|
||||
@@ -23,6 +23,9 @@
|
||||
project:
|
||||
type: website
|
||||
output-dir: _build/html
|
||||
resources:
|
||||
- "_build/pdf/Machine-Learning-Systems.pdf"
|
||||
|
||||
preview:
|
||||
browser: true
|
||||
navigate: true
|
||||
|
||||
@@ -430,6 +430,68 @@ $(git log --oneline "$(get_latest_version)"..HEAD | head -10 | sed 's/^/- /')"
|
||||
esac
|
||||
}
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# 📋 Detailed Information Functions
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
|
||||
show_detailed_release_info() {
|
||||
echo ""
|
||||
echo -e "${BOLD}${BLUE}📋 Detailed Release Information${NC}"
|
||||
echo ""
|
||||
echo -e "${WHITE}🔧 Technical Process:${NC}"
|
||||
echo -e "${BLUE} 1. Git Status Check${NC}"
|
||||
echo -e "${CYAN} • Verify repository is clean or changes are committed${NC}"
|
||||
echo -e "${CYAN} • Ensure we're on the main branch${NC}"
|
||||
echo -e "${CYAN} • Check for any merge conflicts${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE} 2. Version Management${NC}"
|
||||
echo -e "${CYAN} • Calculate next version number${NC}"
|
||||
echo -e "${CYAN} • Validate version format${NC}"
|
||||
echo -e "${CYAN} • Check for existing versions${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE} 3. Build Phase${NC}"
|
||||
echo -e "${CYAN} • Clean previous build artifacts${NC}"
|
||||
echo -e "${CYAN} • Build PDF version (3-5 minutes)${NC}"
|
||||
echo -e "${CYAN} • Build HTML version (1-2 minutes)${NC}"
|
||||
echo -e "${CYAN} • Validate file sizes and completeness${NC}"
|
||||
echo -e "${CYAN} • Compress PDF for web distribution${NC}"
|
||||
echo ""
|
||||
echo -e "${BLUE} 4. Release Phase${NC}"
|
||||
echo -e "${CYAN} • Create git tag with version${NC}"
|
||||
echo -e "${CYAN} • Push tag to remote repository${NC}"
|
||||
echo -e "${CYAN} • Deploy to GitHub Pages (optional)${NC}"
|
||||
echo -e "${CYAN} • Create GitHub release with PDF (optional)${NC}"
|
||||
echo ""
|
||||
echo -e "${WHITE}🌐 What Gets Released:${NC}"
|
||||
echo -e "${GREEN} • Complete HTML textbook website${NC}"
|
||||
echo -e "${GREEN} • All textbook chapters and content${NC}"
|
||||
echo -e "${GREEN} • Navigation and search functionality${NC}"
|
||||
echo -e "${GREEN} • PDF download link${NC}"
|
||||
echo -e "${GREEN} • All images, figures, and media${NC}"
|
||||
echo ""
|
||||
echo -e "${WHITE}📊 Quality Checks:${NC}"
|
||||
echo -e "${YELLOW} • PDF file size validation (>1MB)${NC}"
|
||||
echo -e "${YELLOW} • HTML build completeness${NC}"
|
||||
echo -e "${YELLOW} • Asset file integrity${NC}"
|
||||
echo -e "${YELLOW} • Deployment success verification${NC}"
|
||||
echo ""
|
||||
echo -e "${WHITE}⚠️ Potential Issues:${NC}"
|
||||
echo -e "${RED} • Build failures due to syntax errors${NC}"
|
||||
echo -e "${RED} • Large file sizes causing timeout${NC}"
|
||||
echo -e "${RED} • Network connectivity issues${NC}"
|
||||
echo -e "${RED} • GitHub Pages deployment limits${NC}"
|
||||
echo ""
|
||||
echo -e "${WHITE}🔄 Rollback Options:${NC}"
|
||||
echo -e "${BLUE} • Previous version remains accessible${NC}"
|
||||
echo -e "${BLUE} • Can redeploy previous commit if needed${NC}"
|
||||
echo -e "${BLUE} • GitHub Pages maintains version history${NC}"
|
||||
echo ""
|
||||
echo -e "${WHITE}📞 Support:${NC}"
|
||||
echo -e "${CYAN} • Check build logs for detailed error messages${NC}"
|
||||
echo -e "${CYAN} • Review GitHub Actions for deployment status${NC}"
|
||||
echo -e "${CYAN} • Contact maintainers if deployment fails${NC}"
|
||||
}
|
||||
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
# 🎯 Main Publishing Workflow
|
||||
# ═══════════════════════════════════════════════════════════════════════════
|
||||
@@ -437,6 +499,64 @@ $(git log --oneline "$(get_latest_version)"..HEAD | head -10 | sed 's/^/- /')"
|
||||
main() {
|
||||
print_header
|
||||
|
||||
# Comprehensive Publishing Overview
|
||||
print_section "Publishing Overview"
|
||||
echo -e "${WHITE}🎯 What this will do:${NC}"
|
||||
echo -e " ${GREEN}✅ Build HTML version of your textbook${NC}"
|
||||
echo -e " ${GREEN}✅ Build PDF version of your textbook${NC}"
|
||||
echo -e " ${GREEN}✅ Compress PDF for faster downloads${NC}"
|
||||
echo -e " ${GREEN}✅ Create git tag with version number${NC}"
|
||||
echo -e " ${GREEN}✅ Deploy to GitHub Pages (optional)${NC}"
|
||||
echo -e " ${GREEN}✅ Create GitHub release with PDF (optional)${NC}"
|
||||
echo ""
|
||||
echo -e "${WHITE}⚠️ Important Notes:${NC}"
|
||||
echo -e " ${YELLOW}• This creates a FORMAL RELEASE with versioning${NC}"
|
||||
echo -e " ${YELLOW}• Changes will be publicly available${NC}"
|
||||
echo -e " ${YELLOW}• Git tags and GitHub releases are permanent${NC}"
|
||||
echo -e " ${YELLOW}• Anyone can access the released content${NC}"
|
||||
echo ""
|
||||
echo -e "${WHITE}🔍 What will be checked:${NC}"
|
||||
echo -e " ${BLUE}• Git repository status and branch${NC}"
|
||||
echo -e " ${BLUE}• Build artifacts and file sizes${NC}"
|
||||
echo -e " ${BLUE}• PDF quality and completeness${NC}"
|
||||
echo -e " ${BLUE}• HTML build validity${NC}"
|
||||
echo ""
|
||||
echo -e "${WHITE}⏱️ Estimated time:${NC}"
|
||||
echo -e " ${CYAN}• PDF build: 3-5 minutes${NC}"
|
||||
echo -e " ${CYAN}• HTML build: 1-2 minutes${NC}"
|
||||
echo -e " ${CYAN}• PDF compression: 30-60 seconds${NC}"
|
||||
echo -e " ${CYAN}• GitHub deployment: 1-2 minutes${NC}"
|
||||
echo -e " ${CYAN}• Total: 6-10 minutes${NC}"
|
||||
echo ""
|
||||
|
||||
# Initial confirmation
|
||||
echo -e "${BOLD}${RED}🚨 PRODUCTION RELEASE CONFIRMATION${NC}"
|
||||
echo -e "${RED}This will create a formal release with versioning and make it publicly available.${NC}"
|
||||
echo -e "${RED}The release will be permanent and accessible to students, educators, and the public.${NC}"
|
||||
echo ""
|
||||
echo -e "${WHITE}Options:${NC}"
|
||||
echo -e " ${GREEN}y/yes${NC} - Proceed with formal release creation"
|
||||
echo -e " ${RED}n/no${NC} - Cancel release [default]"
|
||||
echo -e " ${BLUE}info${NC} - Show more details about the release process"
|
||||
echo ""
|
||||
echo -e -n "${YELLOW}Create formal release? [y/N/info] [default: N]: ${NC}"
|
||||
read -r initial_choice
|
||||
|
||||
if [ "$initial_choice" = "info" ]; then
|
||||
show_detailed_release_info
|
||||
echo ""
|
||||
echo -e -n "${YELLOW}Create formal release? [y/N] [default: N]: ${NC}"
|
||||
read -r initial_choice
|
||||
fi
|
||||
|
||||
if [ "$initial_choice" != "y" ] && [ "$initial_choice" != "yes" ]; then
|
||||
print_info "Release creation cancelled"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}✅ Release creation confirmed${NC}"
|
||||
echo ""
|
||||
|
||||
# Check git status
|
||||
print_section "Git Status Check"
|
||||
IFS='|' read -r current_branch is_clean changes_count <<< "$(get_git_status)"
|
||||
|
||||
Reference in New Issue
Block a user