GitHub Actions post twitter from RSS Feeds.
- Fetch RSS Feeds
- Filter feed items by publish time
- Post to twitter.
If your action uses on.schedule.cron
, filter feed items by publish time compare to previous cron execution time.
If your action uses other events like on.push
, you need to set UPDATE_WITHIN_MINUTES
option.
- Create Twitter App - https://developer.twitter.com/en/portal/dashboard
- Change your app permission to
Read and Write
- Get API Key/API Key Secret and Access Token/Access Token Secret
- Add these keys to GitHub Secrets
TWITTER_APIKEY
TWITTER_APIKEY_SECRET
TWITTER_ACCESS_TOKEN
TWITTER_ACCESS_TOKEN_SECRET
📝 Bearer Token is not needed.
Post new feed item via schedule cron every 15 minutes.
name: rss-to-twitter
on:
schedule:
# every 15 minutes
- cron: "*/15 * * * *"
workflow_dispatch:
jobs:
twitter:
runs-on: ubuntu-latest
steps:
- uses: azu/rss-to-twitter@v1
with:
# RSS feed URL
RSS_URL: "https://hnrss.org/newest"
TWEET_TEMPLATE: 'New Post: "%title%" %url%'
UPDATE_WITHIN_MINUTES: 15 # for workflow_dispatch
TWITTER_APIKEY: ${{ secrets.TWITTER_APIKEY }}
TWITTER_APIKEY_SECRET: ${{ secrets.TWITTER_APIKEY_SECRET }}
TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }}
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
Note: filter feed items by publish time compare to previous cron execution time.
Post new feed item via GitHub Pages Build event.
name: rss-to-twitter
on:
page_build
jobs:
twitter:
# if github.event.build.error.message is not null, it means that the build failed. Skip it
if: ${{ github.event.build.error.message == null }}
runs-on: ubuntu-latest
steps:
- uses: azu/rss-to-twitter@v1
with:
RSS_URL: "https://you.github.io/feed.xml"
TWEET_TEMPLATE: 'New Post: "%title%" %url%'
UPDATE_WITHIN_MINUTES: 15 # post items that are published within 15 minutes
TWITTER_APIKEY: ${{ secrets.TWITTER_APIKEY }}
TWITTER_APIKEY_SECRET: ${{ secrets.TWITTER_APIKEY_SECRET }}
TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }}
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
- Example:
Note: filter feed items by publish time within 15 minutes.
Warning: If you deploy your site by GitHub Actions, you need to use Personal Access Token instead of
${{ secrets. GITHUB_TOKEN }}
.${{ secrets. GITHUB_TOKEN }}
can not triggerpage_build
event. It is limitation of GitHub Actions's${{ secrets. GITHUB_TOKEN }}
.
- Automatic token authentication - GitHub Docs
- github actions - Push event doesn't trigger workflow on push paths - Stack Overflow
Instead of It, you can use Personal Access Token for deploy, and it triggers page_build
event.
- Example:
- Deploy Workflow: https://github.com/jser/jser.github.io/blob/a0fcfc6ef3829055ee10807009d04fb6431a4daf/.github/workflows/deploy.yml#L26-L35
- RSS to Twitter Workflow:https://github.com/jser/jser.github.io/blob/a0fcfc6ef3829055ee10807009d04fb6431a4daf/.github/workflows/rss-to-twitter.yml
- Twitter:https://twitter.com/jser_info
%title%
: Item title%url
: Item url%desc%
: Item content snip(max 280 charaters)
- Tag to
v*
on Release Pages - CI build action and push it
MIT
Details
yarn setup
npm run setup
Some workflows
are included by default.
CI Workflow
- ESLint
- Jest
- Send coverage report to codecov if
CODECOV_TOKEN
is set.
- Send coverage report to codecov if
- Release GitHub Actions
- if tag is added.
- Publish package
- if tag is added and
NPM_AUTH_TOKEN
is set.
- if tag is added and
- Publish release
- if 3 and 4 jobs are succeeded.
- Notify by slack
- if workflow is failure
ACCESS_TOKEN is required.
SLACK_WEBHOOK_URL is required.
Add the release tag when pull request is merged.
- Get next version from commits histories.
see Conventional Commits - Add tag.
- Create branch for next version.
ACCESS_TOKEN is required.
Create TOC (Table of contents)
ACCESS_TOKEN is required.
- Assign the issue to project
default setting:Project: Backlog Column: To do
- Assign author to issue
- Assign the PR to project
default setting:ACCESS_TOKEN is required.Project: Backlog Column: In progress
- Assign author to PR
- Add labels by branch
setting
- Add labels by changed files setting
- Create PR histories
- Manage PR by release type
ACCESS_TOKEN is required. - Check version in package.json
ACCESS_TOKEN is required. - Check if it can be published to npm
ifNPM_AUTH_TOKEN
is set
Manage labels by moving project cards
Check broken link in README
Update package dependencies
- schedule
- PR opened, closed
- repository dispatch
Add tag for test release
Personal access token with the public_repo or repo scope
(repo is required for private repositories)
https://api.slack.com/messaging/webhooks
- Create
.env
Set Personal access tokentoken=1234567890abcdef1234567890abcdef12345678
- Run
yarn release
- Dry run:
yarn release -n
- Help:
yarn release -h
- Dry run:
Then, you can use your GitHub Actions
like follows:
on: push
name: Test
jobs:
toc:
name: Test
runs-on: ubuntu-latest
steps:
- uses: owner/repo@gh-actions