Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Release a CV

on:
push:
tags:
- "*" # Any tag pushed to the repository

permissions:
contents: write

jobs:
call_rendercv_workflow:
name: RenderCV
uses: ./.github/workflows/rendercv.yaml

build:
needs: call_rendercv_workflow
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download RenderCV Output
uses: actions/download-artifact@v4
with:
name: RenderCV Output
path: rendercv_output
- name: Release
uses: softprops/action-gh-release@v2
with:
files: |
rendercv_output/*_CV.pdf
rendercv_output/*_CV.tex
generate_release_notes: true
make_latest: true
54 changes: 54 additions & 0 deletions .github/workflows/rendercv.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
name: Render a CV

on:
push:
branches:
- main
workflow_call: # to make the workflow triggerable from other workflows (release.yaml)

permissions:
contents: write

jobs:
rendercv:
name: RenderCV
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install RenderCV
run: |
pip install -r requirements.txt
- name: RenderCV
run: |
cd src
cv_file=$(find . -maxdepth 1 -type f -name "*_CV.yaml" | head -n 1)
if [ -z "$cv_file" ]; then
echo "No RenderCV file found!"
exit 1
fi
cd ..
rendercv render src/$cv_file --pdf-path ${cv_file%.yaml}.pdf --markdown-path README.md --latex-path ${cv_file%.yaml}.tex
- name: Upload rendercv_output as an artifact
uses: actions/upload-artifact@v4
with:
name: RenderCV Output
path: rendercv_output
# - uses: dorny/paths-filter@v3
# id: changes
# with:
# base: HEAD
# filters: |
# cv:
# - '*_CV.tex'
# - 'README.md'
# - name: Push the changes
# if: steps.changes.outputs.cv == 'true'
# run: |
# git config --global user.name "${{ github.actor }}"
# git config --global user.email "${{ github.actor }}@users.noreply.github.com"
# git add -A
# git commit -m "render the latest CV"
# git push
7 changes: 2 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,2 @@
# Ignore specific build artifacts
build

# for projects that use SCons for building: http://http://www.scons.org/
.sconsign.dblite
__pycache__/
rendercv_output/
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
rendercv==1.14
1 change: 1 addition & 0 deletions src/classic/BulletEntry.j2.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
\item <<entry.bullet>>
23 changes: 23 additions & 0 deletions src/classic/EducationEntry.j2.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
((* if section_title in design.show_timespan_in *))
((* set date_and_location_strings = [entry.location, entry.date_string, entry.time_span_string]|select("!=", "") *))
((* else *))
((* set date_and_location_strings = [entry.location, entry.date_string]|select("!=", "") *))
((* endif *))
((* if not is_first_entry *))
\vspace{<<design.margins.entry_area.vertical_between>>}
((* endif *))

\begin{threecolentry}{\textbf{<<entry.degree>>}}{
<<date_and_location_strings|join("\n\n")>>
}
\textbf{<<entry.institution>>}, <<entry.area>>
((* for item in entry.highlights *))
((* if loop.first *))
\begin{highlights}
((* endif *))
\item <<item>>
((* if loop.last *))
\end{highlights}
((* endif *))
((* endfor *))
\end{threecolentry}
38 changes: 38 additions & 0 deletions src/classic/ExperienceEntry.j2.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
((* if section_title in design.show_timespan_in *))
((* set date_and_location_strings = [entry.location, entry.date_string, entry.time_span_string]|select("!=", "") *))
((* else *))
((* set date_and_location_strings = [entry.location, entry.date_string]|select("!=", "") *))
((* endif *))
((* if not is_first_entry *))
\vspace{<<design.margins.entry_area.vertical_between>>}
((* endif *))

((* if entry.date_string or entry.location *))
\begin{twocolentry}{
<<date_and_location_strings|join("\n\n")>>
}
\textbf{<<entry.company>>}, <<entry.position>>
((* for item in entry.highlights *))
((* if loop.first *))
\begin{highlights}
((* endif *))
\item <<item>>
((* if loop.last *))
\end{highlights}
((* endif *))
((* endfor *))
\end{twocolentry}
((* else *))
\begin{onecolentry}
\textbf{<<entry.company>>}, <<entry.position>>
((* for item in entry.highlights *))
((* if loop.first *))
\begin{highlights}
((* endif *))
\item <<item>>
((* if loop.last *))
\end{highlights}
((* endif *))
((* endfor *))
\end{onecolentry}
((* endif *))
42 changes: 42 additions & 0 deletions src/classic/Header.j2.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
\newcommand{\AND}{\unskip
\cleaders\copy\ANDbox\hskip\wd\ANDbox
\ignorespaces
}
\newsavebox\ANDbox
\sbox\ANDbox{<<design.seperator_between_connections>>}

((* if not design.disable_last_updated_date *))
\placelastupdatedtext
((* endif *))
((* if cv.name is not none *))
\begin{header}
\fontsize{<<design.header_font_size>>}{<<design.header_font_size>>}
\textbf{<<cv.name>>}

\vspace{<<design.margins.header.vertical_between_name_and_connections>>}

\normalsize
((* for connection in cv.connections *))
((* if design.use_icons_for_connections *))
\mbox{((*- if connection["url"] -*))
\hrefWithoutArrow{<<connection["url"]>>}{{\footnotesize<<connection["latex_icon"]>>}\hspace*{0.13cm}<<connection["placeholder"]|escape_latex_characters>>}
((*- else -*))
{\footnotesize<<connection["latex_icon"]>>}\hspace*{0.13cm}<<connection["placeholder"]|escape_latex_characters>>
((*- endif -*))}%
((* else *))
\mbox{((*- if connection["url"] -*))
\hrefWithoutArrow{<<connection["url"]>>}{<<connection["clean_url"]|escape_latex_characters>>}
((*- else -*))
<<connection["placeholder"]|escape_latex_characters>>
((*- endif -*))}%
((* endif *))
((* if not loop.last *))
\kern <<design.margins.header.horizontal_between_connections|divide_length_by(2)>>%
\AND%
\kern <<design.margins.header.horizontal_between_connections|divide_length_by(2)>>%
((* endif *))
((* endfor *))
\end{header}

\vspace{<<design.margins.header.bottom>> - <<design.margins.section_title.top>>}
((* endif *))
38 changes: 38 additions & 0 deletions src/classic/NormalEntry.j2.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
((* if section_title in design.show_timespan_in *))
((* set date_and_location_strings = [entry.location, entry.date_string, entry.time_span_string]|select("!=", "") *))
((* else *))
((* set date_and_location_strings = [entry.location, entry.date_string]|select("!=", "") *))
((* endif *))
((* if not is_first_entry *))
\vspace{<<design.margins.entry_area.vertical_between>>}
((* endif *))

((* if entry.date_string or entry.location *))
\begin{twocolentry}{
<<date_and_location_strings|join("\n\n")>>
}
\textbf{<<entry.name>>}
((* for item in entry.highlights *))
((* if loop.first *))
\begin{highlights}
((* endif *))
\item <<item>>
((* if loop.last *))
\end{highlights}
((* endif *))
((* endfor *))
\end{twocolentry}
((* else *))
\begin{onecolentry}
\textbf{<<entry.name>>}
((* for item in entry.highlights *))
((* if loop.first *))
\begin{highlights}
((* endif *))
\item <<item>>
((* if loop.last *))
\end{highlights}
((* endif *))
((* endfor *))
\end{onecolentry}
((* endif *))
7 changes: 7 additions & 0 deletions src/classic/OneLineEntry.j2.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
((* if not is_first_entry *))
\vspace{<<design.margins.entry_area.vertical_between>>}
((* endif *))

\begin{onecolentry}
\textbf{<<entry.label>>:} <<entry.details>>
\end{onecolentry}
Loading