From 5c63ee20492b8e94d9b0a7015dde1a53a2e57ea3 Mon Sep 17 00:00:00 2001 From: Charles N Wyble Date: Fri, 13 Dec 2024 11:33:46 -0600 Subject: [PATCH] True client/server refactor --- .../CandidateInfoSheet/CandidateInfoSheet.md | 121 ------- .../ContactInfo/ContactInfo-ClientSubmit.md | 4 - .../ContactInfo/ContactInfo-JobBoard.md | 6 - .../MarkdownResume/JobHistoryDetails/job1.md | 3 - .../MarkdownResume/JobHistoryDetails/job2.md | 3 - .../SkillsAndProjects/Projects.md | 2 - .../SkillsAndProjects/Skills.csv | 2 - .../WorkHistory/WorkHistory.csv | 2 - Templates/jsonresume/awards.csv | 4 - Templates/jsonresume/interests.csv | 5 - Templates/jsonresume/languages.csv | 2 - Templates/jsonresume/publications.csv | 2 - Templates/jsonresume/skills.csv | 4 - Templates/jsonresume/volunteer.csv | 2 - Templates/jsonresume/work.csv | 4 - build-output/ignore-this-dir | 1 - build-temp/ignore-this-dir | 1 - build/BuildTemplate-CandidateInfoSheet.yml | 14 - build/BuildTemplate-ClientSubmission.yml | 7 - build/BuildTemplate-JobBoard.yml | 12 - build/CandidateVariables.env | 77 ---- build/background3.pdf | Bin 1051 -> 0 bytes build/build-demo-json.sh | 329 ------------------ build/build-demo-markdown.sh | 212 ----------- ...r.sh => build-pipeline-server-markdown.sh} | 48 +-- build/resume-docx-reference.docx | Bin 16716 -> 0 bytes 26 files changed, 24 insertions(+), 843 deletions(-) delete mode 100644 Templates/MarkdownResume/CandidateInfoSheet/CandidateInfoSheet.md delete mode 100644 Templates/MarkdownResume/ContactInfo/ContactInfo-ClientSubmit.md delete mode 100644 Templates/MarkdownResume/ContactInfo/ContactInfo-JobBoard.md delete mode 100644 Templates/MarkdownResume/JobHistoryDetails/job1.md delete mode 100644 Templates/MarkdownResume/JobHistoryDetails/job2.md delete mode 100644 Templates/MarkdownResume/SkillsAndProjects/Projects.md delete mode 100644 Templates/MarkdownResume/SkillsAndProjects/Skills.csv delete mode 100644 Templates/MarkdownResume/WorkHistory/WorkHistory.csv delete mode 100644 Templates/jsonresume/awards.csv delete mode 100644 Templates/jsonresume/interests.csv delete mode 100644 Templates/jsonresume/languages.csv delete mode 100644 Templates/jsonresume/publications.csv delete mode 100644 Templates/jsonresume/skills.csv delete mode 100644 Templates/jsonresume/volunteer.csv delete mode 100644 Templates/jsonresume/work.csv delete mode 100644 build-output/ignore-this-dir delete mode 100644 build-temp/ignore-this-dir delete mode 100644 build/BuildTemplate-CandidateInfoSheet.yml delete mode 100644 build/BuildTemplate-ClientSubmission.yml delete mode 100644 build/BuildTemplate-JobBoard.yml delete mode 100644 build/CandidateVariables.env delete mode 100644 build/background3.pdf delete mode 100644 build/build-demo-json.sh delete mode 100644 build/build-demo-markdown.sh rename build/{build-pipeline-server.sh => build-pipeline-server-markdown.sh} (76%) delete mode 100644 build/resume-docx-reference.docx diff --git a/Templates/MarkdownResume/CandidateInfoSheet/CandidateInfoSheet.md b/Templates/MarkdownResume/CandidateInfoSheet/CandidateInfoSheet.md deleted file mode 100644 index fc72c97..0000000 --- a/Templates/MarkdownResume/CandidateInfoSheet/CandidateInfoSheet.md +++ /dev/null @@ -1,121 +0,0 @@ -# {{CandidateName}} Candidate Information Sheet - -## Introduction - -Hello, - -I apologize for the form letter response. - -I receive a high volume of recruiter emails every day and I've found this letter to be the most efficient way to -handle the high volume of emails and reduce back and forth emails/texts/calls. - -If you have any questions/comments/concerns not covered by this document, please let me know via e-mail and I'm happy to address them! - -If you ask me something answered in this document, I will not respond and will not move forward with the opportunity, so please read it in detail! - -## Re: share my ID over email - -I WILL NOT share my (full or redacted) photo ID over email or any other electronic written -communication. If that is "required" then I have no interest in moving forward with this opportunity. - -I am happy to get on a teams/zoom/google meet etc call and show my ID. - -## Re: professional references - -I am happy to provide professional references once an interview with the end client/customer/hiring manager/team has been scheduled. I will NOT provide references up front. If that is "required" then I have no interest in moving forward with this opportunity. - -## Re: relocation - -if the role is not based in **{{CandidateLocation}}** or **Other Location** I will need to re-locate - -| Question | Answer | -|-------------------------------------------|--------| -| Am I open to relocation? | Yes | -| Am I willing to re-locate at own expense? | No | -| Am I open to up to 100% travel | Yes | - -Please be aware that: - -- I will **only re-locate at the employer expense**. -- I will need **two weeks of time** to re-locate. -- The net amount of the re-location benefit **MUST be at least {{CandidateRelocationNetMinimumAmount}}** to fully compensate me for the time/effort to re-locate. -- The full re-location benefit **must be provided prior to the confirmed start date**. -- I **will NOT** accept a reimbursement based re-location package. -- I am happy to come onsite (at client expense (paid up front)) for training/orientation etc. - -\pagebreak - -## Rate Schedule (compensation expectations) - -### Fully remote roles - -I have a **very strong** preference for fully remote roles. - -I am open to (at the absolute bottom of my range): - -- **{{CandidateRateSheetRemoteW2HourlyMinimum}}** per hour(w2) -- **{{CandidateRateSheetRemoteW2AnnualMinimum}}** annually -- **{{CandidateRateSheetRemote1099HourlyMinimum}}** per hour (1099/corp to corp) - -I have a strong preference for roles that are : - -- **{{CandidateRateSheetRemoteW2HourlyPrefer}}** per hour(w2) or more -- **{{CandidateRateSheetRemoteW2AnnualPrefer}}** annually or more -- **{{CandidateRateSheetRemote1099HourlyPrefer}}** per hour (1099/corp to corp) or more - -### On-site/hybrid roles - -- **{{CandidateRateSheetRemoteW2HourlyPrefer}}** per hour(w2) or more -- **{{CandidateRateSheetRemoteW2AnnualPrefer}}** annually or more -- **{{CandidateRateSheetRemote1099HourlyPrefer}}** per hour (1099/corp to corp) or more - -In regards to compensation type, I am open to: - -- w2 -- corp to corp (I have my own LLC) -- 1099 - -If you have a rate for any of the compensation options above, send them all. I will pick which one works best for my situation and the opportunity. - -If it's a different rate with/without benefits, send both. - -If the above is in alignment with this opportunity, please feel free to send me an RTR with the best rate you can offer. - -\pagebreak - -## Details needed for submission - -### My resume - -[Download Candidate resume(format)](https://some.resume.somewhere/some-Resume.pdf) - -I am happy to discuss and make edits to the resume content specific to the opportunity if you feel they are needed. - -### Candidate details - -Here are my complete candidate details for submission to the role. - -| Question | Answer | -|---------------------------------------|-------------------------------------| -| Full name | {{CandidateName}} | -| E-mail address | {{CandiateEmail}} | -| Phone number | {{CandidatePhone}} | -| Preferred form of contact | {{CandidatePreferredContactMethod}} | -| Work authorization | {{CandidateWorkAuthorization}} | -| Are you employed presently? | {{CandidateEmploymentStatus}} | -| Current location | {{CandidateCurrentLocation}} | -| Current timezone | {{CandidateCurrentTimezone}} | -| Timezones I can work in | {{CandidateWorkableTimezones}} | -| Availability to interview | {{CandidateInterviewAvailability}} | -| Availability to start | {{CandidateStartAvailability}} | -| Highest Education | {{CandidateHighestEducation}} | -| Graduated Year | {{CandidateGraduationYear}} | -| Name of school | {{CandidateSchoolName}} | -| Location of school | {{CandidateSchoolLocation}} | -| Linkedin Profile | ({{CandidateLinkedin}}) | -| Github Profile | ({{CandidateGithub}}) | -| Last project | {{CandidateLastProject}} | -| DOB | {{CandidateDOB}} | -| Total IT/career experience | {{CandidateTotalExperience}} | -| Open to in-office/hybrid/remote | Yes | -| Any trips planned in next six months? | No | diff --git a/Templates/MarkdownResume/ContactInfo/ContactInfo-ClientSubmit.md b/Templates/MarkdownResume/ContactInfo/ContactInfo-ClientSubmit.md deleted file mode 100644 index 0ea8fe7..0000000 --- a/Templates/MarkdownResume/ContactInfo/ContactInfo-ClientSubmit.md +++ /dev/null @@ -1,4 +0,0 @@ -{{CandidateName}} -===== - -{{CandidateOneLinerSummary}} diff --git a/Templates/MarkdownResume/ContactInfo/ContactInfo-JobBoard.md b/Templates/MarkdownResume/ContactInfo/ContactInfo-JobBoard.md deleted file mode 100644 index 853936b..0000000 --- a/Templates/MarkdownResume/ContactInfo/ContactInfo-JobBoard.md +++ /dev/null @@ -1,6 +0,0 @@ -{{CandidateName}} -===== - -{{CandidateOneLinerSummary}} - -[ [Github Profile]({{CandidateGithub}}) ] . [ [Linkedin Profile]({{CandidateLinkedin}}) ] . [ {{CandidateEmail}} ] . [ {{CandidatePhone}} ] . [ {{CandidateLocation}} ] diff --git a/Templates/MarkdownResume/JobHistoryDetails/job1.md b/Templates/MarkdownResume/JobHistoryDetails/job1.md deleted file mode 100644 index f622b8d..0000000 --- a/Templates/MarkdownResume/JobHistoryDetails/job1.md +++ /dev/null @@ -1,3 +0,0 @@ -- Stuff -- Things -- Amazing project! \ No newline at end of file diff --git a/Templates/MarkdownResume/JobHistoryDetails/job2.md b/Templates/MarkdownResume/JobHistoryDetails/job2.md deleted file mode 100644 index f622b8d..0000000 --- a/Templates/MarkdownResume/JobHistoryDetails/job2.md +++ /dev/null @@ -1,3 +0,0 @@ -- Stuff -- Things -- Amazing project! \ No newline at end of file diff --git a/Templates/MarkdownResume/SkillsAndProjects/Projects.md b/Templates/MarkdownResume/SkillsAndProjects/Projects.md deleted file mode 100644 index baa1cb6..0000000 --- a/Templates/MarkdownResume/SkillsAndProjects/Projects.md +++ /dev/null @@ -1,2 +0,0 @@ -- Cool project 1. -- cool project 2. diff --git a/Templates/MarkdownResume/SkillsAndProjects/Skills.csv b/Templates/MarkdownResume/SkillsAndProjects/Skills.csv deleted file mode 100644 index c689f34..0000000 --- a/Templates/MarkdownResume/SkillsAndProjects/Skills.csv +++ /dev/null @@ -1,2 +0,0 @@ -skill1|1 years|skill,1,details,and,stuff -skill2|2 years|skill2,2,details,and,stuff,and,things \ No newline at end of file diff --git a/Templates/MarkdownResume/WorkHistory/WorkHistory.csv b/Templates/MarkdownResume/WorkHistory/WorkHistory.csv deleted file mode 100644 index 99bc7dd..0000000 --- a/Templates/MarkdownResume/WorkHistory/WorkHistory.csv +++ /dev/null @@ -1,2 +0,0 @@ -job1,Title of job 1,January 1 1970 - January 6 1980 -job2,Title of Job 2,January 1 1970 - January 6 1980 \ No newline at end of file diff --git a/Templates/jsonresume/awards.csv b/Templates/jsonresume/awards.csv deleted file mode 100644 index 046b9eb..0000000 --- a/Templates/jsonresume/awards.csv +++ /dev/null @@ -1,4 +0,0 @@ -title,date,awarder,summary -Outstanding Achievement Award,2014-11-01,Tech Company Inc,Excellence in software architecture and team leadership -Innovation Prize,2016-03-15,Industry Association,Breakthrough development in cloud infrastructure -Open Source Contributor Award,2018-06-30,GitHub,Significant contributions to developer tools and libraries diff --git a/Templates/jsonresume/interests.csv b/Templates/jsonresume/interests.csv deleted file mode 100644 index 733f37e..0000000 --- a/Templates/jsonresume/interests.csv +++ /dev/null @@ -1,5 +0,0 @@ -name,keywords -Gardening,Lazy Gardening -Music,Guitar|Singing|Dancing -Books,Reading|Writing|History -Open Source,All of it diff --git a/Templates/jsonresume/languages.csv b/Templates/jsonresume/languages.csv deleted file mode 100644 index ddeb2f6..0000000 --- a/Templates/jsonresume/languages.csv +++ /dev/null @@ -1,2 +0,0 @@ -language,fluency -English,Native speaker diff --git a/Templates/jsonresume/publications.csv b/Templates/jsonresume/publications.csv deleted file mode 100644 index 2145bc9..0000000 --- a/Templates/jsonresume/publications.csv +++ /dev/null @@ -1,2 +0,0 @@ -name,publisher,releaseDate,url,summary -Advanced JavaScript Techniques,Tech Books Publishing,2019-08-01,http://techbookspublishing.com/advanced-javascript,A comprehensive guide to modern JavaScript development. diff --git a/Templates/jsonresume/skills.csv b/Templates/jsonresume/skills.csv deleted file mode 100644 index f564440..0000000 --- a/Templates/jsonresume/skills.csv +++ /dev/null @@ -1,4 +0,0 @@ -name,level,keywords -Frontend,Senior,HTML / JSX|SCSS / CSS / BEM / Styled Components|Javascript / Typescript|React / Next|Redux / Apollo -Backend,Senior,Node|Ruby|Python|Postgres|Redis|Serverless -Devops,Senior,AWS|G Cloud|Heroku|Caching diff --git a/Templates/jsonresume/volunteer.csv b/Templates/jsonresume/volunteer.csv deleted file mode 100644 index 2e29382..0000000 --- a/Templates/jsonresume/volunteer.csv +++ /dev/null @@ -1,2 +0,0 @@ -organization,position,url,startDate,summary,highlights -Open Source Project,Contributor,http://opensourceproject.com,2016-01-01,Contributing to open source projects to improve software quality.,Fixed critical bugs and added new features.|Mentored new contributors. diff --git a/Templates/jsonresume/work.csv b/Templates/jsonresume/work.csv deleted file mode 100644 index 479467d..0000000 --- a/Templates/jsonresume/work.csv +++ /dev/null @@ -1,4 +0,0 @@ -name,position,url,startDate,endDate,summary,highlights -Company,President,https://company.com,2013-01-01,2014-01-01,Description...,Started the company -Google,Senior Engineer,https://google.com,2014-01-01,2016-06-30,Led frontend infrastructure.,Launched major features|Mentored junior developers|Improved build system -Startup Inc,CTO,https://startup.com,2016-07-01,,Building next-gen tech.,Grew team to 20 engineers|Architected core platform|Secured Series A funding diff --git a/build-output/ignore-this-dir b/build-output/ignore-this-dir deleted file mode 100644 index e62add6..0000000 --- a/build-output/ignore-this-dir +++ /dev/null @@ -1 +0,0 @@ -Working directory for the pipeline. Don't use. \ No newline at end of file diff --git a/build-temp/ignore-this-dir b/build-temp/ignore-this-dir deleted file mode 100644 index e62add6..0000000 --- a/build-temp/ignore-this-dir +++ /dev/null @@ -1 +0,0 @@ -Working directory for the pipeline. Don't use. \ No newline at end of file diff --git a/build/BuildTemplate-CandidateInfoSheet.yml b/build/BuildTemplate-CandidateInfoSheet.yml deleted file mode 100644 index cfcfabe..0000000 --- a/build/BuildTemplate-CandidateInfoSheet.yml +++ /dev/null @@ -1,14 +0,0 @@ -title: "{{CandidateName}} Candidate Information Sheet" -titlepage: true -titlepage-logo: "{{CandidateLogo}}" -toc: true -toc-own-page: true -date: \today -header-left: "\\hspace{1cm}" -header-center: "\\leftmark" -header-right: "Page \\thepage" -footer-left: "{{CandidateName}}" -footer-center: "{{CandidateTagline}}" -footer-right: "[Source code]({{SourceCode}})" -urlcolor: {{URLCOLOR}} -page-background: "{{PAGEBACKGROUND}}" \ No newline at end of file diff --git a/build/BuildTemplate-ClientSubmission.yml b/build/BuildTemplate-ClientSubmission.yml deleted file mode 100644 index 901b4f4..0000000 --- a/build/BuildTemplate-ClientSubmission.yml +++ /dev/null @@ -1,7 +0,0 @@ -title: "{{CandidateName}} Resume" -header-left: "\\hspace{1cm}" -header-center: "\\leftmark" -header-right: "Page \\thepage" -footer-left: "{{CandidateName}}" -urlcolor: {{URLCOLOR}} -page-background: "{{PAGEBACKGROUND}}" \ No newline at end of file diff --git a/build/BuildTemplate-JobBoard.yml b/build/BuildTemplate-JobBoard.yml deleted file mode 100644 index 5448a5d..0000000 --- a/build/BuildTemplate-JobBoard.yml +++ /dev/null @@ -1,12 +0,0 @@ -title: "{{CandidateName}} Resume" -titlepage: true -titlepage-logo: "{{CandidateLogo}}" -date: \today -header-left: "\\hspace{1cm}" -header-center: "\\leftmark" -header-right: "Page \\thepage" -footer-left: "{{CandidateName}}" -footer-center: "{{CandidateTagline}}" -footer-right: "[Source code]({{SourceCode}})" -urlcolor: {{URLCOLOR}} -page-background: "{{PAGEBACKGROUND}}" \ No newline at end of file diff --git a/build/CandidateVariables.env b/build/CandidateVariables.env deleted file mode 100644 index 92dda32..0000000 --- a/build/CandidateVariables.env +++ /dev/null @@ -1,77 +0,0 @@ -################################################### -# Modify these values to suit -################################################### - -######################## -# Contact info -######################## - -export CandidateName="First Middle Last" -export CandidatePhone="1 123 456 7890" -export CandidateRole="Jack of all trades" -export CandidateLocation="Place 1/Place 2" -export CandidateCity="City" -export CandidateCountry="Country" -export CandidateZipCode="Zip" -export CandidateSkypeID="SkypeID" -export CandidateEmail="candidate@domain.com" -export CandidateAvatar="URLTOAVATAR" -export CandidateWebsite="URLTOCANDIDATEWEbSITE" - -######################## -# Profile information -######################## - -export CandidateTagline="Your.Tagline.Here." -export CandidateOneLineSummary="Super awesome and stuff." -export CandidateLinkedin="https://www.linkedin.com/in/ab1" -export CandidateGithubUsername="ghuser" -export CandidateTwitterUsername="twxuser" - -########################################## -# Layout/title page /formatting options -########################################## - -export CandidateLogo="" -export SourceCode="https://git.knownelement.com/reachableceo/MarkdownResume-Pipeline" -export URLCOLOR="blue" -export PAGEBACKGROUND="./background3.pdf" -export JSONRESUME_THEME="professional" - -########################## -# Candidate info sheet -########################## - -export CandidatePreferredContactMethod="Email will get the fastest response." -export CandidateWorkAuthorization="US Citizen" -export CandidateEmploymentStatus="Not currently employed" -export CandidateCurrentLocation="City,State,Country etc" -export CandidateCurrentTimezone="Timezone" -export CandidateWorkableTimezones="Timezones" -export CandidateInterviewAvailability="Sometime" -export CandidateStartAvailability="Sometime" -export CandidateHighestEducation="Some education level" -export CandidateGraduationYear="Graduation year" -export CandidateSchoolName="School name" -export CandidateSchoolLocation="School location" -export CandidateLastProject="Last project" -export CandidateDOB="MM/DD" -export CandidateTotalExperience="epoch" - - -######################## -#Compensation targets -######################## - -export CandidateRelocationNetMinimumAmount="1,987.11" - -export CandidateRateSheetRemoteW2HourlyMinimum="\$12.34" -export CandidateRateSheetRemoteW2AnnualMinimum="\$123,456.00" -export CandidateRateSheetRemote1099HourlyMinimum="\$56.78" - -export CandidateRateSheetRemoteW2HourlyPrefer="\$34.56" -export CandidateRateSheetRemoteW2AnnualPrefer="\$321,987.00" -export CandidateRateSheetRemote1099HourlyPrefer="\$78.90" - -export CandidateCertifications="" -export CandidateReferences="" \ No newline at end of file diff --git a/build/background3.pdf b/build/background3.pdf deleted file mode 100644 index b8aef377c98b9adb2ef24e035b3097f9eb5ef4b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1051 zcma)5Pe>F|7%wrfA&9J-LEpip6>?{0cV}m`)zsNtH8)(=0wWEk+2=a3?c3hGt+k7g z)upJQOH>ea2*Z*NMV*SoLl;9xZ=Rz|Xb=@d()VWFb+HaThI#XT@B8!necv~}R4mb| z1~kd{^2_WmDFh18GiRk}6yzkyXZbjU5lTw{ASaw0Ck*$T#Yv3VG()7$PRZqrSm&hD z19GdoaY|{}wmPxnfdA^1`cmTIqPaZPv9vzPp(Y=e3!hv zuo$mv{P2Ec{n3;=INLtk+PSlNW@+{Q(`);G%-1!4@49&N&SYQq&A_W~+xKRU=n~0i zHYnnk5GNFg9W|+1P~3}CuqxdX8!z$RA&x>J8WjL8*;4QTve^wP$hL)Vl#dtq#%Cjr zR*eJl@reQfIb~&u7c*rslIQ4Fspv71ajYI%f>Q`7ptWg%pss0p7>uwQFpM@`S7Fri zHEEusvkRg{<$m-sS}fGiD`)f23gaQ21ly0=G| zlvT-T;?g3si3_4O=^BkfL1j!fHM$lDr1C(W3TD&wVMl(el$MOH&HhZMkq%ZR~EpFv#wj3J! zOH z#ZK31>^QTW9AVx+Jmg#=NLh3_O(_Q $BUILD_OUTPUT_DIR/resume.json - -} - -add_meta_section() - -{ - -cat << META >> $BUILD_OUTPUT_DIR/resume.json - "meta": { - "theme": "$JSONRESUME_THEME" - }, -META - -} - -add_basics_section() - -{ - -cat << BASICS >> $BUILD_OUTPUT_DIR/resume.json - "basics": { - "name": "$CandidateName", - "phone": "$CandidatePhone", - "label": "$CandidateRole", - "image": "$CandidateAvatar", - "summary": "$CandidateOneLineSummary", - "website": "$CandidateWebsite", - "url": "https://lordajax.com", - "email": "$CandidateEmail", - "location": { - "city": "$CandidateLocation", - "countryCode": "$CandidateCountry" - }, - }, -BASICS - -} - -add_work_section() -{ - - local input_file=$JSON_TEMPLATE_DIRECTORY/work.csv - cat << 'WORK_START' - "work": [ -WORK_START - awk -F, 'NR>1 { - printf " {\n" - printf " \"name\": \"%s\",\n", $1 - printf " \"position\": \"%s\",\n", $2 - printf " \"url\": \"%s\",\n", $3 - printf " \"startDate\": \"%s\",\n", $4 - if ($5 != "") printf " \"endDate\": \"%s\",\n", $5 - printf " \"summary\": \"%s\",\n", $6 - printf " \"highlights\": [\n \"%s\"\n ]\n", gensub(/\|/, "\",\n \"", "g", $7) - printf " }%s\n", (NR==NR?"":",") - }' "$input_file" - cat << 'WORK_END' - ], -WORK_END - -} - -add_volunteer_section() - -{ - - local input_file="$JSON_TEMPLATE_DIRECTORY/volunteer.csv" - cat << 'VOLUNTEER_START' >> $BUILD_OUTPUT_DIR/resume.json - "volunteer": [ -VOLUNTEER_START - - awk -F, 'NR>1 { - printf " {\n" - printf " \"organization\": \"%s\",\n", $1 - printf " \"position\": \"%s\",\n", $2 - printf " \"url\": \"%s\",\n", $3 - printf " \"startDate\": \"%s\",\n", $3 - printf " \"endDate\": \"%s\",\n", $3 - printf " \"summary\": \"%s\"\n", $4 - printf " \"highlights\": [" - printf " " $7 - printf " ]" - printf " }%s\n", (NR==NR?"":",") - }' "$input_file" - cat << 'VOLUNTEER_END' - ], -VOLUNTEER_END - -} - -add_awards_section() - -{ - - local input_file=$JSON_TEMPLATE_DIRECTORY/awards.csv - cat << 'AWARDS_START' >> $BUILD_OUTPUT_DIR/resume.json - "awards": [ -AWARDS_START - awk -F, 'NR>1 { - printf " {\n" - printf " \"title\": \"%s\",\n", $1 - printf " \"date\": \"%s\",\n", $2 - printf " \"awarder\": \"%s\",\n", $3 - printf " \"summary\": \"%s\"\n", $4 - printf " }%s\n", (NR==NR?"":",") - }' "$input_file" - cat << 'AWARDS_END' - ], -AWARDS_END -} - - -add_publications_section() - -{ - - local input_file=$JSON_TEMPLATE_DIRECTORY/publications.csv - cat << 'PUBLICATIONS_START' >> $BUILD_OUTPUT_DIR/resume.json - "publications": [ -PUBLICATIONS_START - awk -F, 'NR>1 { - printf " {\n" - printf " \"name\": \"%s\",\n", $1 - printf " \"publisher\": \"%s\",\n", $2 - printf " \"releaseDate\": \"%s\",\n", $3 - printf " \"url\": \"%s\",\n", $4 - printf " \"summary\": \"%s\"\n", $5 - printf " }%s\n", (NR==NR?"":",") - }' "$input_file" - cat << 'PUBLICATIONS_END' - ], -PUBLICATIONS_END - -} - -add_volunteer_section() - -{ - - local input_file=$JSON_TEMPLATE_DIRECTORY/volunteer.csv - cat << 'VOLUNTEER_START' >> $BUILD_OUTPUT_DIR/resume.json - "volunteer": [ -VOLUNTEER_START - awk -F, 'NR>1 { - printf " {\n" - printf " \"organization\": \"%s\",\n", $1 - printf " \"position\": \"%s\",\n", $2 - printf " \"url\": \"%s\",\n", $3 - printf " \"startDate\": \"%s\",\n", $4 - printf " \"summary\": \"%s\",\n", $5 - printf " \"highlights\": [\n \"%s\"\n ]\n", gensub(/\|/, "\",\n \"", "g", $6) - printf " }%s\n", (NR==NR?"":",") - }' "$input_file" - cat << 'VOLUNTEER_END' - ], -VOLUNTEER_END - -} - -add_skills_section() - -{ - - local input_file="$JSON_TEMPLATE_DIRECTORY/skills.csv" - cat << 'SKILLS_START' >> $BUILD_OUTPUT_DIR/resume.json - "skills": [ -SKILLS_START - awk -F, 'NR>1 { - printf " {\n" - printf " \"keywords\": [\n \"%s\"\n ],\n", gensub(/\|/, "\",\n \"", "g", $3) - printf " \"level\": \"%s\",\n", $2 - printf " \"name\": \"%s\"\n", $1 - printf " }%s\n", (NR==NR?"":",") - }' "$input_file" - cat << 'SKILLS_END' - ], -SKILLS_END - -} - -add_education_section() - -{ - - local input_file="$JSON_TEMPLATE_DIRECTORY/education.csv" - cat << 'EDUCATION_START' >> $BUILD_OUTPUT_DIR/resume.json - "education": [ -EDUCATION_START - awk -F, 'NR>1 { - printf " {\n" - printf " \"institution\": \"%s\",\n", $1 - if ($2 != "") printf " \"url\": \"%s\",\n", $2 - printf " \"area\": \"%s\",\n", $3 - printf " \"studyType\": \"%s\",\n", $4 - printf " \"startDate\": \"%s\",\n", $5 - printf " \"endDate\": \"%s\"", $6 - if ($7 != "") printf ",\n \"score\": \"%s\"", $7 - if ($8 != "") printf ",\n \"courses\": [\n \"%s\"\n ]", gensub(/\|/, "\",\n \"", "g", $8) - printf "\n }%s\n", (NR==NR?"":",") - }' "$input_file" - cat << 'EDUCATION_END' - ], -EDUCATION_END - -} - -add_languages_section() - -{ - - local input_file="$JSON_TEMPLATE_DIRECTORY/languages.csv" - cat << 'LANGUAGES_START' >> $BUILD_OUTPUT_DIR/resume.json - "languages": [ -LANGUAGES_START - awk -F, 'NR>1 { - printf " {\n" - printf " \"language\": \"%s\",\n", $1 - printf " \"fluency\": \"%s\"\n", $2 - printf " }%s\n", (NR==NR?"":",") - }' "$input_file" - cat << 'LANGUAGES_END' - ], -LANGUAGES_END - -} - -add_interests_section() - -{ - local input_file="$JSON_TEMPLATE_DIRECTORY/interests.csv" - cat << 'INTERESTS_START' >> $BUILD_OUTPUT_DIR/resume.json - "interests": [ -INTERESTS_START - awk -F, 'NR>1 { - printf " {\n" - printf " \"name\": \"%s\",\n", $1 - printf " \"keywords\": [\n \"%s\"\n ]\n", gensub(/\|/, "\",\n \"", "g", $2) - printf " }%s\n", (NR==NR?"":",") - }' "$input_file" - cat << 'INTERESTS_END' - ], -INTERESTS_END - -} - -add_references_section() - -{ - - local input_file="$JSON_TEMPLATE_DIRECTORY/references.csv" - cat << 'REFERENCES_START' >> $BUILD_OUTPUT_DIR/resume.json - "references": [ -REFERENCES_START - awk -F, 'NR>1 { - printf " {\n" - printf " \"name\": \"%s\",\n", $1 - printf " \"reference\": \"%s\"\n", $2 - printf " }%s\n", (NR==NR?"":",") - }' "$input_file" - cat << 'REFERENCES_END' - ] -REFERENCES_END - -} - - -add_footer() - -{ - -echo "}" >> $BUILD_OUTPUT_DIR/resume.json - -} - -main() - -{ - - add_header - add_meta_section $JSON_TEMPLATE_DIRECTORY/meta.csv - add_basics_section $JSON_TEMPLATE_DIRECTORY/basics.csv - #add_profiles_section $JSON_TEMPLATE_DIRECTORY/profiles.csv - #add_work_section $JSON_TEMPLATE_DIRECTORY/work.csv - #add_volunteer_section $JSON_TEMPLATE_DIRECTORY/volunteer.csv - #add_education-section $JSON_TEMPLATE_DIRECTORY/education.csv - #add_awards_section $JSON_TEMPLATE_DIRECTORY/awards.csv - #add_certificates_section $JSON_TEMPLATE_DIRECTORY/certificates.csv - #add_publications_section $JSON_TEMPLATE_DIRECTORY/publications.csv - #add_skills_section $JSON_TEMPLATE_DIRECTORY/skills.csv - #add_languages_section $JSON_TEMPLATE_DIRECTORY/languages.csv - #add_interests_section $JSON_TEMPLATE_DIRECTORY/interests.csv - #add_references_section $JSON_TEMPLATE_DIRECTORY/references.csv - #add_projects_section $JSON_TEMPLATE_DIRECTORY/projects.csv - add_footer - -} - - -main \ No newline at end of file diff --git a/build/build-demo-markdown.sh b/build/build-demo-markdown.sh deleted file mode 100644 index 4d939e6..0000000 --- a/build/build-demo-markdown.sh +++ /dev/null @@ -1,212 +0,0 @@ -#!/usr/bin/env bash - -# This is a demo used for testing the build pipeline end to end in a self contained way. - -# It's only used by developers of this repository for testing/validating changes. - -# Your client repository has a build-pipeline-client.sh script and it uses -# build-pipeline-server.sh, not this script. - -################################################################### -# Modify the CandiateVariables.env file to refelct your information -################################################################### -################################################### - -source "./CandidateVariables.env" - -#################################################### -#################################################### -#################################################### -#DO NOT CHANGE ANYTHING BELOW THIS LINE -#################################################### -#################################################### -#################################################### - -############################################################ -# Setup globals -############################################################ - -readonly MO_PATH="bash ../vendor/git.knownelement.com/ExternalVendorCode/mo/mo" -readonly BUILD_OUTPUT_DIR="../build-output/MarkdownResume/" -readonly BUILD_TEMP_DIR="../build-temp/MarkdownResume" -readonly BUILDYAML_JOBBOARD="$BUILD_TEMP_DIR/JobBoard.yml" -readonly BUILDYAML_CLIENTSUBMISSION="$BUILD_TEMP_DIR/ClientSubmission.yml" -readonly BUILDYAML_CANDIDATEINFOSHEET="$BUILD_TEMP_DIR/CandidateInfoSheet.yml" - -CandidateInfoSheetMarkdownOutputFile="$BUILD_OUTPUT_DIR/CandidateInfoSheet.md" -CandidateInfoSheetPDFOutputFIle="$BUILD_OUTPUT_DIR/CandidateInfoSheet.pdf" - -JobBoardMarkdownOutputFile="$BUILD_OUTPUT_DIR/job-board/Resume.md" -JobBoardPDFOutputFile="$BUILD_OUTPUT_DIR/job-board/Resume.pdf" -JobBoardMSWordOutputFile="$BUILD_OUTPUT_DIR/job-board/Resume.doc" - -ClientSubmissionMarkdownOutputFile="$BUILD_OUTPUT_DIR/client-submission/Resume.md" -ClientSubmissionPDFOutputFile="$BUILD_OUTPUT_DIR/client-submission//Resume.pdf" -ClientSubmissionMSWordOutputFile="$BUILD_OUTPUT_DIR/client-submission/Resume.doc" - -echo "Cleaning up from previous runs..." - -rm $BUILDYAML_CANDIDATEINFOSHEET -rm $CandidateInfoSheetMarkdownOutputFile -rm $CandidateInfoSheetPDFOutputFIle - -rm $BUILDYAML_JOBBOARD -rm $JobBoardMarkdownOutputFile -rm $JobBoardPDFOutputFile -rm $JobBoardMSWordOutputFile - -rm $BUILDYAML_CLIENTSUBMISSION -rm $ClientSubmissionMarkdownOutputFile -rm $ClientSubmissionPDFOutputFile -rm $ClientSubmissionMSWordOutputFile - -# Expand variables into rendered YAML files. These will be used by pandoc to create the output artifacts - -$MO_PATH ./BuildTemplate-CandidateInfoSheet.yml > $BUILDYAML_CANDIDATEINFOSHEET -$MO_PATH ./BuildTemplate-JobBoard.yml > $BUILDYAML_JOBBOARD -$MO_PATH ./BuildTemplate-ClientSubmission.yml > $BUILDYAML_CLIENTSUBMISSION - -echo "Creating candidate info sheet..." - -$MO_PATH ../Templates/MarkdownResume/CandidateInfoSheet/CandidateInfoSheet.md > $CandidateInfoSheetMarkdownOutputFile - -pandoc \ -"$CandidateInfoSheetMarkdownOutputFile" \ ---template eisvogel \ ---metadata-file="$BUILD_TEMP_DIR/CandidateInfoSheet.yml" \ ---from markdown \ ---to=pdf \ ---output $CandidateInfoSheetPDFOutputFIle - -echo "Combining markdown files into single input file for pandoc..." - -# Create contact info md file -$MO_PATH ../Templates/MarkdownResume/ContactInfo/ContactInfo-JobBoard.md > $BUILD_TEMP_DIR/ContactInfo-JobBoard.md -$MO_PATH ../Templates/MarkdownResume/ContactInfo/ContactInfo-ClientSubmit.md > $BUILD_TEMP_DIR/ContactInfo-ClientSubmit.md - -#Pull in contact info -cat $BUILD_TEMP_DIR/ContactInfo-JobBoard.md >> $JobBoardMarkdownOutputFile -echo " " >> $JobBoardMarkdownOutputFile - -cat $BUILD_TEMP_DIR/ContactInfo-ClientSubmit.md >> $ClientSubmissionMarkdownOutputFile -echo " " >> $ClientSubmissionMarkdownOutputFile - -echo "## Career Highlights" >> $JobBoardMarkdownOutputFile -echo "## Career Highlights" >> $ClientSubmissionMarkdownOutputFile - -cat ../Templates/MarkdownResume/SkillsAndProjects/Projects.md >> $JobBoardMarkdownOutputFile -echo "\pagebreak" >> $JobBoardMarkdownOutputFile - -cat ../Templates/MarkdownResume/SkillsAndProjects/Projects.md >> $ClientSubmissionMarkdownOutputFile -echo "\pagebreak" >> $ClientSubmissionMarkdownOutputFile - -echo " " >> $JobBoardMarkdownOutputFile -echo "## Employment History" >> $JobBoardMarkdownOutputFile -echo " " >> $JobBoardMarkdownOutputFile - -echo " " >> $ClientSubmissionMarkdownOutputFile -echo "## Employment History" >> $ClientSubmissionMarkdownOutputFile -echo " " >> $ClientSubmissionMarkdownOutputFile - -#And here we do some magic... -#Pull in : - -# employer -# title -# start/end dates of employment -# long form position summary data from each position - -IFS=$'\n\t' -for position in \ -$(cat ../Templates/MarkdownResume/WorkHistory/WorkHistory.csv); do - -COMPANY="$(echo $position|awk -F ',' '{print $1}')" -TITLE="$(echo $position|awk -F ',' '{print $2}')" -DATEOFEMPLOY="$(echo $position|awk -F ',' '{print $3}')" - -echo " " >> "$JobBoardMarkdownOutputFile" -echo "**$COMPANY | $TITLE | $DATEOFEMPLOY**" >> $JobBoardMarkdownOutputFile -echo " " >> "$JobBoardMarkdownOutputFile" - -echo "**$COMPANY | $TITLE | $DATEOFEMPLOY**" >> $ClientSubmissionMarkdownOutputFile -echo " " >> "$ClientSubmissionMarkdownOutputFile" - -echo " " >> "$JobBoardMarkdownOutputFile" -cat ../Templates/MarkdownResume/JobHistoryDetails/$COMPANY.md >> "$JobBoardMarkdownOutputFile" -echo " " >> "$JobBoardMarkdownOutputFile" - -cat ../Templates/MarkdownResume/JobHistoryDetails/$COMPANY.md >> "$ClientSubmissionMarkdownOutputFile" -echo " " >> "$ClientSubmissionMarkdownOutputFile" -done - -#Pull in my skills and generate a beautiful table. - -echo "\pagebreak" >> $JobBoardMarkdownOutputFile -echo " " >> "$JobBoardMarkdownOutputFile" -echo "## Skills" >> "$JobBoardMarkdownOutputFile" -echo " " >> "$JobBoardMarkdownOutputFile" - -echo "\pagebreak" >> $ClientSubmissionMarkdownOutputFile -echo " " >> "$ClientSubmissionMarkdownOutputFile" -echo "## Skills" >> "$ClientSubmissionMarkdownOutputFile" -echo " " >> "$ClientSubmissionMarkdownOutputFile" - -#Table heading -echo "|Skill|Experience|Skill Details|" >> $JobBoardMarkdownOutputFile -echo "|---|---|---|" >> $JobBoardMarkdownOutputFile - -echo "|Skill|Experience|Skill Details|" >> $ClientSubmissionMarkdownOutputFile -echo "|---|---|---|" >> $ClientSubmissionMarkdownOutputFile - -#Table rows -IFS=$'\n\t' -for skill in \ -$(cat ../Templates/MarkdownResume/SkillsAndProjects/Skills.csv); do -SKILL_NAME="$(echo $skill|awk -F '|' '{print $1}')" -SKILL_YEARS="$(echo $skill|awk -F '|' '{print $2}')" -SKILL_DETAIL="$(echo $skill|awk -F '|' '{print $3}')" -echo "|**$SKILL_NAME**|$SKILL_YEARS|$SKILL_DETAIL|" >> $JobBoardMarkdownOutputFile -echo "|**$SKILL_NAME**|$SKILL_YEARS|$SKILL_DETAIL|" >> $ClientSubmissionMarkdownOutputFile - -done -unset IFS - -echo "Generating PDF output for job board version..." - -pandoc \ -"$JobBoardMarkdownOutputFile" \ ---template eisvogel \ ---metadata-file="$BUILD_TEMP_DIR/JobBoard.yml" \ ---from markdown \ ---to=pdf \ ---output $JobBoardPDFOutputFile - -echo "Generating MSWord output for job board version..." - -pandoc \ -"$JobBoardMarkdownOutputFile" \ ---metadata-file="$BUILD_TEMP_DIR/JobBoard.yml" \ ---from markdown \ ---to=docx \ ---reference-doc=resume-docx-reference.docx \ ---output $JobBoardMSWordOutputFile - -echo "Generating PDF output for client submission version..." - -pandoc \ -"$ClientSubmissionMarkdownOutputFile" \ ---template eisvogel \ ---metadata-file="$BUILD_TEMP_DIR/ClientSubmission.yml" \ ---from markdown \ ---to=pdf \ ---output $ClientSubmissionPDFOutputFile - -echo "Generating MSWord output for client submission version..." - -pandoc \ -"$ClientSubmissionMarkdownOutputFile" \ ---metadata-file="$BUILD_TEMP_DIR/ClientSubmission.yml" \ ---from markdown \ ---to=docx \ ---reference-doc=resume-docx-reference.docx \ ---output $ClientSubmissionMSWordOutputFile \ No newline at end of file diff --git a/build/build-pipeline-server.sh b/build/build-pipeline-server-markdown.sh similarity index 76% rename from build/build-pipeline-server.sh rename to build/build-pipeline-server-markdown.sh index 310846e..2eb3f92 100644 --- a/build/build-pipeline-server.sh +++ b/build/build-pipeline-server-markdown.sh @@ -41,32 +41,32 @@ pandoc \ echo "Combining markdown files into single input file for pandoc..." # Create contact info md file -$MO_PATH $PipelineClientWorkingDir/Templates/ContactInfo/ContactInfo-JobBoard.md > $BUILD_TEMP_DIR/ContactInfo-JobBoard.md -$MO_PATH $PipelineClientWorkingDir/Templates/ContactInfo/ContactInfo-ClientSubmit.md > $BUILD_TEMP_DIR/ContactInfo-ClientSubmit.md +$MO_PATH "$PipelineClientWorkingDir/Templates/ContactInfo/ContactInfo-JobBoard.md" > "$BUILD_TEMP_DIR/ContactInfo-JobBoard.md" +$MO_PATH "$PipelineClientWorkingDir/Templates/ContactInfo/ContactInfo-ClientSubmit.md" > "$BUILD_TEMP_DIR/ContactInfo-ClientSubmit.md" #Pull in contact info -cat $BUILD_TEMP_DIR/ContactInfo-JobBoard.md >> $JobBoardMarkdownOutputFile -echo " " >> $JobBoardMarkdownOutputFile +cat $BUILD_TEMP_DIR/ContactInfo-JobBoard.md >> "$JobBoardMarkdownOutputFile" +echo " " >> "$JobBoardMarkdownOutputFile" cat $BUILD_TEMP_DIR/ContactInfo-ClientSubmit.md >> $ClientSubmissionMarkdownOutputFile -echo " " >> $ClientSubmissionMarkdownOutputFile +echo " " >> "$ClientSubmissionMarkdownOutputFile" -echo "## Career Highlights" >> $JobBoardMarkdownOutputFile -echo "## Career Highlights" >> $ClientSubmissionMarkdownOutputFile +echo "## Career Highlights" >> "$JobBoardMarkdownOutputFile" +echo "## Career Highlights" >> "$ClientSubmissionMarkdownOutputFile" -cat $PipelineClientWorkingDir/Templates/SkillsAndProjects/Projects.md >> $JobBoardMarkdownOutputFile +cat $PipelineClientWorkingDir/Templates/SkillsAndProjects/Projects.md >> "$JobBoardMarkdownOutputFile" echo "\pagebreak" >> $JobBoardMarkdownOutputFile -cat $PipelineClientWorkingDir/Templates/SkillsAndProjects/Projects.md >> $ClientSubmissionMarkdownOutputFile -echo "\pagebreak" >> $ClientSubmissionMarkdownOutputFile +cat $PipelineClientWorkingDir/Templates/SkillsAndProjects/Projects.md >> "$ClientSubmissionMarkdownOutputFile" +echo "\pagebreak" >> "$ClientSubmissionMarkdownOutputFile" -echo " " >> $JobBoardMarkdownOutputFile -echo "## Employment History" >> $JobBoardMarkdownOutputFile -echo " " >> $JobBoardMarkdownOutputFile +echo " " >> "$JobBoardMarkdownOutputFile" +echo "## Employment History" >> "$JobBoardMarkdownOutputFile" +echo " " >> "$JobBoardMarkdownOutputFile" -echo " " >> $ClientSubmissionMarkdownOutputFile -echo "## Employment History" >> $ClientSubmissionMarkdownOutputFile -echo " " >> $ClientSubmissionMarkdownOutputFile +echo " " >> "$ClientSubmissionMarkdownOutputFile" +echo "## Employment History" >> "$ClientSubmissionMarkdownOutputFile" +echo " " >> "$ClientSubmissionMarkdownOutputFile" #And here we do some magic... #Pull in : @@ -101,12 +101,12 @@ done #Pull in my skills and generate a beautiful table. -echo "\pagebreak" >> $JobBoardMarkdownOutputFile +echo "\pagebreak" >> "$JobBoardMarkdownOutputFile" echo " " >> "$JobBoardMarkdownOutputFile" echo "## Skills" >> "$JobBoardMarkdownOutputFile" echo " " >> "$JobBoardMarkdownOutputFile" -echo "\pagebreak" >> $ClientSubmissionMarkdownOutputFile +echo "\pagebreak" >> "$ClientSubmissionMarkdownOutputFile" echo " " >> "$ClientSubmissionMarkdownOutputFile" echo "## Skills" >> "$ClientSubmissionMarkdownOutputFile" echo " " >> "$ClientSubmissionMarkdownOutputFile" @@ -125,8 +125,8 @@ $(cat $PipelineClientWorkingDir/Templates/SkillsAndProjects/Skills.csv); do SKILL_NAME="$(echo $skill|awk -F '|' '{print $1}')" SKILL_YEARS="$(echo $skill|awk -F '|' '{print $2}')" SKILL_DETAIL="$(echo $skill|awk -F '|' '{print $3}')" -echo "|**$SKILL_NAME**|$SKILL_YEARS|$SKILL_DETAIL|" >> $JobBoardMarkdownOutputFile -echo "|**$SKILL_NAME**|$SKILL_YEARS|$SKILL_DETAIL|" >> $ClientSubmissionMarkdownOutputFile +echo "|**$SKILL_NAME**|$SKILL_YEARS|$SKILL_DETAIL|" >> "$JobBoardMarkdownOutputFile" +echo "|**$SKILL_NAME**|$SKILL_YEARS|$SKILL_DETAIL|" >> "$ClientSubmissionMarkdownOutputFile" done unset IFS @@ -139,7 +139,7 @@ pandoc \ --metadata-file="$PipelineClientWorkingDir/build-temp/JobBoard.yml" \ --from markdown \ --to=pdf \ ---output $JobBoardPDFOutputFile +--output "$JobBoardPDFOutputFile" echo "Generating MSWord output for job board version..." @@ -149,7 +149,7 @@ pandoc \ --from markdown \ --to=docx \ --reference-doc="$PipelineClientWorkingDir/build/resume-docx-reference.docx" \ ---output $JobBoardMSWordOutputFile +--output "$JobBoardMSWordOutputFile" echo "Generating PDF output for client submission version..." @@ -159,7 +159,7 @@ pandoc \ --metadata-file="$PipelineClientWorkingDir/build-temp/ClientSubmission.yml" \ --from markdown \ --to=pdf \ ---output $ClientSubmissionPDFOutputFile +--output "$ClientSubmissionPDFOutputFile" echo "Generating MSWord output for client submission version..." @@ -169,7 +169,7 @@ pandoc \ --from markdown \ --to=docx \ --reference-doc="$PipelineClientWorkingDir/build/resume-docx-reference.docx" \ ---output $ClientSubmissionMSWordOutputFile +--output "$ClientSubmissionMSWordOutputFile" diff --git a/build/resume-docx-reference.docx b/build/resume-docx-reference.docx deleted file mode 100644 index f631233c87107679084ef87ae526a99832f938e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16716 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