From 9555692b51c3ec6615febd616faa09744325183a Mon Sep 17 00:00:00 2001 From: Charles N Wyble Date: Fri, 13 Dec 2024 13:01:31 -0600 Subject: [PATCH] Squashed 'vendor/git.knownelement.com/reachableceo/MarkdownResume-Pipeline/' changes from 7454bad..1d37671 1d37671 refactor... d617700 refactor... 659ed76 refactor... a62bcb3 refactor... 4665979 refactor... aa9a9a9 refactor... 9e97af3 refactor... d9ef630 refactor... 171eb46 refactor... 1fba3a2 refactor... 5bb19c8 more refactor bits c5b5557 True client/server refactor . 5c63ee2 True client/server refactor 7d70e0e json refactor 97fff83 json resume skeleton coming together 7f7f284 merged various additional candidate fields from the json to markdown. going to use chatgpt for the csv/json bits . f734bc7 starting work on json resume output for use with reactive resume and fluentcv git-subtree-dir: vendor/git.knownelement.com/reachableceo/MarkdownResume-Pipeline git-subtree-split: 1d37671cfa9e4b56894d66bb6d4f96e4626613c2 --- .gitignore | 11 +- .../CandidateInfoSheet/CandidateInfoSheet.md | 121 -------- .../ContactInfo/ContactInfo-ClientSubmit.md | 4 - Templates/ContactInfo/ContactInfo-JobBoard.md | 6 - Templates/JobHistoryDetails/job1.md | 3 - Templates/JobHistoryDetails/job2.md | 3 - Templates/SkillsAndProjects/Projects.md | 2 - Templates/SkillsAndProjects/Skills.csv | 2 - Templates/WorkHistory/WorkHistory.csv | 2 - build-output/CandidateInfoSheet.md | 121 -------- .../client-submission/ignore-this-dir | 1 - build-output/ignore-this-dir | 1 - build-output/job-board/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/background3.pdf | Bin 1051 -> 0 bytes build/build-demo.sh | 268 ------------------ build/build-pipeline-server-markdown.sh | 156 ++++++++++ build/build-pipeline-server.sh | 168 ----------- build/resume-docx-reference.docx | Bin 16716 -> 0 bytes 22 files changed, 158 insertions(+), 746 deletions(-) delete mode 100644 Templates/CandidateInfoSheet/CandidateInfoSheet.md delete mode 100644 Templates/ContactInfo/ContactInfo-ClientSubmit.md delete mode 100644 Templates/ContactInfo/ContactInfo-JobBoard.md delete mode 100644 Templates/JobHistoryDetails/job1.md delete mode 100644 Templates/JobHistoryDetails/job2.md delete mode 100644 Templates/SkillsAndProjects/Projects.md delete mode 100644 Templates/SkillsAndProjects/Skills.csv delete mode 100644 Templates/WorkHistory/WorkHistory.csv delete mode 100644 build-output/CandidateInfoSheet.md delete mode 100644 build-output/client-submission/ignore-this-dir delete mode 100644 build-output/ignore-this-dir delete mode 100644 build-output/job-board/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/background3.pdf delete mode 100644 build/build-demo.sh create mode 100644 build/build-pipeline-server-markdown.sh delete mode 100644 build/build-pipeline-server.sh delete mode 100644 build/resume-docx-reference.docx diff --git a/.gitignore b/.gitignore index 9f120dc..6b28708 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,2 @@ -build-output/client-submission/*.md -build-output/client-submission/*.pdf -build-output/client-submission/*.doc -build-output/CandidateInfoSheet* -build-output/job-board/*.md -build-output/job-board/*.pdf -build-output/job-board/*.doc -build-temp/*.yml -build-temp/*.md \ No newline at end of file +build-output/* +build-temp/* \ No newline at end of file diff --git a/Templates/CandidateInfoSheet/CandidateInfoSheet.md b/Templates/CandidateInfoSheet/CandidateInfoSheet.md deleted file mode 100644 index fc72c97..0000000 --- a/Templates/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/ContactInfo/ContactInfo-ClientSubmit.md b/Templates/ContactInfo/ContactInfo-ClientSubmit.md deleted file mode 100644 index 0ea8fe7..0000000 --- a/Templates/ContactInfo/ContactInfo-ClientSubmit.md +++ /dev/null @@ -1,4 +0,0 @@ -{{CandidateName}} -===== - -{{CandidateOneLinerSummary}} diff --git a/Templates/ContactInfo/ContactInfo-JobBoard.md b/Templates/ContactInfo/ContactInfo-JobBoard.md deleted file mode 100644 index 853936b..0000000 --- a/Templates/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/JobHistoryDetails/job1.md b/Templates/JobHistoryDetails/job1.md deleted file mode 100644 index f622b8d..0000000 --- a/Templates/JobHistoryDetails/job1.md +++ /dev/null @@ -1,3 +0,0 @@ -- Stuff -- Things -- Amazing project! \ No newline at end of file diff --git a/Templates/JobHistoryDetails/job2.md b/Templates/JobHistoryDetails/job2.md deleted file mode 100644 index f622b8d..0000000 --- a/Templates/JobHistoryDetails/job2.md +++ /dev/null @@ -1,3 +0,0 @@ -- Stuff -- Things -- Amazing project! \ No newline at end of file diff --git a/Templates/SkillsAndProjects/Projects.md b/Templates/SkillsAndProjects/Projects.md deleted file mode 100644 index baa1cb6..0000000 --- a/Templates/SkillsAndProjects/Projects.md +++ /dev/null @@ -1,2 +0,0 @@ -- Cool project 1. -- cool project 2. diff --git a/Templates/SkillsAndProjects/Skills.csv b/Templates/SkillsAndProjects/Skills.csv deleted file mode 100644 index c689f34..0000000 --- a/Templates/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/WorkHistory/WorkHistory.csv b/Templates/WorkHistory/WorkHistory.csv deleted file mode 100644 index 99bc7dd..0000000 --- a/Templates/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/build-output/CandidateInfoSheet.md b/build-output/CandidateInfoSheet.md deleted file mode 100644 index 193a363..0000000 --- a/build-output/CandidateInfoSheet.md +++ /dev/null @@ -1,121 +0,0 @@ -# First Middle Last 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 **Place 1/Place 2** 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 1,987.11** 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): - -- **$12.34** per hour(w2) -- **$123,456.00** annually -- **$56.78** per hour (1099/corp to corp) - -I have a strong preference for roles that are : - -- **$34.56** per hour(w2) or more -- **$321,987.00** annually or more -- **$78.90** per hour (1099/corp to corp) or more - -### On-site/hybrid roles - -- **$34.56** per hour(w2) or more -- **$321,987.00** annually or more -- **$78.90** 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 | First Middle Last | -| E-mail address | | -| Phone number | 1 123 456 7890 | -| Preferred form of contact | Email will get the fastest response. | -| Work authorization | US Citizen | -| Are you employed presently? | Not currently employed | -| Current location | City,State,Country etc | -| Current timezone | Timezone | -| Timezones I can work in | Timezones | -| Availability to interview | Sometime | -| Availability to start | Sometime | -| Highest Education | Some education level | -| Graduated Year | Graduation year | -| Name of school | School name | -| Location of school | School location | -| Linkedin Profile | (https://www.linkedin.com/) | -| Github Profile | (https://www.github.com/) | -| Last project | Last project | -| DOB | MM/DD | -| Total IT/career experience | epoch | -| Open to in-office/hybrid/remote | Yes | -| Any trips planned in next six months? | No | diff --git a/build-output/client-submission/ignore-this-dir b/build-output/client-submission/ignore-this-dir deleted file mode 100644 index a916f39..0000000 --- a/build-output/client-submission/ignore-this-dir +++ /dev/null @@ -1 +0,0 @@ -This directory is used by the build process. Ignore it. \ No newline at end of file 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-output/job-board/ignore-this-dir b/build-output/job-board/ignore-this-dir deleted file mode 100644 index a916f39..0000000 --- a/build-output/job-board/ignore-this-dir +++ /dev/null @@ -1 +0,0 @@ -This directory is used by the build process. Ignore it. \ 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/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 $BUILDYAML_CANDIDATEINFOSHEET -$MO_PATH ./BuildTemplate-JobBoard.yml > $BUILDYAML_JOBBOARD -$MO_PATH ./BuildTemplate-ClientSubmission.yml > $BUILDYAML_CLIENTSUBMISSION - -echo "Creating candidate info sheet..." - -$MO_PATH ../Templates/CandidateInfoSheet/CandidateInfoSheet.md > $CandidateInfoSheetMarkdownOutputFile - -pandoc \ -"$CandidateInfoSheetMarkdownOutputFile" \ ---template eisvogel \ ---metadata-file="../build-temp/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/ContactInfo/ContactInfo-JobBoard.md > $BUILD_TEMP_DIR/ContactInfo-JobBoard.md -$MO_PATH ../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-ClientSubmit.md >> $ClientSubmissionMarkdownOutputFile -echo " " >> $ClientSubmissionMarkdownOutputFile - -echo "## Career Highlights" >> $JobBoardMarkdownOutputFile -echo "## Career Highlights" >> $ClientSubmissionMarkdownOutputFile - -cat ../Templates/SkillsAndProjects/Projects.md >> $JobBoardMarkdownOutputFile -echo "\pagebreak" >> $JobBoardMarkdownOutputFile - -cat ../Templates/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/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/JobHistoryDetails/$COMPANY.md >> "$JobBoardMarkdownOutputFile" -echo " " >> "$JobBoardMarkdownOutputFile" - -cat ../Templates/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/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/JobBoard.yml" \ ---from markdown \ ---to=pdf \ ---output $JobBoardPDFOutputFile - -echo "Generating MSWord output for job board version..." - -pandoc \ -"$JobBoardMarkdownOutputFile" \ ---metadata-file="../build-temp/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/ClientSubmission.yml" \ ---from markdown \ ---to=pdf \ ---output $ClientSubmissionPDFOutputFile - -echo "Generating MSWord output for client submission version..." - -pandoc \ -"$ClientSubmissionMarkdownOutputFile" \ ---metadata-file="../build-temp/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-markdown.sh b/build/build-pipeline-server-markdown.sh new file mode 100644 index 0000000..25162c0 --- /dev/null +++ b/build/build-pipeline-server-markdown.sh @@ -0,0 +1,156 @@ +#!/usr/bin/env bash + +##################################################################################################### +#Markdown to PDF/MSWord Resumek and candidate info sheet +##################################################################################################### + +# Expand variables into rendered YAML files. These will be used by pandoc to create the output artifacts + +$MO_PATH $PipelineClientWorkingDir/build/BuildTemplate-CandidateInfoSheet.yml > $BUILDYAML_CANDIDATEINFOSHEET +$MO_PATH $PipelineClientWorkingDir/build/BuildTemplate-JobBoard.yml > $BUILDYAML_JOBBOARD +$MO_PATH $PipelineClientWorkingDir/build/BuildTemplate-ClientSubmission.yml > $BUILDYAML_CLIENTSUBMISSION + +echo "Creating candidate info sheet..." + +$MO_PATH $PipelineClientWorkingDir/Templates/MarkdownResume/CandidateInfoSheet/CandidateInfoSheet.md > "$CandidateInfoSheetMarkdownOutputFile" + +pandoc \ +"$CandidateInfoSheetMarkdownOutputFile" \ +--template eisvogel \ +--metadata-file="$PipelineClientWorkingDir/build-temp/MarkdownResume/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 "$PipelineClientWorkingDir/Templates/MarkdownResume/ContactInfo/ContactInfo-JobBoard.md" > "$BUILD_TEMP_DIR/ContactInfo-JobBoard.md" +$MO_PATH "$PipelineClientWorkingDir/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 "$PipelineClientWorkingDir/Templates/MarkdownResume/SkillsAndProjects/Projects.md" >> "$JobBoardMarkdownOutputFile" +echo "\pagebreak" >> "$JobBoardMarkdownOutputFile" + +cat "$PipelineClientWorkingDir/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 "$PipelineClientWorkingDir/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 "$PipelineClientWorkingDir/Templates/MarkdownResume/JobHistoryDetails/$COMPANY.md" >> "$JobBoardMarkdownOutputFile" +echo " " >> "$JobBoardMarkdownOutputFile" + +cat "$PipelineClientWorkingDir/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 "$PipelineClientWorkingDir/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="$PipelineClientWorkingDir/build-temp/MarkdownResume/JobBoard.yml" \ +--from markdown \ +--to=pdf \ +--output "$JobBoardPDFOutputFile" + +echo "Generating MSWord output for job board version..." + +pandoc \ +"$JobBoardMarkdownOutputFile" \ +--metadata-file="$PipelineClientWorkingDir/build-temp/MarkdownResume/JobBoard.yml" \ +--from markdown \ +--to=docx \ +--reference-doc="$PipelineClientWorkingDir/build/resume-docx-reference.docx" \ +--output "$JobBoardMSWordOutputFile" + +echo "Generating PDF output for client submission version..." + +pandoc \ +"$ClientSubmissionMarkdownOutputFile" \ +--template eisvogel \ +--metadata-file="$PipelineClientWorkingDir/build-temp/MarkdownResume/ClientSubmission.yml" \ +--from markdown \ +--to=pdf \ +--output "$ClientSubmissionPDFOutputFile" + +echo "Generating MSWord output for client submission version..." + +pandoc \ +"$ClientSubmissionMarkdownOutputFile" \ +--metadata-file="$PipelineClientWorkingDir/build-temp/MarkdownResume/ClientSubmission.yml" \ +--from markdown \ +--to=docx \ +--reference-doc="$PipelineClientWorkingDir/build/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.sh deleted file mode 100644 index 9402c52..0000000 --- a/build/build-pipeline-server.sh +++ /dev/null @@ -1,168 +0,0 @@ -#!/usr/bin/env bash - -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 $PipelineClientWorkingDir/build/BuildTemplate-CandidateInfoSheet.yml > $BUILDYAML_CANDIDATEINFOSHEET -$MO_PATH $PipelineClientWorkingDir/build/BuildTemplate-JobBoard.yml > $BUILDYAML_JOBBOARD -$MO_PATH $PipelineClientWorkingDir/build/BuildTemplate-ClientSubmission.yml > $BUILDYAML_CLIENTSUBMISSION - -echo "Creating candidate info sheet..." - -$MO_PATH $PipelineClientWorkingDir/Templates/CandidateInfoSheet/CandidateInfoSheet.md > $CandidateInfoSheetMarkdownOutputFile - -pandoc \ -"$CandidateInfoSheetMarkdownOutputFile" \ ---template eisvogel \ ---metadata-file="$PipelineClientWorkingDir/build-temp/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 $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-ClientSubmit.md >> $ClientSubmissionMarkdownOutputFile -echo " " >> $ClientSubmissionMarkdownOutputFile - -echo "## Career Highlights" >> $JobBoardMarkdownOutputFile -echo "## Career Highlights" >> $ClientSubmissionMarkdownOutputFile - -cat $PipelineClientWorkingDir/Templates/SkillsAndProjects/Projects.md >> $JobBoardMarkdownOutputFile -echo "\pagebreak" >> $JobBoardMarkdownOutputFile - -cat $PipelineClientWorkingDir/Templates/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 $PipelineClientWorkingDir/Templates/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 $PipelineClientWorkingDir/Templates/JobHistoryDetails/$COMPANY.md >> "$JobBoardMarkdownOutputFile" -echo " " >> "$JobBoardMarkdownOutputFile" - -cat $PipelineClientWorkingDir/Templates/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 $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 - -done -unset IFS - -echo "Generating PDF output for job board version..." - -pandoc \ -"$JobBoardMarkdownOutputFile" \ ---template eisvogel \ ---metadata-file="$PipelineClientWorkingDir/build-temp/JobBoard.yml" \ ---from markdown \ ---to=pdf \ ---output $JobBoardPDFOutputFile - -echo "Generating MSWord output for job board version..." - -pandoc \ -"$JobBoardMarkdownOutputFile" \ ---metadata-file="$PipelineClientWorkingDir/build-temp/JobBoard.yml" \ ---from markdown \ ---to=docx \ ---reference-doc="$PipelineClientWorkingDir/build/resume-docx-reference.docx" \ ---output $JobBoardMSWordOutputFile - -echo "Generating PDF output for client submission version..." - -pandoc \ -"$ClientSubmissionMarkdownOutputFile" \ ---template eisvogel \ ---metadata-file="$PipelineClientWorkingDir/build-temp/ClientSubmission.yml" \ ---from markdown \ ---to=pdf \ ---output $ClientSubmissionPDFOutputFile - -echo "Generating MSWord output for client submission version..." - -pandoc \ -"$ClientSubmissionMarkdownOutputFile" \ ---metadata-file="$PipelineClientWorkingDir/build-temp/ClientSubmission.yml" \ ---from markdown \ ---to=docx \ ---reference-doc="$PipelineClientWorkingDir/build/resume-docx-reference.docx" \ ---output $ClientSubmissionMSWordOutputFile \ No newline at end of file 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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