[{"data":1,"prerenderedAt":188},["ShallowReactive",2],{"post-2023-08-26-automating-my-github-profile-with-dev-os-a-journey":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"published":10,"summary":11,"draft":6,"image":12,"categories":13,"tags":15,"showAuthor":6,"authors":18,"showAuthorsBadges":6,"body":20,"_type":182,"_id":183,"_source":184,"_file":185,"_stem":186,"_extension":187},"/posts/2023-08-26-automating-my-github-profile-with-dev-os-a-journey","posts",false,"","Automating My GitHub Profile with DevOps: A Journey","With the power of modern DevOps practices, I embarked on a journey to automate the creation of my GitHub \"About Me\" section. By harnessing the capabilities of a quick Node.js script and a GitHub Action, I successfully extracted information from various online sources to generate a Markdown file in just about an hour and a half.","2023-08-26T20:23:00-00:00","Learn how I automated my GitHub profile's \"About Me\" section using DevOps practices, Node.js scripts, and GitHub Actions. Discover the journey, challenges, and tools I employed to streamline this process.","/2023-08-26-automating-my-github-profile-with-dev-os-a-journey.png",[14],"Technology",[16,17],"DevOps","GitHub Actions",[19],"sean",{"type":21,"children":22,"toc":179},"root",[23,30,64,91,114,128,148],{"type":24,"tag":25,"props":26,"children":27},"element","p",{},[28],{"type":29,"value":9},"text",{"type":24,"tag":25,"props":31,"children":32},{},[33,35,44,46,53,55,62],{"type":29,"value":34},"My inspiration sprang from a ",{"type":24,"tag":36,"props":37,"children":41},"a",{"href":38,"rel":39},"https://www.meetup.com/dotnetnorth/events/294020000/",[40],"nofollow",[42],{"type":29,"value":43},"Meetup event",{"type":29,"value":45}," organized by ",{"type":24,"tag":36,"props":47,"children":50},{"href":48,"rel":49},"https://www.meetup.com/dotnetnorth/",[40],[51],{"type":29,"value":52},"Dot Net North",{"type":29,"value":54}," on the topic of automating tasks with GitHub. The event featured a talk by ",{"type":24,"tag":36,"props":56,"children":59},{"href":57,"rel":58},"https://twitter.com/SimonDarksideJ",[40],[60],{"type":29,"value":61},"Simon Jackson",{"type":29,"value":63},", which emphasized leveraging GitHub Actions beyond development, even to trigger consumer IoT devices. This talk made me reconsider the non-development applications of GitHub Actions.",{"type":24,"tag":65,"props":66,"children":67},"blockquote",{},[68],{"type":24,"tag":25,"props":69,"children":70},{},[71,73,80,82,89],{"type":29,"value":72},"As I found myself repeatedly updating values within my ",{"type":24,"tag":36,"props":74,"children":77},{"href":75,"rel":76},"https://github.com/Sean12697/Sean12697",[40],[78],{"type":29,"value":79},"GitHub profile's 'About Me' repository",{"type":29,"value":81},", prompted by my recent volunteering at beer festivals, I questioned the need for duplicating these updates. After all, I already maintain my ",{"type":24,"tag":36,"props":83,"children":86},{"href":84,"rel":85},"https://www.polywork.com/sean12697/collections/1081961",[40],[87],{"type":29,"value":88},"Polywork profile collection",{"type":29,"value":90}," with the same information.",{"type":24,"tag":25,"props":92,"children":93},{},[94,96,103,105,112],{"type":29,"value":95},"This self-inquiry led me to identify three values that could be automated and incorporated into a markdown file: the count of hackathons I've participated in, the number of beers I've checked in on Untappd, and the tally of beer festivals I've volunteered at. While the ",{"type":24,"tag":36,"props":97,"children":100},{"href":98,"rel":99},"https://untappd.com/api/docs",[40],[101],{"type":29,"value":102},"Untappd API",{"type":29,"value":104}," served as the data source for one value, the other two required me to utilize the ",{"type":24,"tag":36,"props":106,"children":109},{"href":107,"rel":108},"https://cheerio.js.org/",[40],[110],{"type":29,"value":111},"Cheerio",{"type":29,"value":113}," Node.js package for web scraping.",{"type":24,"tag":25,"props":115,"children":116},{},[117,119,126],{"type":29,"value":118},"Creating a JavaScript script for this purpose was relatively straightforward. Defining the correct query selectors for Polywork's collections proved to be a minor task, and integrating with an API was particularly seamless, thanks to the request Node.js example code provided by ",{"type":24,"tag":36,"props":120,"children":123},{"href":121,"rel":122},"https://www.postman.com/",[40],[124],{"type":29,"value":125},"Postman",{"type":29,"value":127},".",{"type":24,"tag":25,"props":129,"children":130},{},[131,133,140,142,147],{"type":29,"value":132},"After extracting these values and consolidating them within a local markdown file, my focus shifted to implementing the GitHub Action workflow. Fortunately, I had prior experience in creating a GitHub Action script to detect repository updates, execute custom JavaScript scripts, and transfer resulting files between repositories. While the initial use case was for generating anonymized data for the ",{"type":24,"tag":36,"props":134,"children":137},{"href":135,"rel":136},"https://data.compiledmcr.com/",[40],[138],{"type":29,"value":139},"Manchester Tech Meetup Data repository",{"type":29,"value":141},", I adapted and modified this script to suit my current goal: updating my ",{"type":24,"tag":36,"props":143,"children":145},{"href":75,"rel":144},[40],[146],{"type":29,"value":79},{"type":29,"value":127},{"type":24,"tag":25,"props":149,"children":150},{},[151,153,160,162,169,171,178],{"type":29,"value":152},"To delve deeper into my coding journey, you can explore the ",{"type":24,"tag":36,"props":154,"children":157},{"href":155,"rel":156},"https://github.com/Sean12697/Sean12697-generator/commits/main",[40],[158],{"type":29,"value":159},"commits of the generation repository",{"type":29,"value":161},", the successful ",{"type":24,"tag":36,"props":163,"children":166},{"href":164,"rel":165},"https://github.com/Sean12697/Sean12697-generator/actions/runs/5987063935/job/16240867548",[40],[167],{"type":29,"value":168},"GitHub Action Run",{"type":29,"value":170},", and the corresponding ",{"type":24,"tag":36,"props":172,"children":175},{"href":173,"rel":174},"https://github.com/Sean12697/Sean12697/commit/1664b07fdaecc9cc95ed86cc3418665a4106e3ee",[40],[176],{"type":29,"value":177},"commit in my GitHub profile's 'About Me' repository",{"type":29,"value":127},{"title":7,"searchDepth":180,"depth":180,"links":181},2,[],"markdown","content:posts:2023-08-26-automating-my-gitHub-profile-with-dev-os-a-journey.md","content","posts/2023-08-26-automating-my-gitHub-profile-with-dev-os-a-journey.md","posts/2023-08-26-automating-my-gitHub-profile-with-dev-os-a-journey","md",1779024901973]