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.

This commit is contained in:
2024-12-10 15:50:44 -05:00
parent 41df83b3ba
commit a7124f6c05
5 changed files with 162 additions and 67 deletions

View File

@@ -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

View File

@@ -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"
ls -l output/

37
cv.tex
View File

@@ -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}

View File

@@ -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}
\newcommand{\personalHomeAddressLineOne}{Street Address}
\newcommand{\personalHomeAddressLineTwo}{City, State ZIP}

View File

@@ -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}