diff --git a/build-docker.sh b/build-docker.sh new file mode 100755 index 0000000..ec71ae0 --- /dev/null +++ b/build-docker.sh @@ -0,0 +1,88 @@ +#!/bin/bash + +# Source secrets if the file exists +if [ -f .secrets ]; then + source .secrets +else + echo "Warning: .secrets file not found. Building public version only." +fi + +# Set defaults for missing variables +PERSONAL_NAME=${PERSONAL_NAME:-$(whoami)} +PERSONAL_EMAIL=${PERSONAL_EMAIL:-""} +PERSONAL_WEBSITE=${PERSONAL_WEBSITE:-""} +PERSONAL_SCHOOL_EMAIL=${PERSONAL_SCHOOL_EMAIL:-""} +PERSONAL_PHONE=${PERSONAL_PHONE:-""} +PERSONAL_HOME_ADDRESS_LINE1=${PERSONAL_HOME_ADDRESS_LINE1:-""} +PERSONAL_HOME_ADDRESS_LINE2=${PERSONAL_HOME_ADDRESS_LINE2:-""} +PERSONAL_SCHOOL_ADDRESS_LINE1=${PERSONAL_SCHOOL_ADDRESS_LINE1:-""} +PERSONAL_SCHOOL_ADDRESS_LINE2=${PERSONAL_SCHOOL_ADDRESS_LINE2:-""} +PERSONAL_SCHOOL_ADDRESS_LINE3=${PERSONAL_SCHOOL_ADDRESS_LINE3:-""} + +# Function to cleanup +cleanup() { + rm -f *.aux *.log *.out *.fls *.fdb_latexmk *.synctex.gz *.bbl *.blg personal_info.tex + if [ -f personal_info.tex.bak ]; then + mv personal_info.tex.bak personal_info.tex + fi +} + +trap cleanup EXIT +mkdir -p output + +# Backup current personal_info.tex if it exists +if [ -f personal_info.tex ]; then + cp personal_info.tex personal_info.tex.bak +fi + +# Build private version (if secrets are available) +if [ -n "$PERSONAL_PHONE" ] || [ -n "$PERSONAL_HOME_ADDRESS_LINE1" ] || [ -n "$PERSONAL_SCHOOL_ADDRESS_LINE1" ]; then + echo "Building private version..." + cat > personal_info.tex << EOL +% Private version of personal information +\newcommand{\personalName}{$PERSONAL_NAME} +\newcommand{\personalEmail}{$PERSONAL_EMAIL} +\newcommand{\personalPhone}{$PERSONAL_PHONE} +\newcommand{\personalWebsite}{$PERSONAL_WEBSITE} +\newcommand{\personalSchoolEmail}{$PERSONAL_SCHOOL_EMAIL} +\newcommand{\personalHomeAddressLineOne}{$PERSONAL_HOME_ADDRESS_LINE1} +\newcommand{\personalHomeAddressLineTwo}{$PERSONAL_HOME_ADDRESS_LINE2} +\newcommand{\personalSchoolAddressLineOne}{$PERSONAL_SCHOOL_ADDRESS_LINE1} +\newcommand{\personalSchoolAddressLineTwo}{$PERSONAL_SCHOOL_ADDRESS_LINE2} +\newcommand{\personalSchoolAddressLineThree}{$PERSONAL_SCHOOL_ADDRESS_LINE3} +EOL + + docker build --platform linux/arm64 -t resume-builder . + docker run --platform linux/arm64 --rm \ + -v "$(pwd):/workspace" \ + -v "$(pwd)/output:/workspace/output" \ + resume-builder bash -c "latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex cv.tex && mv *.pdf output/" + + mv output/resume.pdf output/resume-private.pdf 2>/dev/null || true + mv output/cv.pdf output/cv-private.pdf 2>/dev/null || true +fi + +# Build public version +echo "Building public version..." +cat > personal_info.tex << EOL +% Public version of personal information +\newcommand{\personalName}{$PERSONAL_NAME} +\newcommand{\personalEmail}{$PERSONAL_EMAIL} +\newcommand{\personalPhone}{~} +\newcommand{\personalWebsite}{$PERSONAL_WEBSITE} +\newcommand{\personalSchoolEmail}{$PERSONAL_SCHOOL_EMAIL} +\newcommand{\personalHomeAddressLineOne}{~} +\newcommand{\personalHomeAddressLineTwo}{~} +\newcommand{\personalSchoolAddressLineOne}{~} +\newcommand{\personalSchoolAddressLineTwo}{~} +\newcommand{\personalSchoolAddressLineThree}{~} +EOL + +docker run --platform linux/arm64 --rm \ + -v "$(pwd):/workspace" \ + -v "$(pwd)/output:/workspace/output" \ + resume-builder bash -c "latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex cv.tex && mv resume.pdf output/resume-public.pdf && mv cv.pdf output/cv-public.pdf" + +echo "Build complete!" +echo "Generated files in output/:" +ls -l output/ \ No newline at end of file diff --git a/build-local.sh b/build-local.sh index ec71ae0..f89dfa7 100755 --- a/build-local.sh +++ b/build-local.sh @@ -30,11 +30,35 @@ cleanup() { trap cleanup EXIT mkdir -p output +# Check if required LaTeX tools are available locally +check_latex_tools() { + command -v latexmk >/dev/null 2>&1 || return 1 + command -v pdflatex >/dev/null 2>&1 || return 1 + return 0 +} + +# Function to build using local tools +build_local() { + latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode "$1" +} + +# Function to build using Docker +build_docker() { + echo "Local LaTeX tools not found, falling back to Docker..." + ./build-docker.sh + exit $? +} + # Backup current personal_info.tex if it exists if [ -f personal_info.tex ]; then cp personal_info.tex personal_info.tex.bak fi +# Check if we can use local tools, otherwise fall back to Docker +if ! check_latex_tools; then + build_docker +fi + # Build private version (if secrets are available) if [ -n "$PERSONAL_PHONE" ] || [ -n "$PERSONAL_HOME_ADDRESS_LINE1" ] || [ -n "$PERSONAL_SCHOOL_ADDRESS_LINE1" ]; then echo "Building private version..." @@ -52,14 +76,11 @@ if [ -n "$PERSONAL_PHONE" ] || [ -n "$PERSONAL_HOME_ADDRESS_LINE1" ] || [ -n "$P \newcommand{\personalSchoolAddressLineThree}{$PERSONAL_SCHOOL_ADDRESS_LINE3} EOL - docker build --platform linux/arm64 -t resume-builder . - docker run --platform linux/arm64 --rm \ - -v "$(pwd):/workspace" \ - -v "$(pwd)/output:/workspace/output" \ - resume-builder bash -c "latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex cv.tex && mv *.pdf output/" - - mv output/resume.pdf output/resume-private.pdf 2>/dev/null || true - mv output/cv.pdf output/cv-private.pdf 2>/dev/null || true + build_local resume.tex + build_local cv.tex + + mv resume.pdf output/resume-private.pdf 2>/dev/null || true + mv cv.pdf output/cv-private.pdf 2>/dev/null || true fi # Build public version @@ -78,10 +99,11 @@ cat > personal_info.tex << EOL \newcommand{\personalSchoolAddressLineThree}{~} EOL -docker run --platform linux/arm64 --rm \ - -v "$(pwd):/workspace" \ - -v "$(pwd)/output:/workspace/output" \ - resume-builder bash -c "latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex cv.tex && mv resume.pdf output/resume-public.pdf && mv cv.pdf output/cv-public.pdf" +build_local resume.tex +build_local cv.tex + +mv resume.pdf output/resume-public.pdf +mv cv.pdf output/cv-public.pdf echo "Build complete!" echo "Generated files in output/:"