/rss-to-twitter

GitHub Actions: RSS to Twitter

Primary LanguageTypeScriptMIT LicenseMIT

RSS To Twitter

CI Status License: MIT

GitHub Actions post twitter from RSS Feeds.

Post Steps

  1. Fetch RSS Feeds
  2. Filter feed items by publish time
  3. 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.

Usage

Prepare Twitter API Keys

  1. Create Twitter App - https://developer.twitter.com/en/portal/dashboard
  2. Change your app permission to Read and Write
  • ss 1
  • ss 2
  1. Get API Key/API Key Secret and Access Token/Access Token Secret
    • Twitter APIKEY
    • TWITTER_APIKEY and TWITTER_APIKEY_SECRET
    • Twitter ACCESS TOKEN
    • TWITTER_ACCESS_TOKEN and TWITTER_ACCESS_TOKEN_SECRET
    • ⚠️ Check "Created with Read and Write permissions" on your app page.
  2. Add these keys to GitHub Secrets
    • TWITTER_APIKEY
    • TWITTER_APIKEY_SECRET
    • TWITTER_ACCESS_TOKEN
    • TWITTER_ACCESS_TOKEN_SECRET

📝 Bearer Token is not needed.

On schedule

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.

On Page build

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 }}

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 trigger page_build event. It is limitation of GitHub Actions's ${{ secrets. GITHUB_TOKEN }}.

Instead of It, you can use Personal Access Token for deploy, and it triggers page_build event.

TWEET_TEMPLATE

  • %title%: Item title
  • %url: Item url
  • %desc%: Item content snip(max 280 charaters)

Release Flow

  1. Tag to v* on Release Pages
  2. CI build action and push it

License

MIT


Table of Contents

Details

Setup

yarn

  • yarn setup

npm

  • npm run setup

Workflows

Some workflows are included by default.

ci.yml

CI Workflow

  1. ESLint
  2. Jest
    • Send coverage report to codecov if CODECOV_TOKEN is set.
  3. Release GitHub Actions
    • if tag is added.
  4. Publish package
    • if tag is added and NPM_AUTH_TOKEN is set.
  5. Publish release
    • if 3 and 4 jobs are succeeded.
  6. Notify by slack
    • if workflow is failure

ACCESS_TOKEN is required.
SLACK_WEBHOOK_URL is required.

add-version-tag.yml

Add the release tag when pull request is merged.

  1. Get next version from commits histories.
    see Conventional Commits
  2. Add tag.
  3. Create branch for next version.

ACCESS_TOKEN is required.

toc.yml

Create TOC (Table of contents)

ACCESS_TOKEN is required.

issue-opened.yml

  • Assign the issue to project
    default setting:
    Project: Backlog
    Column: To do
    
  • Assign author to issue

pr-opened.yml

  • Assign the PR to project
    default setting:
    Project: Backlog
    Column: In progress
    
    ACCESS_TOKEN is required.
  • Assign author to PR
  • Add labels by branch
    setting

pr-updated.yml

  • 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
    if NPM_AUTH_TOKEN is set

project-card-moved.yml

Manage labels by moving project cards

broken-link-check.yml

Check broken link in README

update-dependencies.yml

Update package dependencies

  • schedule
  • PR opened, closed
  • repository dispatch

add-test-tag.yml

Add tag for test release

Secrets

ACCESS_TOKEN

Personal access token with the public_repo or repo scope
(repo is required for private repositories)

SLACK_WEBHOOK_URL

https://api.slack.com/messaging/webhooks

Test release

azu/release-github-actions-cli - GitHub

  1. Create .env
    Set Personal access token
    token=1234567890abcdef1234567890abcdef12345678
  2. Run yarn release
    • Dry run: yarn release -n
    • Help: yarn release -h

cli

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