diff --git a/.github/workflows/compile-latex.yml b/.github/workflows/compile-latex.yml index 30d493c..7af5178 100644 --- a/.github/workflows/compile-latex.yml +++ b/.github/workflows/compile-latex.yml @@ -67,9 +67,29 @@ jobs: resume.pdf cv.pdf name: Latest PDFs - tag_name: release-${{ github.run_number }} + tag_name: latest body: | Latest version of resume and CV (public version) + + This release is automatically updated with each push to main. For versioned releases, see the numbered releases. + prerelease: false + draft: false + fail_on_unmatched_files: true + generate_release_notes: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + # Create a numbered release for version history + - name: Create Numbered Release + uses: softprops/action-gh-release@v1 + with: + files: | + resume.pdf + cv.pdf + name: Release ${{ github.run_number }} + tag_name: release-${{ github.run_number }} + body: | + Version ${{ github.run_number }} of resume and CV (public version) prerelease: false draft: false fail_on_unmatched_files: true diff --git a/README.md b/README.md index d5f7310..69814a3 100644 --- a/README.md +++ b/README.md @@ -12,16 +12,33 @@ This project demonstrates professional DevOps practices while providing a beauti - Containerized local development with Docker - Clean separation of content and styling +## Latest PDFs + +The most recent public versions are always available at: +- Resume: `https://github.com/USERNAME/resume-cv/releases/download/latest/resume.pdf` +- CV: `https://github.com/USERNAME/resume-cv/releases/download/latest/cv.pdf` + +Replace `USERNAME` with your GitHub username after forking. + ## Project Structure ``` . -├── cv.tex # Extended CV template -├── resume.tex # Resume template -├── .secrets # Personal information (git-ignored) -├── build-local.sh # Local build script +├── cv.tex # Extended CV template +├── resume.tex # Resume template (subset of CV) +├── shared/ # Shared components +│ ├── style/ # Common LaTeX styles +│ │ └── common.tex # Shared style definitions +│ └── sections/ # Shared content sections +│ ├── header.tex # Contact information +│ ├── education.tex +│ ├── skills.tex +│ ├── coursework.tex +│ └── publications.tex +├── .secrets # Personal information (git-ignored) +├── build-local.sh # Local build script └── subfiles/ - └── refs.bib # BibTeX references + └── refs.bib # BibTeX references ``` ## Using as a Template @@ -33,11 +50,19 @@ This project demonstrates professional DevOps practices while providing a beauti - Private version includes all personal details from `.secrets` - The script automatically generates and cleans up temporary files +## Modifying Content + +The project uses a modular structure to avoid duplication: +- Common sections are stored in `shared/sections/` +- Styling is defined in `shared/style/common.tex` +- The resume is a subset of the CV, reusing shared components +- Add new sections by creating files in `shared/sections/` and including them with `\input{}` + ## CI/CD Pipeline The repository showcases modern DevOps practices through GitHub Actions: - Automated PDF generation on every push -- Public version published as GitHub release +- Public version published as GitHub release with stable URLs - Private version securely generated for repository owner - Environment variables managed through GitHub Secrets diff --git a/cv.tex b/cv.tex index 449be2f..e660229 100644 --- a/cv.tex +++ b/cv.tex @@ -1,78 +1,15 @@ \documentclass{article} -\setlength{\parindent}{0pt} -\setlength{\parskip}{0em} -\usepackage{enumitem} -\usepackage{hyperref} -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} -\usepackage[left=0.5in,top=0.5in,right=0.5in,bottom=0.5in]{geometry} -% Define spacing variables -\newlength{\sectspaceabove} -\newlength{\sectspacebelow} -\setlength{\sectspaceabove}{-0em} % Space before section titles -\setlength{\sectspacebelow}{-0.5em} % Space after section titles - -\usepackage{etoolbox} -\patchcmd{\thebibliography}{\section*{\refname}}{}{}{} - -% Hide page numbers -\pagestyle{empty} - -% Custom macro for small caps and bold -\newcommand{\textscbf}[1]{\textbf{\textsc{#1}}} - -% Custom macro for section headers with controlled spacing -\newcommand{\resumesection}[1]{% - \vspace{\sectspaceabove}% - \begin{center} - \textscbf{#1} - \end{center}% - \vspace{\sectspacebelow}% -} +% Include common style +\input{shared/style/common} % Include personal information \input{personal_info} \begin{document} -\begin{center} - {\large \textscbf{\personalName}} -\end{center} -\vspace{0.5em} - -\noindent -\begin{minipage}[t]{0.33\textwidth} - \raggedright - \ifx\personalSchoolAddressLineOne\empty\else - \mbox{}\par\nobreak\vspace{-\baselineskip} - \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 - \\\href{https://\personalWebsite}{\personalWebsite}% - \ifx\personalPhone\empty\else - \\\personalPhone% - \fi -\end{minipage}% -\hfill% -\begin{minipage}[t]{0.33\textwidth} - \raggedleft - \ifx\personalHomeAddressLineOne\empty\else - \personalHomeAddressLineOne\\% - \personalHomeAddressLineTwo% - \fi -\end{minipage} - -\vspace{1em} +% Header with contact information +\input{shared/sections/header} % Professional Summary Section \noindent @@ -82,14 +19,8 @@ Published researcher in human-robot interaction with experience in both academic and commercial software development. \end{minipage} -\resumesection{Education} - -\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA} - -\textbf{Bachelor of Science in Computer Science and Engineering} \hfill \textbf{Expected Graduation: May 2026} -\begin{itemize}[noitemsep,topsep=2pt] - \item Cumulative Engineering GPA: 3.90. Dean's List: Fall 2022, Fall 2023, Spring 2024 -\end{itemize} +% Education section +\input{shared/sections/education} \resumesection{Experience} @@ -119,7 +50,6 @@ \item Managed live production during race events, coordinating camera operators, replay, and graphics control \end{itemize} - \textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA} \textbf{Computer Science Researcher - Human-Robot Interaction} \hfill \textbf{Jan 2023 – Present} @@ -164,7 +94,6 @@ \item Assisted staff in one-laptop per person deployment and support in response to the COVID-19 pandemic, teaching students how to fully utilize newly-available remote learning tools and programs \end{itemize} - \resumesection{Activities} \textscbf{AIChE Chem-E-Car Competition Team} \hfill \textscbf{Lewisburg, PA} @@ -225,29 +154,9 @@ \item Presented the design of our car in a poster session, heavily focusing on the safety-related aspects of our design \end{itemize} - -\resumesection{Publications} - -\nocite{*} -\bibliography{subfiles/refs.bib} -\bibliographystyle{plain} - -\resumesection{Relevant Coursework} - -\textbf{Systems \& Architecture:} Computer Systems, Operating Systems Design, Computer Networks \& Security - -\textbf{Software Development:} Software Engineering, Data Structures \& Algorithms, Research Methods, Ethics in Computing - -\textbf{Mathematics:} Calculus II, Linear Algebra, Discrete Mathematics, Statistics, Applied Statistics with R, Data Mining - -\resumesection{Skills \& Interests} - -\textbf{Languages \& Frameworks:} Java, C/C++, Python, JavaScript/TypeScript, React, Next.js, PHP, SQL - -\textbf{Backend \& DevOps:} REST APIs, MySQL, PostgreSQL, Docker, Apache Web Server, NGINX, ROS2 - -\textbf{Cloud \& Infrastructure:} AWS, GCP, Azure, Backblaze, Linux (RHEL/Debian), CI/CD - -\textbf{Development Tools:} Git, JetBrains Suite, VS Code, Cursor, Linux CLI +% Shared sections +\input{shared/sections/publications} +\input{shared/sections/coursework} +\input{shared/sections/skills} \end{document} \ No newline at end of file diff --git a/resume.tex b/resume.tex index 33f98ea..7d5940a 100644 --- a/resume.tex +++ b/resume.tex @@ -1,87 +1,18 @@ \documentclass{article} -\setlength{\parindent}{0pt} -\setlength{\parskip}{0em} -\usepackage{enumitem} -\usepackage{hyperref} -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} -\usepackage[left=0.5in,top=0.5in,right=0.5in,bottom=0.5in]{geometry} -% Define spacing variables -\newlength{\sectspaceabove} -\newlength{\sectspacebelow} -\setlength{\sectspaceabove}{-0.5em} % Space before section titles -\setlength{\sectspacebelow}{-0.5em} % Space after section titles - -\usepackage{etoolbox} -\patchcmd{\thebibliography}{\section*{\refname}}{}{}{} - -% Hide page numbers -\pagestyle{empty} - -% Custom macro for small caps and bold -\newcommand{\textscbf}[1]{\textbf{\textsc{#1}}} - -% Custom macro for section headers with controlled spacing -\newcommand{\resumesection}[1]{% - \vspace{\sectspaceabove}% - \begin{center} - \textscbf{#1} - \end{center}% - \vspace{\sectspacebelow}% -} +% Include common style +\input{shared/style/common} % Include personal information \input{personal_info} \begin{document} -\begin{center} - {\large \textscbf{\personalName}} -\end{center} -\vspace{0.5em} +% Header with contact information +\input{shared/sections/header} -\noindent -\begin{minipage}[t]{0.33\textwidth} - \raggedright - \ifx\personalSchoolAddressLineOne\empty\else - \mbox{}\par\nobreak\vspace{-\baselineskip} - \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 - \\\href{https://\personalWebsite}{\personalWebsite}% - \ifx\personalPhone\empty\else - \\\personalPhone% - \fi -\end{minipage}% -\hfill% -\begin{minipage}[t]{0.33\textwidth} - \raggedleft - \ifx\personalHomeAddressLineOne\empty\else - \personalHomeAddressLineOne\\% - \personalHomeAddressLineTwo% - \fi -\end{minipage} - -\vspace{1em} - -\resumesection{Education} - -\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA} - -\textbf{Bachelor of Science in Computer Science and Engineering} \hfill \textbf{Expected Graduation: May 2026} -\begin{itemize}[noitemsep,topsep=2pt] - \item Cumulative Engineering GPA: 3.90. Dean's List: Fall 2022, Fall 2023, Spring 2024 -\end{itemize} +% Education section +\input{shared/sections/education} \resumesection{Experience} @@ -95,28 +26,6 @@ \item Orchestrated migration to containerized architecture using Docker and implemented automated backup systems to improve reliability \end{itemize} -%\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA} -% -%\textbf{Computer Science Researcher - Human-Robot Interaction} \hfill \textbf{Jan 2023 – Present} -%\begin{itemize}[noitemsep,topsep=2pt] -% \item Co-founded an interdisciplinary research lab and meeting group, engaging peers in the world of human-robot interaction -% \item Led ongoing development of a platform for Human-Robot Interaction experiments, resulting in a first-author publication -%\end{itemize} -% -%\textbf{Teaching Assistant and Tutor - Computer Science, Engineering, and Physics} \hfill \textbf{Aug 2023 - Present} -%\begin{itemize}[noitemsep,topsep=2pt] -%\item Mentored diverse student groups in Java programming, Arduino development, and physics lab experiments, adapting teaching methods to various learning styles -%\item Guided engineering teams through agile development cycles while emphasizing ethical design considerations and proper documentation -%\item Supported data analysis across disciplines using Excel, Logger Pro, and custom software tools -%\item Fostered inclusive learning environments through hands-on workshops and one-on-one tutoring sessions -%\end{itemize} -% -%\textbf{Computer Science Research Assistant - Chemical Engineering Department} \hfill \textbf{Aug 2023 – Present} -%\begin{itemize}[noitemsep,topsep=2pt] -% \item Developed sensor systems to improve data collection in coffee-related biochemical research, enhancing accuracy and efficiency of experiments using custom software tools to streamline data analysis. -%\end{itemize} -% - \textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA} \textbf{Computer Science Researcher - Human-Robot Interaction} \hfill \textbf{Jan 2023 – Present} @@ -138,16 +47,8 @@ \item Provided technical mentorship at the Engineering Study Spot, focusing on programming concepts and system design \end{itemize} - \resumesection{Activities} -%\textscbf{Bucknell Coffee Society} \hfill \textscbf{Lewisburg, PA} -% -%\textbf{Treasurer} \hfill \textbf{Oct 2023 – Present} -%\begin{itemize}[noitemsep,topsep=2pt] -% \item Co-established and launched a new campus organization, managing financial operations and coordinating event logistics. -%\end{itemize} - \textscbf{AIChE Chem-E-Car Competition Team} \hfill \textscbf{Lewisburg, PA} \textbf{President, Electrical and Mechanical Team Lead} \hfill \textbf{Jan 2023 – Present} @@ -156,28 +57,9 @@ \item Implemented finite state machine architecture integrating spectrometer readings, relay control, and LED feedback for real-time reaction monitoring in isolated chamber conditions \end{itemize} -\resumesection{Publications} - -\nocite{*} -\bibliography{subfiles/refs.bib} -\bibliographystyle{plain} - -\resumesection{Relevant Coursework} - -\textbf{Systems \& Architecture:} Computer Systems, Operating Systems Design, Computer Networks \& Security - -\textbf{Software Development:} Software Engineering, Data Structures \& Algorithms, Research Methods, Ethics in Computing - -\textbf{Mathematics:} Calculus II, Linear Algebra, Discrete Mathematics, Statistics, Applied Statistics with R, Data Mining - -\resumesection{Skills \& Interests} - -\textbf{Languages \& Frameworks:} Java, C/C++, Python, JavaScript/TypeScript, React, Next.js, PHP, SQL - -\textbf{Backend \& DevOps:} REST APIs, MySQL, PostgreSQL, Docker, Apache Web Server, NGINX, ROS2 - -\textbf{Cloud \& Infrastructure:} AWS, GCP, Azure, Backblaze, Linux (RHEL/Debian), CI/CD - -\textbf{Development Tools:} Git, JetBrains Suite, VS Code, Cursor, Linux CLI +% Shared sections +\input{shared/sections/publications} +\input{shared/sections/coursework} +\input{shared/sections/skills} \end{document} \ No newline at end of file diff --git a/shared/sections/coursework.tex b/shared/sections/coursework.tex new file mode 100644 index 0000000..7f61852 --- /dev/null +++ b/shared/sections/coursework.tex @@ -0,0 +1,7 @@ +\resumesection{Relevant Coursework} + +\textbf{Systems \& Architecture:} Computer Systems, Operating Systems Design, Computer Networks \& Security + +\textbf{Software Development:} Software Engineering, Data Structures \& Algorithms, Research Methods, Ethics in Computing + +\textbf{Mathematics:} Calculus II, Linear Algebra, Discrete Mathematics, Statistics, Applied Statistics with R, Data Mining \ No newline at end of file diff --git a/shared/sections/education.tex b/shared/sections/education.tex new file mode 100644 index 0000000..9bc8b8a --- /dev/null +++ b/shared/sections/education.tex @@ -0,0 +1,8 @@ +\resumesection{Education} + +\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA} + +\textbf{Bachelor of Science in Computer Science and Engineering} \hfill \textbf{Expected Graduation: May 2026} +\begin{itemize}[noitemsep,topsep=2pt] + \item Cumulative Engineering GPA: 3.90. Dean's List: Fall 2022, Fall 2023, Spring 2024 +\end{itemize} \ No newline at end of file diff --git a/shared/sections/header.tex b/shared/sections/header.tex new file mode 100644 index 0000000..1222e99 --- /dev/null +++ b/shared/sections/header.tex @@ -0,0 +1,38 @@ +\begin{center} + {\large \textscbf{\personalName}} +\end{center} + +\vspace{0.5em} + +\noindent +\begin{minipage}[t]{0.33\textwidth} + \raggedright + \ifx\personalSchoolAddressLineOne\empty\else + \mbox{}\par\nobreak\vspace{-\baselineskip} + \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 + \\\href{https://\personalWebsite}{\personalWebsite}% + \ifx\personalPhone\empty\else + \\\personalPhone% + \fi +\end{minipage}% +\hfill% +\begin{minipage}[t]{0.33\textwidth} + \raggedleft + \ifx\personalHomeAddressLineOne\empty\else + \personalHomeAddressLineOne\\% + \personalHomeAddressLineTwo% + \fi +\end{minipage} + +\vspace{1em} \ No newline at end of file diff --git a/shared/sections/publications.tex b/shared/sections/publications.tex new file mode 100644 index 0000000..d7377b6 --- /dev/null +++ b/shared/sections/publications.tex @@ -0,0 +1,5 @@ +\resumesection{Publications} + +\nocite{*} +\bibliography{subfiles/refs.bib} +\bibliographystyle{plain} \ No newline at end of file diff --git a/shared/sections/skills.tex b/shared/sections/skills.tex new file mode 100644 index 0000000..dce0f72 --- /dev/null +++ b/shared/sections/skills.tex @@ -0,0 +1,9 @@ +\resumesection{Skills \& Interests} + +\textbf{Languages \& Frameworks:} Java, C/C++, Python, JavaScript/TypeScript, React, Next.js, PHP, SQL + +\textbf{Backend \& DevOps:} REST APIs, MySQL, PostgreSQL, Docker, Apache Web Server, NGINX, ROS2 + +\textbf{Cloud \& Infrastructure:} AWS, GCP, Azure, Backblaze, Linux (RHEL/Debian), CI/CD + +\textbf{Development Tools:} Git, JetBrains Suite, VS Code, Cursor, Linux CLI \ No newline at end of file diff --git a/shared/style/common.tex b/shared/style/common.tex new file mode 100644 index 0000000..98cc003 --- /dev/null +++ b/shared/style/common.tex @@ -0,0 +1,31 @@ +\setlength{\parindent}{0pt} +\setlength{\parskip}{0em} +\usepackage{enumitem} +\usepackage{hyperref} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[left=0.5in,top=0.5in,right=0.5in,bottom=0.5in]{geometry} + +% Define spacing variables +\newlength{\sectspaceabove} +\newlength{\sectspacebelow} +\setlength{\sectspaceabove}{-0.5em} % Space before section titles +\setlength{\sectspacebelow}{-0.5em} % Space after section titles + +\usepackage{etoolbox} +\patchcmd{\thebibliography}{\section*{\refname}}{}{}{} + +% Hide page numbers +\pagestyle{empty} + +% Custom macro for small caps and bold +\newcommand{\textscbf}[1]{\textbf{\textsc{#1}}} + +% Custom macro for section headers with controlled spacing +\newcommand{\resumesection}[1]{% + \vspace{\sectspaceabove}% + \begin{center} + \textscbf{#1} + \end{center}% + \vspace{\sectspacebelow}% +} \ No newline at end of file