From 696b0964f3648e06f73ea6813f9f311b2c7898d0 Mon Sep 17 00:00:00 2001 From: Wheeler Law Date: Fri, 19 Aug 2022 15:55:15 -0500 Subject: [PATCH] feat: use Inkscape to make the resume and add a CI to automatically generate the PDF (#4) --- .github/release-drafter.yml | 5 + .github/scripts/bump_version.sh | 17 + .github/workflows/pdf.yaml | 83 ++ .gitignore | 1 + README.md | 13 + src/Resume.svg | 1361 +++++++++++++++++++++++++++++++ src/main.tex | 17 - 7 files changed, 1480 insertions(+), 17 deletions(-) create mode 100644 .github/release-drafter.yml create mode 100755 .github/scripts/bump_version.sh create mode 100644 .github/workflows/pdf.yaml create mode 100644 README.md create mode 100644 src/Resume.svg delete mode 100644 src/main.tex diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml new file mode 100644 index 0000000..20b9753 --- /dev/null +++ b/.github/release-drafter.yml @@ -0,0 +1,5 @@ +change-template: '- $TITLE @$AUTHOR (#$NUMBER)' +template: | + ## What’s Changed + + $CHANGES diff --git a/.github/scripts/bump_version.sh b/.github/scripts/bump_version.sh new file mode 100755 index 0000000..1c541be --- /dev/null +++ b/.github/scripts/bump_version.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +if gh release view "$(date --utc +'%y.%m')-1" >&2; then + current_release="$(gh api '/repos/{owner}/{repo}/releases' | jq -r -c 'map(select(.draft == false and .prerelease == false)) | .[0].tag_name')" + current_release_major_minor="$(echo $current_release | sed -e 's/^\(.*\)-.*/\1/')" + current_release_version="$(echo $current_release | sed -e 's/^.*-\(.*\)/\1/')" + >&2 echo "Found existing release for $current_release_major_minor: $current_release" +else + current_release_major_minor="$(date --utc +'%y.%m')" + current_release_version=0 + >&2 echo "No release found for $current_release_major_minor" +fi + +new_version=$((current_release_version + 1)) +new_release="$current_release_major_minor-$new_version" +>&2 echo "New release: $new_release" +echo "$new_release" diff --git a/.github/workflows/pdf.yaml b/.github/workflows/pdf.yaml new file mode 100644 index 0000000..388cd4c --- /dev/null +++ b/.github/workflows/pdf.yaml @@ -0,0 +1,83 @@ +name: PDF Generation +concurrency: + group: ${{ github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} +on: + push: + branches: + - main + pull_request: {} + +jobs: + get-changed-files: + name: Get Changed Files + runs-on: ubuntu-20.04 + outputs: + changed-files: ${{ steps.changed-files.outputs.all_changed_and_modified_files }} + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 2 + - name: Get list of all changes + uses: tj-actions/changed-files@v26 + id: changed-files + + build-pdf: + name: Build Resume PDF + runs-on: ubuntu-22.04 + needs: [get-changed-files] + if: contains(needs.get-changed-files.outputs.changed-files, 'src/Resume.svg') + steps: + - name: Checkout Repo + uses: actions/checkout@v3 + with: + fetch-depth: 2 + - name: Export resume SVG to PDF + uses: docker://docker.io/minidocks/inkscape + with: + args: src/Resume.svg --export-filename=Resume.pdf + - name: Upload Artifact to Job + uses: actions/upload-artifact@v3 + with: + name: Resume.pdf + path: Resume.pdf + + publish-pdf: + name: Publish Resume PDF + runs-on: ubuntu-22.04 + needs: [build-pdf] + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: Checkout Repo + uses: actions/checkout@v3 + with: + fetch-depth: 2 + - name: Bump PDF Version + id: bump-version + run: | + new_version="$(./.github/scripts/bump_version.sh)" + echo "::set-output name=new-version::$new_version" + - name: Create Release + uses: release-drafter/release-drafter@v5 + id: create-release + with: + tag: ${{ steps.bump-version.outputs.new-version }} + name: ${{ steps.bump-version.outputs.new-version }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Download Artifact from Previous Job + uses: actions/download-artifact@v3 + with: + name: Resume.pdf + - name: Upload Release Asset + run: | + mv Resume.pdf Resume-${{ steps.bump-version.outputs.new-version }}.pdf + until gh release view ${{ steps.bump-version.outputs.new-version }}; do + echo "Release ${{ steps.bump-version.outputs.new-version }} not found. Waiting 1 second until checking again..." + sleep 1 + done + gh release upload ${{ steps.bump-version.outputs.new-version }} Resume-${{ steps.bump-version.outputs.new-version }}.pdf + - name: Publish Release + run: gh release edit ${{ steps.bump-version.outputs.new-version }} --draft=false diff --git a/.gitignore b/.gitignore index 0eb9fb9..c1bd796 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ .idea auxil out +*.pdf diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69536f --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ +# Resume + +This version of the resume is made using Inkscape. The source SVG is committed to this repo and a PDF is automatically +generated by the CI system. + +When a pull request is opened, the source file is tested by doing a simple build test and +the output of this test (a PDF) is added as an artifact to the build. + +When a commit is pushed to `main` (e.g. when a pull request is merged), the PDF is built and uploaded as an asset +to a GitHub release in the repo. The versioning uses a modified [CalVer](https://calver.org/) versioning scheme in the +form of `YY.MM-PATCH`. + +![Resume](./src/Resume.svg) diff --git a/src/Resume.svg b/src/Resume.svg new file mode 100644 index 0000000..c5eddcb --- /dev/null +++ b/src/Resume.svg @@ -0,0 +1,1361 @@ + + + + + Resume + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Wheeler Payson Hopkins Law + Backend/DevOps Software Engineer + Experience + + Personal Info + + + + Nov 2021-Present + Senior Software Engineer + + + Kong, Inc. + Remote (IL) + Create app scaffolding infrastructure between GitHub, Slack, DockerHub, Kubernetes + + + Create build/test/deployment pipelines with GitHub Actions, ArgoCD + Create app monitoring metrics and go/no-go gates using DataDog + Support existing Jenkins and Pulp infrastructure with AWS and Terraform + + + Share on-call rotations using PagerDuty + + Chicago, IL, USA + Email + wheeler.law@outlook.com + Phone + (781) 854-8841 + GitHub + github.com/wheelerlaw + LinkedIn + linkedin.com/in/wheeler-law + Location + + Oct 2019-Oct 2021 + Software Engineer + + Develop Jenkins pipeline shared libraries in Groovy + Orchestrate large Jenkins deployment on OpenShift using Ansible, Python + Share on-call rotations, triage JIRA tickets + Interact and collaborate with open source community on Red Hat public repositories + + + + Red Hat + + Remote (NY, IL) + Mentor interns and junior/associate engineers on the team + + + Jan 2019-Oct 2019 + Associate Consultant + Provide guidance to customers on best practices for cloud-native app development and continuous integration and deployment methodologies + + Help customers develop Java cloud-native apps and implement contemporary SDLC/DevOps techniques, both on-site and remotely + + Received Consulting Recognition Award for successfully building and presenting an app demo for a multi-million dollar contract with a large domestic commercial bank + + Red Hat + + Remote (NY) + Aug 2017-Nov 2018 + Developer II + + Paychex + + Rochester, NY + Build full-stack (Angular2/Java) cloud apps on OpenShift; used MongoDB, EMC ECS, and Kafka for data storage and stream processing + + Sit on weekly internal cloud platforms committee; set platform architectural direction, communicate changes and receive feedback to/from developers + + Advocate for trunk-based development, automated deployments, and other continuous delivery/integration best practices + Assist managers by conducting technical interviews for open positions + + + + + Jan 2017-Aug 2017 + Contractor Developer + Mindex Technologies, Inc. + Rochester, NY + Build full-stack (Angular2/Java) cloud apps on OpenShift + Automated legacy SDLC workflow for Oracle Forms using Vagrant and Jenkins + Presented POC of "serverless" cloud infrastructure for app development at 3rd annual internal hackathon + + + + Jan 2016-Aug 2016 + Software Engineer Intern + Netscout Systems, Inc. + + + Colorado Springs, CO + Build full-stack (AngularJS/Node.js) network monitoring application + + May 2014-Dec 2016 + Product Support Intern + InterSystems Corp. + Cambridge, MA + + + Re-write several internal applications, including an employee performance review web app with InterSystems ZEN AJAX web framework and KockoutJS + + Education + Rochester Institute of Tech. + BS, Computer Science + Sep 2012-May 2021 + Technologies + AWS • Terraform • Helm • Git +GitHub Actions • Docker • Pulp +Kubernetes • Jenkins • ArgoCD +DataDog • Python • Rust +Groovy • Ansible • Gradle +OpenShift • WildFly • GraphQL Kafka • Java • SpringBoot +MongoDB • Scala • Bash + + + + + + + + Wheeler Law + + + Resume + 17 AUG 2022 + + + + diff --git a/src/main.tex b/src/main.tex deleted file mode 100644 index efa1d5c..0000000 --- a/src/main.tex +++ /dev/null @@ -1,17 +0,0 @@ -%% -%% Author: wheeler -%% 6/25/18 -%% - -% Preamble -\documentclass[11pt]{article} - -% Packages -\usepackage{a4wide} - -% Document -\begin{document} -hello world - - -\end{document} \ No newline at end of file