mirror of
https://github.com/soconnor0919/resume-cv.git
synced 2025-12-11 05:24:44 -05:00
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:
59
.github/workflows/compile-latex.yml
vendored
59
.github/workflows/compile-latex.yml
vendored
@@ -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
|
||||
|
||||
101
build-local.sh
101
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"
|
||||
ls -l output/
|
||||
37
cv.tex
37
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}
|
||||
|
||||
|
||||
@@ -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}
|
||||
25
resume.tex
25
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}
|
||||
|
||||
Reference in New Issue
Block a user