https://github.com/joschi/mastofeedbot
A bot that posts RSS feeds to Mastodon via GitHub Actions
https://github.com/joschi/mastofeedbot
fediverse fediverse-bot github-actions mastodon mastodon-bot rss rss-feed
Last synced: 3 months ago
JSON representation
A bot that posts RSS feeds to Mastodon via GitHub Actions
- Host: GitHub
- URL: https://github.com/joschi/mastofeedbot
- Owner: joschi
- Created: 2022-12-22T20:22:42.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2026-03-22T22:40:43.000Z (3 months ago)
- Last Synced: 2026-03-23T14:43:15.572Z (3 months ago)
- Topics: fediverse, fediverse-bot, github-actions, mastodon, mastodon-bot, rss, rss-feed
- Language: TypeScript
- Homepage:
- Size: 6 MB
- Stars: 8
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Masto Feed Bot
Masto Feed Bot is a GitHub Action that posts RSS feeds to Mastodon via GitHub Actions workflows.
## Usage
1. Go to `https://${YOUR_INSTANCE}/settings/applications/new` and add a new application.
- Name it whatever you want.
- The redirect URI is not important, so you can use `urn:ietf:wg:oauth:2.0:oob`.
- The only permission required is `write:statuses`.
- Save it, click on the application link, and grab the access token.
2. Create a new GitHub repository.
3. Go to your repository settings at `https://github.com/${YOUR_REPO}/settings/secrets/actions/new`, and add a new
secret with the value of the access token.
4. Add a file named `.github/workflows/mastofeedbot.yml` with the following content:
```yaml
name: FeedBot
on:
schedule:
# This will run every five minutes. Alter it using https://crontab.guru/.
- cron: '*/5 * * * *'
jobs:
rss-to-mastodon:
runs-on: ubuntu-latest
steps:
- name: Generate cache key
uses: actions/github-script@v6
id: generate-key
with:
script: |
core.setOutput('cache-key', new Date().valueOf())
- name: Retrieve cache
uses: actions/cache@v3
with:
path: ${{ github.workspace }}/mastofeedbot
key: feed-cache-${{ steps.generate-key.outputs.cache-key }}
restore-keys: feed-cache-
- name: GitHub
uses: 'joschi/mastofeedbot@v1'
with:
# This is the RSS feed you want to publish
rss-feed: https://www.githubstatus.com/history.rss
# Template of status posted to Mastodon (Handlebars)
template: |
{{item.title}}
{{item.link}}
# Visibility of the posted status (public | unlisted | private | direct)
status-visibility: public
# Mark Mastodon status as sensitive content
sensitive: false
# This is your instance address
api-endpoint: https://mastodon.social
# This is the secret you created earlier
api-token: ${{ secrets.MASTODON_ACCESS_TOKEN }}
# This is a path to the cache file, using the above cache path
cache-file: ${{ github.workspace }}/mastofeedbot/cache.json
# The maximum number of posts created on the first run
initial-post-limit: 10
```
5. Commit and publish your changes.
## Status template
The status template (`status-template`) is using [Handlebars](https://handlebarsjs.com/) as template engine.
The action is passing in an instance of `FeedData` (field `feedData`) and the current `FeedEntry` (field `item`) into the template:
```typescript
export interface FeedEntry {
link?: string;
title?: string;
description?: string;
published?: Date;
}
export interface FeedData {
link?: string;
title?: string;
description?: string;
generator?: string;
language?: string;
published?: Date;
entries?: Array;
}
```