DEV Community

loading...
Cover image for Show your latest dev.to posts automatically on your GitHub profile readme

Show your latest dev.to posts automatically on your GitHub profile readme

Gautam krishna R
Software Engineer at Red Hat | Open source maintainer & contributor | DuckDuckGo Community Leader | Polyglot
Updated on ・8 min read

I just created a GitHub Action that lets you add links to your latest blog posts from Dev.to and other sources to your Github Profile readme automatically.

Check it out if you want a readme like this:
Preview

Project on GitHub: https://github.com/gautamkrishnar/blog-post-workflow
Example readme: https://github.com/gautamkrishnar

Demo video

How to use

  • Star this repo 😉
  • Go to your repository
  • Add the following section to your README.md file, you can give whatever title you want. Just make sure that you use <!-- BLOG-POST-LIST:START --><!-- BLOG-POST-LIST:END --> in your readme. The workflow will replace this comment with the actual blog post list:
# Blog posts
<!-- BLOG-POST-LIST:START -->
<!-- BLOG-POST-LIST:END -->
Enter fullscreen mode Exit fullscreen mode
  • Create a folder named .github and create a workflows folder inside it if it doesn't exist.
  • Create a new file named blog-post-workflow.yml with the following contents inside the workflows folder:
name: Latest blog post workflow
on:
  schedule: # Run workflow automatically
    - cron: '0 * * * *' # Runs every hour, on the hour
  workflow_dispatch: # Run workflow manually (without waiting for the cron to be called), through the Github Actions Workflow page directly
jobs:
  update-readme-with-blog:
    name: Update this repo's README with latest blog posts
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: gautamkrishnar/blog-post-workflow@master
        with:
          feed_list: "https://dev.to/feed/gautamkrishnar,https://www.gautamkrishnar.com/feed/"
Enter fullscreen mode Exit fullscreen mode
  • Replace the above url list with your own rss feed urls. See popular-sources for a list of common RSS feed urls.
  • Commit and wait for it to run automatically or you can also trigger it manually to see the result instantly. To trigger the workflow manually, please follow the steps in the video.

Options

This workflow has additional options that you can use to customize it for your use case. The following are the list of options available:

Option Default Value Description Required
feed_list "" Comma-separated list of RSS feed urls, eg: https://example1.com,https://example2.com Yes
max_post_count 5 Maximum number of posts you want to show on your readme, all feeds combined No
readme_path ./README.md Path of the readme file you want to update No
gh_token your GitHub token with repo scope Use this to configure the token of the user that commits the workflow result to GitHub No
comment_tag_name BLOG-POST-LIST Allows you to override the default comment tag name (<!-- BLOG-POST-LIST:START --><!-- BLOG-POST-LIST:END -->), if you want to show multiple instances of the action on the same repo, see advanced usage for more info No
disable_sort false Disables the sorting of the list based on publish date No
template default Allows you to change the structure of the posts list by using different variables. By default this workflow uses markdown list format to render the posts, you can override this behavior using this option. Eg: [$title]($url) will give you a space-separated list of posts.

Supported variables
  • $title: Title of the post
  • $url: URL of the post
  • $description: Description of the post
  • $newline: Inserts a newline
  • $date: Inserts the post date based on the date_format specified
  • $randomEmoji: Allow you to use random emojis in the post, pass emojis as the parameter to chose one of it randomly in each post item. Eg: $randomEmoji(💯,🔥,💫,🚀,🌮). See the issue comment for more details
  • $emojiKey: You can use this argument to show emojis on each of your post item sequentially in the order you specify. Example: $emojiKey(💯,🔥,💫). See the issue comment for more details
No
date_format UTC:ddd mmm dd yyyy h:MM TT Allows you to change the format of the date or time displayed when using the $date in the template option. This uses NPM dateformat library, please read the library documentation for the supported formats No
user_agent rss-parser Allows you to customize the user agent used by the RSS feed crawler No
accept_header application/rss+xml Allows you to customize the accept header of the http requests No
tag_post_pre_newline true if you are not using template option Allows you to insert a newline before the closing tag and after the opening tag when using the template option if needed, for better formatting No
filter_comments medium,stackoverflow/Comment by $author/,stackexchange/Comment by $author/ Comma separated list of platforms you want to enable the comment filter.

Available filters
  • medium: Allows you to filter out the Medium comments. Known issue: #37
  • stackoverflow/Comment by $author/: Allows you to filter out the StackOverflow comments. Argument to this filter is optional, it defaults to 'Comment by $author'. If you use any language other than English on StackOverflow, you can use this argument to customize it. See #16 for more info.
  • stackexchange/Comment by $author/: Allows you to filter out the StackExchange comments. Argument to this filter follows the same format as stackoverflow filter's argument.
