From a7124f6c05b71989350e2b2e1faad9eb92b2074c Mon Sep 17 00:00:00 2001 From: Sean O'Connor Date: Tue, 10 Dec 2024 15:50:44 -0500 Subject: [PATCH] Enhance personal information handling in LaTeX build script and templates. Added support for conditional building of public and private versions based on the presence of a .secrets file. Improved formatting in cv.tex and resume.tex for better layout of personal information. Updated GitHub Actions workflow to cache TeX Live and streamline PDF generation process. --- .github/workflows/compile-latex.yml | 59 +++++++++++----- build-local.sh | 101 +++++++++++++++++++--------- cv.tex | 37 +++++++--- personal_info_template.tex | 7 +- resume.tex | 25 ++++--- 5 files changed, 162 insertions(+), 67 deletions(-) diff --git a/.github/workflows/compile-latex.yml b/.github/workflows/compile-latex.yml index 0c98579..981b7b5 100644 --- a/.github/workflows/compile-latex.yml +++ b/.github/workflows/compile-latex.yml @@ -16,24 +16,36 @@ jobs: steps: - uses: actions/checkout@v3 + - name: Cache TeX Live + uses: actions/cache@v3 + with: + path: /tmp/texlive + key: texlive-${{ runner.os }}-${{ hashFiles('**/*.tex') }} + restore-keys: | + texlive-${{ runner.os }}- + - name: Set up TeX Live uses: xu-cheng/latex-action@v3 with: root_file: | resume.tex cv.tex + latexmk_use_xelatex: false - name: Create public info file run: | cat > personal_info.tex << EOL % Public version of personal information - \newcommand{\personalName}{Sean O'Connor} - \newcommand{\personalEmail}{Contact for details} - \newcommand{\personalPhone}{} - \newcommand{\personalWebsite}{soconnor.dev} - \newcommand{\personalSchoolEmail}{} - \newcommand{\personalHomeAddress}{} - \newcommand{\personalSchoolAddress}{} + \\newcommand{\\personalName}{Sean O'Connor} + \\newcommand{\\personalEmail}{sean@soconnor.dev} + \\newcommand{\\personalPhone}{} + \\newcommand{\\personalWebsite}{soconnor.dev} + \\newcommand{\\personalSchoolEmail}{sso005@bucknell.edu} + \\newcommand{\\personalHomeAddressLineOne}{} + \\newcommand{\\personalHomeAddressLineTwo}{} + \\newcommand{\\personalSchoolAddressLineOne}{} + \\newcommand{\\personalSchoolAddressLineTwo}{} + \\newcommand{\\personalSchoolAddressLineThree}{} EOL - name: Upload Public PDFs as Release @@ -56,30 +68,45 @@ jobs: steps: - uses: actions/checkout@v3 + - name: Cache TeX Live + uses: actions/cache@v3 + with: + path: /tmp/texlive + key: texlive-${{ runner.os }}-${{ hashFiles('**/*.tex') }} + restore-keys: | + texlive-${{ runner.os }}- + - name: Set up TeX Live uses: xu-cheng/latex-action@v3 with: root_file: | resume.tex cv.tex + latexmk_use_xelatex: false - name: Create private info file env: PERSONAL_EMAIL: ${{ secrets.PERSONAL_EMAIL }} PERSONAL_PHONE: ${{ secrets.PERSONAL_PHONE }} PERSONAL_SCHOOL_EMAIL: ${{ secrets.PERSONAL_SCHOOL_EMAIL }} - PERSONAL_HOME_ADDRESS: ${{ secrets.PERSONAL_HOME_ADDRESS }} - PERSONAL_SCHOOL_ADDRESS: ${{ secrets.PERSONAL_SCHOOL_ADDRESS }} + PERSONAL_HOME_ADDRESS_LINE1: ${{ secrets.PERSONAL_HOME_ADDRESS_LINE1 }} + PERSONAL_HOME_ADDRESS_LINE2: ${{ secrets.PERSONAL_HOME_ADDRESS_LINE2 }} + PERSONAL_SCHOOL_ADDRESS_LINE1: ${{ secrets.PERSONAL_SCHOOL_ADDRESS_LINE1 }} + PERSONAL_SCHOOL_ADDRESS_LINE2: ${{ secrets.PERSONAL_SCHOOL_ADDRESS_LINE2 }} + PERSONAL_SCHOOL_ADDRESS_LINE3: ${{ secrets.PERSONAL_SCHOOL_ADDRESS_LINE3 }} run: | cat > personal_info.tex << 'EOL' % Private version of personal information - \newcommand{\personalName}{Sean O'Connor} - \newcommand{\personalEmail}{$PERSONAL_EMAIL} - \newcommand{\personalPhone}{$PERSONAL_PHONE} - \newcommand{\personalWebsite}{soconnor.dev} - \newcommand{\personalSchoolEmail}{$PERSONAL_SCHOOL_EMAIL} - \newcommand{\personalHomeAddress}{$PERSONAL_HOME_ADDRESS} - \newcommand{\personalSchoolAddress}{$PERSONAL_SCHOOL_ADDRESS} + \\newcommand{\\personalName}{Sean O'Connor} + \\newcommand{\\personalEmail}{sean@soconnor.dev} + \\newcommand{\\personalPhone}{${PERSONAL_PHONE}} + \\newcommand{\\personalWebsite}{soconnor.dev} + \\newcommand{\\personalSchoolEmail}{sso005@bucknell.edu} + \\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 envsubst < personal_info.tex > personal_info.tex.tmp mv personal_info.tex.tmp personal_info.tex diff --git a/build-local.sh b/build-local.sh index 2182e53..ac3e09a 100755 --- a/build-local.sh +++ b/build-local.sh @@ -1,8 +1,26 @@ #!/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." + PERSONAL_PHONE="" + PERSONAL_HOME_ADDRESS_LINE1="" + PERSONAL_HOME_ADDRESS_LINE2="" + PERSONAL_SCHOOL_ADDRESS_LINE1="" + PERSONAL_SCHOOL_ADDRESS_LINE2="" + PERSONAL_SCHOOL_ADDRESS_LINE3="" +fi + # Function to cleanup cleanup() { - rm -f personal_info.tex.bak + # Clean up LaTeX artifacts + rm -f *.aux *.log *.out *.fls *.fdb_latexmk *.synctex.gz *.bbl *.blg *.pdf + # Only restore backup if it exists + if [ -f personal_info.tex.bak ]; then + mv personal_info.tex.bak personal_info.tex + fi } # Ensure cleanup runs even if script fails @@ -11,45 +29,64 @@ trap cleanup EXIT # Create output directory mkdir -p output -# Build public version -echo "Building public version..." -docker build --platform linux/arm64 -t resume-builder . -docker run --platform linux/arm64 --rm -v "$(pwd)/output:/workspace/output" resume-builder bash -c "latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex cv.tex && cp *.pdf output/" +# Backup current personal_info.tex if it exists +if [ -f personal_info.tex ]; then + cp personal_info.tex personal_info.tex.bak +fi -# Move files to final names -mv output/resume.pdf output/resume-public.pdf -mv output/cv.pdf output/cv-public.pdf - -# Build private version -echo "Building private version..." -# Backup current personal_info.tex -cp personal_info.tex personal_info.tex.bak - -# Create private info file -cat > personal_info.tex << EOL +# 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}{Sean O'Connor} -\\newcommand{\\personalEmail}{${PERSONAL_EMAIL:-}} -\\newcommand{\\personalPhone}{${PERSONAL_PHONE:-}} +\\newcommand{\\personalEmail}{sean@soconnor.dev} +\\newcommand{\\personalPhone}{${PERSONAL_PHONE}} \\newcommand{\\personalWebsite}{soconnor.dev} -\\newcommand{\\personalSchoolEmail}{${PERSONAL_SCHOOL_EMAIL:-}} -\\newcommand{\\personalHomeAddress}{${PERSONAL_HOME_ADDRESS:-}} -\\newcommand{\\personalSchoolAddress}{${PERSONAL_SCHOOL_ADDRESS:-}} +\\newcommand{\\personalSchoolEmail}{sso005@bucknell.edu} +\\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 -# Build private version using the same image -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 && cp *.pdf output/" + 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/" + + # Move files to final names + 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}{Sean O'Connor} +\\newcommand{\\personalEmail}{sean@soconnor.dev} +\\newcommand{\\personalPhone}{} +\\newcommand{\\personalWebsite}{soconnor.dev} +\\newcommand{\\personalSchoolEmail}{sso005@bucknell.edu} +\\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 *.pdf output/" # Move files to final names -mv output/resume.pdf output/resume-private.pdf -mv output/cv.pdf output/cv-private.pdf - -# Restore original personal_info.tex -mv personal_info.tex.bak personal_info.tex +mv output/resume.pdf output/resume-public.pdf 2>/dev/null || true +mv output/cv.pdf output/cv-public.pdf 2>/dev/null || true echo "Build complete!" echo "Generated files in output/:" -echo "- resume-public.pdf" -echo "- cv-public.pdf" -echo "- resume-private.pdf" -echo "- cv-private.pdf" \ No newline at end of file +ls -l output/ \ No newline at end of file diff --git a/cv.tex b/cv.tex index 84be246..ac56916 100644 --- a/cv.tex +++ b/cv.tex @@ -39,14 +39,36 @@ {\large \textscbf{\personalName}} \end{center} +\vspace{0.5em} + \noindent -\begin{minipage}[t]{\textwidth} - \centering - \mbox{Personal: \personalEmail}% - \ifx\personalSchoolEmail\empty\else - \\\mbox{School: \personalSchoolEmail}% +\begin{minipage}[t]{0.33\textwidth} + \raggedright + \ifx\personalSchoolAddressLineOne\empty\else + \personalSchoolAddressLineOne\\% + \personalSchoolAddressLineTwo\\% + \personalSchoolAddressLineThree% + \fi +\end{minipage}% +\hfill% +\begin{minipage}[t]{0.33\textwidth} + \centering + \href{mailto:\personalEmail}{\personalEmail}% + \ifx\personalSchoolEmail\empty\else + \\\href{mailto:\personalSchoolEmail}{\personalSchoolEmail}% + \fi + \ifx\personalPhone\empty\else + \\\personalPhone% + \fi + \\\href{https://\personalWebsite}{\personalWebsite}% +\end{minipage}% +\hfill% +\begin{minipage}[t]{0.33\textwidth} + \raggedleft + \ifx\personalHomeAddressLineOne\empty\else + \personalHomeAddressLineOne\\% + \personalHomeAddressLineTwo% \fi - \\\mbox{Website: \href{https://\personalWebsite}{\personalWebsite}}% \end{minipage} \vspace{1em} @@ -54,11 +76,10 @@ % Professional Summary Section \noindent \begin{minipage}{\textwidth} - Computer Science and Engineering student with extensive experience in software development, robotics research, and technical leadership. + \textbf{Professional Summary:} Computer Science and Engineering student with extensive experience in software development, robotics research, and technical leadership. Demonstrated track record of building scalable solutions and leading cross-functional teams. Published researcher in human-robot interaction with experience in both academic and commercial software development. \end{minipage} -%\vspace{1em} \resumesection{Education} diff --git a/personal_info_template.tex b/personal_info_template.tex index 9ead5ea..2d3da12 100644 --- a/personal_info_template.tex +++ b/personal_info_template.tex @@ -10,7 +10,10 @@ % School Information \newcommand{\personalSchoolEmail}{your.school@university.edu} -\newcommand{\personalSchoolAddress}{University Name\\Street Address\\City, State ZIP} +\newcommand{\personalSchoolAddressLineOne}{University Name} +\newcommand{\personalSchoolAddressLineTwo}{Street Address} +\newcommand{\personalSchoolAddressLineThree}{City, State ZIP} % Home Information -\newcommand{\personalHomeAddress}{Street Address\\City, State ZIP} \ No newline at end of file +\newcommand{\personalHomeAddressLineOne}{Street Address} +\newcommand{\personalHomeAddressLineTwo}{City, State ZIP} \ No newline at end of file diff --git a/resume.tex b/resume.tex index f01481d..092ab44 100644 --- a/resume.tex +++ b/resume.tex @@ -39,33 +39,40 @@ {\large \textscbf{\personalName}} \end{center} +\vspace{0.5em} + \noindent \begin{minipage}[t]{0.33\textwidth} \raggedright - Bucknell University - \ifx\personalSchoolAddress\empty\else - \\\personalSchoolAddress + \ifx\personalSchoolAddressLineOne\empty\else + \personalSchoolAddressLineOne\\% + \personalSchoolAddressLineTwo\\% + \personalSchoolAddressLineThree% \fi \end{minipage}% +\hfill% \begin{minipage}[t]{0.33\textwidth} \centering - \mbox{\personalEmail}% + \href{mailto:\personalEmail}{\personalEmail}% \ifx\personalSchoolEmail\empty\else - \\\mbox{\personalSchoolEmail}% + \\\href{mailto:\personalSchoolEmail}{\personalSchoolEmail}% \fi \ifx\personalPhone\empty\else - \\\mbox{\personalPhone}% + \\\personalPhone% \fi \\\href{https://\personalWebsite}{\personalWebsite}% \end{minipage}% +\hfill% \begin{minipage}[t]{0.33\textwidth} \raggedleft - \ifx\personalHomeAddress\empty\else - Home Address\\ - \personalHomeAddress + \ifx\personalHomeAddressLineOne\empty\else + \personalHomeAddressLineOne\\% + \personalHomeAddressLineTwo% \fi \end{minipage} +\vspace{1em} + \resumesection{Education} \textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}