5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHub ActionsでRSSフィードを監視する

5
Posted at

GitHub Actionsでusesを使って呼び出せるアクションの学習も兼ねて、RSSの更新をGitHub Actionsを使って監視するためのアクションを作ったので、その紹介です。

使い方

実行

普通のサードパーティアクション同様、usesでこのアクションを呼び出します。with.feed-urlに監視対象のRSSのURLを設定します。

on:
  schedule:
    - cron: '0 * * * *'

jobs:
  check-feed:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Subscribe to feed
        id: feed
        uses: takaram/subscribe-feed-action@main
        with:
          feed-url: 'https://github.blog/feed/'

結果の取得

ステップのoutputで実行結果がわかります。

  • has-new-items: 更新があればtrue
  • new-items: 新規アイテムの配列のJSON

new-itemsの中身は、フィードの形式 (RSS 1.0, 2.0, or Atom) や持つ要素によって少し異なりますが、titlelink, content, pubDateなどのキーを持ちます。

既読フィードの管理

フィードを取得し終わると、既読となったアイテムをファイル(既定ではrss-state.json)に保存します。
このアクション自体はあくまでファイルへの保存しかしないので、このファイルはリポジトリにコミットしたり、アーティファクトとして保存したりしておく必要があります。
さもないと、一度取得したアイテムが次回以降の実行時にもまた新規アイテム扱いされてしまいます。

アクションの作成

ここからは、このアクションの作成過程の話です。

アクションは3種類あるのですが、今回はJavaScriptアクションとして作成しました。

  • JavaScriptアクション
    • JS/TSで実装したコードをRunner上で動かす
  • コンポジットアクション
    • ワークフローファイルと同じように、YAMLにシェルコマンドや外部アクションを並べて実装する
  • コンテナアクション
    • Dockerコンテナを作成してその中でコードを動かす

リポジトリの作成

1から作成してもいいのですが、TypeScriptでJavaScriptアクションを実装するためのリポジトリのテンプレをGitHub公式で用意してくれています。

テスト環境やCIなども全て用意してくれているので、これを利用すればビルドで大きく詰まったりすることはないかもしれません。
(いろいろ用意してくれすぎていてちょっと使いこなせていない感じもしますが…… :sweat_smile:

コードの実装

テンプレからリポジトリを作成したら、修正すべきファイルは概ね以下のとおりです。

  • action.yml
    • input, outputの定義を記載します
  • src/main.ts
    • 実際の処理を記述します
    • テンプレではwait.tsを読み込んでいますが、ただのサンプルなのでそのあたりは削除でOK
  • __tests__/main.test.ts
    • jestでテストが実装されているので、main.tsの内容に合わせる
  • .github/workflows/ci.yml
    • test-actionジョブで、このリポジトリ自身を呼び出しているので、input/outputなど修正

ビルド実行

修正が完了すれば、npm run bundleを実行してdist/index.jsを更新します。
最終的にアクション呼び出し時に実行されるのはこの.jsファイルなので(action.ymlで指定されている)、この工程を忘れると修正が反映されません。


作成したアクションは、冒頭で紹介したようにuses: (リポジトリ名)@(ブランチ名/タグ名/コミットハッシュ)で呼び出すことができます。
多くのアクションではv1のようなタグやブランチが用意されていますが、別に必須ではないのでmaindevでもいいですし、コミットのSHAハッシュでの指定も可です。

参考リンク

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?