No
custom_tags "" Allows you to use the custom tags from your feed items in your template. Format: variableName/tagName/,variableName/tagName/. Please see the issue comment for more details No
title_max_length "" Allows you to trim the title in the posts list, excess text will be appended with an ellipsis ... No
description_max_length "" Allows you to trim the description in the posts list, excess text will be appended with an ellipsis ... No
item_exec "" Allows you to execute custom JavaScript code on each post item fetched from the xml to do advanced text manipulation. Please see the issue comment as an example No
commit_message Updated with the latest blog posts Allows you to customize the commit message No
committer_username blog-post-bot Allows you to customize the committer username No
committer_email blog-post-bot@example.com Allows you to customize the committer email No
output_only false Sets the generated array as results output variable so that it can be consumed in other actions and parsed via utilities like jq. This will also prevent committing to readme. See #51 for more details about the output format and how to use it. No
enable_keepalive true Workflow will automatically do a dummy commit to keep the repository active if there is no commit activity for the last 50 days. GitHub will stop running all cron based triggers if the repository is not active for more than 60 days. This flag allows you to disable this feature. See #53 for more details. No
retry_count 0 Maximum number of times to retry the fetch operation if it fails, See #66 for more details. No
retry_wait_time 1 Time to wait before each retry operation in seconds. No

Advanced usage examples

StackOverflow example

The following configuration allows you to show your latest StackOverflow activity along with your latest blog posts in the Github profile or project readme:

  • Follow the steps mentioned in the how to use section
  • Add the following section to your README.md file, you can give whatever title you want. Just make sure that you use <!-- STACKOVERFLOW:START --><!-- STACKOVERFLOW:END --> in your readme. The workflow will replace this comment with the actual StackOverflow activity:
# StackOverflow Activity
<!-- STACKOVERFLOW:START -->
<!-- STACKOVERFLOW:END -->
Enter fullscreen mode Exit fullscreen mode
  • Create stack-overflow-workflow.yml in your workflows folder with the following contents, replace 4214976 with your StackOverflow user id:
name: Latest stack overflow activity
on:
  schedule:
    # Runs every 5 minutes
    - cron: '*/5 * * * *'
  workflow_dispatch:
jobs:
  update-readme-with-stack-overflow:
    name: Update this repo's README with latest activity from StackOverflow
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: gautamkrishnar/blog-post-workflow@master
        with:
          comment_tag_name: "STACKOVERFLOW"
          commit_message: "Updated readme with the latest stackOverflow data"
          feed_list: "https://stackoverflow.com/feeds/user/4214976"
Enter fullscreen mode Exit fullscreen mode

See the result!

advanced

Popular Sources

Following are the list of some popular blogging platforms and their RSS feed urls:

Name Feed URL Comments Example
Dev.to https://dev.to/feed/username Replace username with your own username https://dev.to/feed/gautamkrishnar
Wordpress https://www.example.com/feed/ Replace with your own blog url https://www.gautamkrishnar.com/feed/
Medium https://medium.com/feed/@username Replace @username with your Medium username https://medium.com/feed/@khaosdoctor
Medium (Sub Domain) https://username.medium.com/feed Replace username with your Medium username https://timsneath.medium.com/feed
Stackoverflow https://stackoverflow.com/feeds/user/userid Replace with your StackOverflow UserId https://stackoverflow.com/feeds/user/5283532
StackExchange https://subdomain.stackexchange.com/feeds/user/userid Replace with your StackExchange UserId and sub-domain https://devops.stackexchange.com/feeds/user/15
Ghost https://www.example.com/rss/ Replace with your own blog url https://blog.codinghorror.com/rss/
Drupal https://www.example.com/rss.xml Replace with your own blog url https://www.arsenal.com/rss.xml
Youtube Playlists https://www.youtube.com/feeds/videos.xml?playlist_id=playlistId Replace playlistId with your own Youtube playlist id https://www.youtube.com/feeds/videos.xml?playlist_id=PLJNqgDLpd5E69Kc664st4j7727sbzyx0X
Youtube Channel Video list https://www.youtube.com/feeds/videos.xml?channel_id=channelId Replace channelId with your own Youtube channel id https://www.youtube.com/feeds/videos.xml?channel_id=UCDCHcqyeQgJ-jVSd6VJkbCw
Anchor.fm Podcasts https://anchor.fm/s/podcastId/podcast/rss You can get the rss feed url of a podcast by following these instructions https://anchor.fm/s/1e784a38/podcast/rss
Hashnode https://@username.hashnode.dev/rss.xml Replace @username with your Hashnode username https://polilluminato.hashnode.dev/rss.xml
Google Podcasts https://podcasts.google.com/feed/channelId Replace channelId with your Google podcast channel Id https://podcasts.google.com/feed/aHR0cHM6Ly9mZWVkcy5zb3VuZGNsb3VkLmNvbS91c2Vycy9zb3VuZGNsb3VkOnVzZXJzOjYyOTIxMTkwL3NvdW5kcy5yc3M=
Reddit http://www.reddit.com/r/topic/.rss You can create an RSS feed by adding '.rss' to the end of an existing Reddit URL. Replace topic with SubReddit topic that interest you or localized to you. http://www.reddit.com/r/news/.rss
Analytics India Magazine https://analyticsindiamag.com/author/author_name/feed/ Replace author_name with your name https://analyticsindiamag.com/author/kaustubhgupta1828gmail-com/feed/
Feedburner https://feeds.feedburner.com/feed_address Replace feed_address with your Feedburner feed address https://feeds.feedburner.com/darkwood-fr/blog
Tumblr https://blog_name.tumblr.com/rss or https://example.com/rss You can create an RSS feed by adding '/rss' to your main blog page or to your own domain if it is configured. Replace blog_name with your blog name https://goggledoddle.tumblr.com/rss

