Display and auto-update RSS feed in your GitHub Profile README
⚠️ If you're reading this document in Marketplace page, please refer to the latest document here.
First, add flag comments to where you want in your document:
### Latest Posts
<!-- feed start -->
<!-- feed end -->
Then add following steps to your workflow:
steps:
- uses: actions/checkout@v4
- uses: sarisia/actions-readme-feed@v1
with:
url: 'https://note.sarisia.cc/index.xml'
file: 'README.md'
- uses: sarisia/actions-commit@master
steps:
- uses: actions/checkout@v4
- uses: sarisia/actions-readme-feed@v1
with:
url: 'https://note.sarisia.cc/index.xml'
file: 'README.md'
- run: |
git config --global user.name "${{ github.actor }}"
git config --global user.email "${{ github.actor }}@users.noreply.github.com"
git add .
git commit -m "docs: update feed" || true
git push
The result looks like:
Key | Required | Value | Default | Description |
---|---|---|---|---|
url |
Yes | String | URL of RSS feed (XML) | |
file |
Yes | String | Path to document file to process.Can be relative path from repository root, or absolute path of Actions Runner. | |
sort |
Boolean | true |
Sort feed entries by date in decending order. | |
max_entry |
Number | 5 |
Number of feed entries to show | |
format |
String | - ${monthshort} ${02day} - [${title}](${url}) |
Feed entry format string.See Formatting for details. | |
start_flag |
String | <!-- feed start --> |
Flag string to declare start of feed block | |
end_flag |
String | <!-- feed end --> |
Flag string to declare end of feed block | |
locale |
String | en-US |
Locale used to format dateNEEDS ADDITIONAL CONFIGURATION. See remarks | |
timezone |
String | UTC |
Timezone (e.g. Asia/Tokyo ) used to format date |
|
nowrite |
Boolean | false |
Do not write results to the file specified as file input |
|
retry |
Number | 3 |
Number of retries for fetching feeds | |
retry_backoff |
Number | 5 |
Retry backoff (seconds) | |
ensure_all |
Boolean | false |
Ensure that all feeds specified as url input are fetched correctly (== does not skip fetch errors) |
|
allow_empty |
Boolean | false |
Don't fail action if feed has no items |
Examples below uses following RSS feed item:
<item>
<title>Blog Post</title>
<link>https://blog.example.com/blog-post</link>
<pubDate>Sat, 05 Aug 2020 00:00:00 +0000</pubDate>
</item>
Key | Example | Note |
---|---|---|
title |
Blog Post |
|
url |
https://blog.example.com/blog-post |
|
guid |
https://blog.example.com/blog-post |
Maybe a URL, maybe not. Check your feed. |
year |
2020 |
timezone affects |
month |
8 |
timezone affects. |
monthshort |
Aug |
timezone affects. |
monthlong |
August |
timezone affects. |
day |
5 |
timezone affects. |
date |
8/5/2020, 12:00:00 AM |
timezone affects. |
For details, see src/format.ts
You can padding variables with zeros or spaces.
Format | Output | Description |
---|---|---|
${2day} |
5 |
Pads to length 2 with spaces |
${05month} |
00008 |
Pads to length 5 with zeros |
changed
: Whether the document is changed while this actions's run. 1
if changed, 0
else.
items
: Raw feed entry from rssparser
.
[
{
"title":"C.UTF-8 とは何だったのか",
"link":"https://note.sarisia.cc/entry/what-is-c-utf8/","pubDate":"Fri, 21 Aug 2020 00:00:00 +0000",
"content":"TL;DR 全ての Linux ディス...",
"guid":"https://note.sarisia.cc/entry/what-is-c-utf8/",
"isoDate":"2020-08-21T00:00:00.000Z"
},
...
]
newlines
: New lines inserted to the document specified as file
. Lines are joined
with \n
.
<!-- feed start -->
- Aug 10 - [fish スクリプトのデバッグ](https://note.sarisia.cc/entry/debugging-fish-script/)
- Aug 08 - [Arch Linux Install Battle](https://note.sarisia.cc/entry/arch-linux-install-battle/)
- Aug 05 - [Linuxbrew で emscripten を導入する](https://note.sarisia.cc/entry/linuxbrew-emscripten/)
- Jul 29 - [UWP アプリは localhost へ接続できない](https://note.sarisia.cc/entry/uwp-localhost/)
- Jul 22 - [Linuxbrew で入れた Go でビルドしたバイナリは可搬性が無い](https://note.sarisia.cc/entry/linuxbrew-go/)
<!-- feed end -->
result
: Result document with feed lines inserted. Lines are joined with \n
# Actions Readme Feed
Display RSS feed in your [GitHub Profile README](https://docs.github.com/en/github/setting-up-and-managing-your-github-profile/managing-your-profile-readme)
...
Not only Qiita, you can use any RSS feeds which rss-parser
supports.
- uses: sarisia/actions-readme-feed@v1
with:
url: 'https://qiita.com/sarisia/feed'
file: 'README.md'
Make your workflow with schedule
trigger.
on:
schedule:
- cron: '0 */6 * * *'
jobs:
readme:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: sarisia/actions-readme-feed@v1
id: feed
with:
url: 'https://note.sarisia.cc/index.xml'
file: 'README.md'
- if: ${{ steps.feed.outputs.changed == true }}
uses: sarisia/actions-commit@master
changed
outputchanged
output can be used directly in the if
conditional.
steps:
- uses: sarisia/actions-readme-feed@v1
id: feed
with:
url: 'https://blog.example.com/feed.xml'
file: 'README.md'
- if: ${{ steps.feed.outputs.changed == true }}
run: echo "changed!"
You can pass multiple URLs to url
and get results with
all feeds merged & sorted by date!
- name: merged feed
uses: sarisia/actions-readme-feed@v1
with:
file: 'README.md'
url: |
https://note.sarisia.cc/index.xml
https://qiita.com/sarisia/feed
https://zenn.dev/sarisia/feed
Make sure to change start_flag
and end_flag
for each feed.
- name: blog
uses: sarisia/actions-readme-feed@v1
with:
url: 'https://note.sarisia.cc/index.xml'
file: 'README.md'
start_flag: "<!-- blog start -->"
end_flag: "<!-- blog end -->"
- name: qiita
uses: sarisia/actions-readme-feed@v1
with:
url: 'https://qiita.com/sarisia/feed'
file: 'README.md'
start_flag: "<!-- qiita start -->"
end_flag: "<!-- qiita end -->"
### Blog
<!-- blog start -->
<!-- blog end -->
### Qiita
<!-- qiita start -->
<!-- qiita end -->
actions/checkout
action can handle this.
For deploy key:
- uses: actions/checkout@v4
with:
ssh-key: ${{ secrets.DEPLOY_KEY }}
- uses: sarisia/actions-readme-feed@v1
For Personal Access Token:
- uses: actions/checkout@v4
with:
token: ${{ secrets.PAT }}
- uses: sarisia/actions-readme-feed@v1
locale
option needs additional operationSetting locale
option is not working correctly due to the limitation of
Node.js shipped with GitHub Actions runner.
If you want this to work, you need to set up ICU data set manually.
You can use the helper action sarisia/setup-icu
to do this:
steps:
- uses: sarisia/setup-icu@v1
- uses: sarisia/actions-readme-feed@v1
with:
url: https://note.sarisia.cc/index.xml
file: README.md
locale: 'ja-JP'
steps:
- run: npm install icu4c-data@64l
- uses: sarisia/actions-readme-feed@v1
with:
url: https://note.sarisia.cc/index.xml
file: README.md
locale: 'ja-JP'
env:
NODE_ICU_DATA: node_modules/icu4c-data