diff --git a/.github/workflows/twitter.yml b/.github/workflows/twitter.yml new file mode 100644 index 0000000000..8bb0f77a0d --- /dev/null +++ b/.github/workflows/twitter.yml @@ -0,0 +1,24 @@ +name: Twitter notifications + +on: [ push ] + +jobs: + notify_twitter: + runs-on: ubuntu-20.04 + if: always() && github.repository == 'SerenityOS/serenity' && github.ref == 'refs/heads/master' + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node_version: '14' + - run: npm i twit + - run: | + node ${{ github.workspace }}/Meta/tweet-commits.js << EOF + ${{ toJSON(github.event) }} + EOF + env: + CONSUMER_KEY: ${{ secrets.CONSUMER_KEY }} + CONSUMER_SECRET: ${{ secrets.CONSUMER_SECRET }} + ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }} + ACCESS_TOKEN_SECRET: ${{ secrets.ACCESS_TOKEN_SECRET }} diff --git a/Meta/tweet-commits.js b/Meta/tweet-commits.js new file mode 100644 index 0000000000..581eafe394 --- /dev/null +++ b/Meta/tweet-commits.js @@ -0,0 +1,29 @@ +const fs = require("fs"); +const Twit = require("twit"); +const { CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET } = process.env; + +const T = new Twit({ + consumer_key: CONSUMER_KEY, + consumer_secret: CONSUMER_SECRET, + access_token: ACCESS_TOKEN, + access_token_secret: ACCESS_TOKEN_SECRET, +}); + +(async () => { + const githubEvent = JSON.parse(fs.readFileSync(0).toString()); + const tweets = []; + for (const commit of githubEvent["commits"]) { + tweets.push( + `${commit["message"].substring(0, 240)}\nAuthor: ${commit["author"]["name"]}\n${ + commit["url"] + }` + ); + } + for (const tweet of tweets) { + try { + await T.post("statuses/update", { status: tweet }); + } catch (e) { + console.error("Failed to post a tweet!", e.message); + } + } +})();