Examples

Update 22-July-2020

Thanks for the overwhelming response everyone, Just added StackOverflow support to the project. Now you can have your dev.to posts along with your StackOverflow activity in your GitHub readme. The action now supports having multiple instances on the same repo. See an example readme:

Eg2

Discussion (33)

Collapse
luisaugusto profile image
Luis Augusto

That's an awesome idea, I'm going to try this out with my readme! I also like the progress bars, but I think the data would be better visualized with a pie charts or a segmented bar instead of separating it. I'll play around with that as well, thanks!

Collapse
pashagray profile image
Pavel Tkachenko

Looks great! I'm going to grab progress-bar idea $)

Another example with JS:
dev.to/mokkapps/how-i-built-a-self...

My example with ruby (step-by-step for beginners)
dev.to/pashagray/github-auto-readm...

Collapse
iainfreestone profile image
Iain Freestone

That is a fantastic idea

There are some great GitHub profiles appearing now.

Collapse
gautamkrishnar profile image
Gautam krishna R Author • Edited

Thanks for the overwhelming response everyone, Just added StackOverflow support to the project. Now you can have your dev.to posts along with your StackOverflow activity in your GitHub readme. The action now supports having multiple instances on the same repo.

Collapse
annietaylorchen profile image
Annie Taylor Chen

How come you guys always came out with those amazing things? I am jealous! 🤩

Collapse
ileriayo profile image
Ileriayo Adebiyi

Amazing!
I look forward to trying it out on my profile github.com/ileriayo/ileriayo

Collapse
karthiknayak98 profile image
KarthikNayak • Edited

I wanted to Github activities in my README.md. But I am getting error. How should I add?
I didn't understand what are those secret keys? And how to create one?

Collapse
gautamkrishnar profile image
Gautam krishna R Author

You cant use blog post workflow to show the GitHub activities on your readme. Github don't give you XML data yet via their API. Use github.com/jamesgeorge007/github-a... instead.

Collapse
karthiknayak98 profile image
KarthikNayak

What are those GitHub keys? How to generate those?

Thread Thread
gautamkrishnar profile image
Gautam krishna R Author

It is optional in this workflow too. Just add the yml, you are good to go.

Thread Thread
gautamkrishnar profile image
Gautam krishna R Author

github.com/settings/tokens You can get keys from here

Thread Thread
karthiknayak98 profile image
KarthikNayak

Yeah thanks

Collapse
spiritbro1 profile image
spiritbro1

damn so cool

Collapse
rderik profile image
rderik

That's cool!

I did something similar but using Swift:

github.com/rderik/octoprofile

Collapse
cdennig profile image
Christian Dennig

Nice :) thanks!

Collapse
madza profile image
Madza

Nice one :)

Collapse
jbc7ag profile image
Jess Barrientos • Edited

Cool! I just added it to my GitHub profile :

github.com/jbc7ag

Thanks, looks great!!

Collapse
sirawit profile image
Dragodzs

good stuff.

Collapse
nitya profile image
Nitya Narasimhan

Loved this idea - thanks for sharing. Hope to try it out! 🎉

Collapse
vegasbrianc profile image
Brian Christner

Great tip, thanks for this

Collapse
fasani profile image
Michael Fasani

Works great, really cool stuff! Added to my profile: github.com/Fasani

I noticed you are on a 7 day contribution streak, why not join me and keep going for 365 days? #365DaysOfCode

Collapse
gautamkrishnar profile image
Gautam krishna R Author

Thanks. Since I have a full-time job, I may not be able to that 😄. During my college days, I had a good streak on GitHub.

Collapse
fasani profile image
Michael Fasani

1 day at a time! I also have a fulltime job and two kids! I believe you can do it! :-D

Thread Thread
gautamkrishnar profile image
Gautam krishna R Author

Hehehe Will try 😄

Collapse
radiomorillo profile image
Stephanie Morillo

I’m going to try this; thanks Gautam!

Collapse
chriszie profile image
Christine Zierold

Thank you for creating this and keeping it up to date.

Collapse
abhineettandon profile image
Abhineet Tandon

Bravo 👏👏👏👏

Collapse
diogorodrigues profile image
Diogo Rodrigues

Awesome! I'll try it!! :)

Collapse
vuongddang profile image
Vuong Dang

Awesome 😍

Collapse
anitajoseph profile image
Anita Joseph

Thanks for sharing this github profile Idea.

Collapse
nelero profile image
nelero

I love this idea !