[Github Actions]githubのリリースの公開に合わせてtwitterで通知

前回の記事[(webサイトの更新の表示をgithubのreleaseで管理)](https://qiita.com/mugi111/items/dd71305a001a67c8a24a)の中で書いたgithubのreleaseに合わせてツイートをするGithub Actionsについて書きます。

# 概要
githubの任意のリポジトリのreleaseが公開されたタイミングでツイートをするGithub Actionsを作っていきます。

GitHub Marketplace
https://github.com/marketplace/actions/tweet-trigger-publish-release

リポジトリ
https://github.com/mugi111/tweet-trigger-release

# 作り方
↓↓↓作り方の参考にしたページです↓↓↓
[LGTMすると現場猫が「ヨシ!」してくれるGitHub Actionsをつくった + Tips](https://qiita.com/redshoga/items/986c07abb6d38766588b)

今回は[こちら](https://github.com/actions/javascript-actionjavascript)のjavascriptのテンプレートを使用して作っていきました。

githubにログインをしてリポジトリのページに行くと、緑色の`Use this template`というボタンが見えるので
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256522/fd666615-170e-bcab-cc18-ec7fc1b21fef.png)

いつも通りの見慣れたページに移動するので、ここから自分のリポジトリを作成していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256522/4f26e312-1830-6e8a-b144-d69019d6c1e1.png)

テンプレートに加えて使うものとしてものとして今回はtwitterのパッケージをインストールします

```bash:npm
npm i twitter --save
```

```bash:yarn
yarn add twitter
```

作りは単純でtwitterのAPIを使用してツイートをPOSTするだけです。
`client`の宣言やツイート本文の指定で使われている

```javascript
core.getInput(' xxx ')
```
この記述で後述する`.github/workflow`直下のyamlファイルから値を取得してきます。

下がコードの全文です。

```javascript:index.js
const core = require('@actions/core');
const Twitter = require('twitter');

// most @actions toolkit packages have async methods
async function run() {
  try {
    const client = new Twitter({
      consumer_key: core.getInput('consumer_key'),
      consumer_secret: core.getInput('consumer_secret'),
      access_token_key: core.getInput('access_token_key'),
      access_token_secret: core.getInput('access_token_secret')
    });

    client.post('statuses/update', {status: core.getInput('tweet_body')}, (error) => {
      if (!error) {
          console.log('Succeeded!');
      } else {
          console.log('Couldnt tweet.');
      }
  });
  } 
  catch (error) {
    core.setFailed(error.message);
  }
}

run()
```

# yamlファイルの中身
この部分で`release`の`published`をトリガーにすることを定義しています。

```yaml
on:
  release:
    types: [published]
```

あとは実行環境や使用するActions、入力する値を設定します。

```yaml
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: mugi111/tweet-trigger-release@v1.2
        with:
          consumer_key: ${{ secrets.CONSUMER_KEY }}
          consumer_secret: ${{ secrets.CONSUMER_SECRET }}
          access_token_key: ${{ secrets.ACCESS_TOKEN_KEY }}
          access_token_secret: ${{ secrets.ACCESS_TOKEN_SECRET }}
          tweet_body: "更新しました！"
```

# 使い方
以下のyamlファイルを`.github/workflow`の直下においておきます。

```yaml:tweet-trigger-release.yml
name: "tweet-trigger-release"
on:
  release:
    types: [published]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: mugi111/tweet-trigger-release@v1.2
        with:
          consumer_key: ${{ secrets.CONSUMER_KEY }}
          consumer_secret: ${{ secrets.CONSUMER_SECRET }}
          access_token_key: ${{ secrets.ACCESS_TOKEN_KEY }}
          access_token_secret: ${{ secrets.ACCESS_TOKEN_SECRET }}
          tweet_body: "更新しました！"
```

ここの`secrets.XXX`を設定するためにSettingsのSecretsタブからtwitterのDeveloperページから取得したtokenやkeyを登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/256522/7ffcbb65-ce49-db33-fc13-e1a4b844ef72.png)

Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ　※2019年8月時点の情報
https://qiita.com/kngsym2018/items/2524d21455aac111cdee

あとは`"更新しました！"`となっている`tweet_body`を書き換えることでツイートの本文を設定して完了です。


***おわり***