Automatically Tweet Hashnode blogs using GitHub Actions

Automatically Tweet Hashnode blogs using GitHub Actions

How to post your Hashnode blogs to Twitter using GitHub Actions (pipeline)

Play this article

This is how I post my Hashnode blogs to Twitter automatically by using GitHub Actions. You can see these tweets on my Twitter account.


Setup Hashnode API

  • First, check out this awesome blog by Catalin about the Hashnode API and make sure you can call the API and your blogs

  • Load the Hashnode API playground

  • Setup your Hashnode API playground like so, including your own blog name if hasnode playground hasn't done it for you already

    user(username: "<ADD_YOUR_BLOG_USERNAME") {
      publication {
        posts(page: 0) {

Create a GitHub Action

  • Follow this my previous blog on how to tweet using GitHub actions

  • Add some more steps before the tweet step

  • Add fetching Hashnode API

        # API request
        - name: Deploy Stage
          id: myRequest
          uses: fjogeleit/http-request-action@master
            url: ''
            method: 'POST'
            data: '{"query":"{\n  user(username: \"<ADD_YOUR_USERNAME>\") {\n    publication {\n      posts(page: 0) {\n        title\n        brief\n        slug\n      }\n    }\n  }\n}\n"}'
            customHeaders: '{"headers": {"Content-Type": "application/json"}}'
  • Add another step to check your response

        - name: Show Response
          run: echo ${{ steps.myRequest.outputs.response }}
  • Add a JavaScript executor to run some JavaScript to modify the query

    # Sort Json array
        - name: Execute JavaScript inline
          id: quoteFiltered
          uses: satackey/action-js-inline@v0.0.2
            # Edit the following line to install packages required to run your script.
            required-packages: axios
            script: |
              const core = require('@actions/core')
              const axios = require('axios')
              //set output from other step            
              const quoteJson = ${{ steps.myRequest.outputs.response }}
              //Filter what blog to receive 
              randomNumber = Math.floor(Math.random() * 6);            
              const title = (String(quoteJson['data']['user']['publication']['posts'][randomNumber]['title']));
              const slug = (String(quoteJson['data']['user']['publication']['posts'][randomNumber]['slug']));
              //What tweet contents will be
              const finalQuote = (title+' '+''+slug+'{ by @az_codez } from @hashnode #softwaredevelopment #coding #softwareengineering #programming #techblog') 
              core.setOutput('finalQuote', finalQuote)
  • Make sure you run your GitHub action multiple times to check what you are going to tweet is correct and GitHub Action passes

  • Now add your tweet to Twitter step

    # Tweet to twitter
        - name: TweetToTwitter
          uses: InfraWay/tweet-action@v1.0.1
            status: ${{ steps.quoteFiltered.outputs.finalQuote }}
            api_key: ${{ secrets.TWITTER_API_KEY }}
            api_key_secret: ${{ secrets.TWITTER_API_SECRET_KEY }}
            access_token: ${{ secrets.TWITTER_ACCESS_TOKEN }}
            access_token_secret: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}


Shameless Plugs

Now you don't have to worry about reposing your blogs!

Hope this helps😁

Feel free to comment with questions or feedback✌️

Happy coding,

Az 👨🏾‍💻

Did you find this article valuable?

Support Asrin Dayananda by becoming a sponsor. Any amount is appreciated!