DEV Community

Cover image for PR Celebration GitHub Workflow ๐ŸŽ‰๐ŸŽ‰๐ŸŽ‰
Kris foster
Kris foster

Posted on

PR Celebration GitHub Workflow ๐ŸŽ‰๐ŸŽ‰๐ŸŽ‰

GitHub Celebration IOT Workflow

My Workflow

Pull requests deserve to be celebrated ๐ŸŽ‰! This workflow integrates with smart devices to celebrate when a pull request is created. This introduces some fun into the process & could help with team morale. It's especially nice when teams haven't seen each-other due to the pandemic. The celebration includes the following:

  1. Turn on ๐ŸŸข smart bulb.
  2. Play celebration music ๐ŸŽต on smart speaker.
  3. Wait 10 seconds to enjoy the music ๐Ÿ•บ.
  4. Send request to Raspberry Pi ๐Ÿฅง to take a celebration photo:
    a. Raspberry Pi takes the photo ๐Ÿ“ธ.
    b. Raspberry Pi uploads the photo to cloud storage.

  5. Post message with the celebration picture to the pull request ๐ŸŽ‰๐ŸŽ‰๐ŸŽ‰.

Video Demo of Workflow in Action

Submission Category:

Interesting IoT

Yaml File or Link to Code

Workflow Yaml

name: PR Celebration

on:
  pull_request:
    branches: [ main ]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [16.x]
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v2
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    - name: Install dependencies
      run: npm ci
    - name: Run tests
      run: npm test
    - name: Turn office light on with green
      uses: kriscfoster/tplink-action@v1.4
      with:
        email: ${{ secrets.TPLINK_EMAIL }}
        password: ${{ secrets.TPLINK_PASSWORD }}
        deviceType: "HS100"
        deviceId: ${{ secrets.TPLINK_DEVICE_ID }}
        operation: "powerOn"
    - name: Play celebration song with Spotify
      uses: fjogeleit/http-request-action@v1.8.1
      with:
        url: https://api.spotify.com/v1/me/player/play?device_id=${{ secrets.SPOTIFY_DEVICE_ID }}
        method: PUT
        contentType: application/json
        data: "{\"context_uri\":\"${{ secrets.SPOTIFY_CONTEXT_URI }}\",\"offset\":{\"position\":0},\"position_ms\":0}"
        bearerToken: ${{ secrets.SPOTIFY_PLAYER_API_TOKEN }}
    - name: Enjoy song for 10 seconds
      run: sleep 10s
      shell: bash
    - name: Take celebration picture
      id: retrieve_celebration_picture
      run: |
        echo "::set-output name=id::$(curl -H Authorization:${{ secrets.AUTHORIZATION_TOKEN }} ${{ secrets.PI_ENDPOINT }} | jq .id | tr -d '"')"
    - name: Post celebration picture
      uses: octokit/request-action@v2.1.0
      with:
        route: POST /repos/${{ github.repository_owner }}/${{ github.event.repository.name }}/issues/${{ github.event.number }}/comments
        owner: ${{ github.repository_owner }}
        repo: ${{ github.event.repository.name }}
        issue_number: ${{ github.event.number }}
        body: "Tests Passed, it's time to celebrate!:tada::tada::tada:<br />![image](https://drive.google.com/uc?export=view&id=${{ steps.retrieve_celebration_picture.outputs.id }})"
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Enter fullscreen mode Exit fullscreen mode

Link to Code

PR Celebration GitHub Workflow ๐ŸŽ‰๐ŸŽ‰๐ŸŽ‰

This is an entry for the 2021 GitHub Actions Hackathon.

GitHub Celebration IOT Workflow

My Workflow

Pull requests deserve to be celebrated ๐ŸŽ‰! This workflow integrates with smart devices to celebrate when a pull request is created. This introduces some fun into the process & could help with team morale. The celebration includes the following:

  1. Turn on ๐ŸŸข smart bulb.

  2. Play celebration music ๐ŸŽต on smart speaker.

  3. Wait 10 seconds to enjoy the music ๐Ÿ•บ.

  4. Send request to Raspberry Pi ๐Ÿฅง to take a celebration photo.

    a. Raspberry Pi takes the photo ๐Ÿ“ธ.

    b. Raspberry Pi uploads the photo to cloud storage.

  5. Post message with the celebration picture to the pull request ๐ŸŽ‰๐ŸŽ‰๐ŸŽ‰.

Video Demo

You can see a video demo of the GitHub workflow in action here.

Submission Category:

Interesting IoT

Yaml File or Link to Code

โ€ฆ

How was this Made?

I already had some smart devices so decided to use whatever I already had for the workflow.

Turning on Green Light ๐ŸŸข

I used a combination of a green bulb & a TP-Link smart plug for this. The TP-Link plug can be turned on/off using their API but I decided to wrap this functionality into an action that could be used by my workflow & utilized by other workflows in the future. I created this under tplink-action.

Image from iOS (9)

Playing Music on Smart Speaker ๐ŸŽต

I used the spotify API directly for this component. Once authenticated, you can use the spotify API to play songs/playlists on a device associated with your account. I have a smart speaker that is connected to spotify so I just needed to make an API call to play celebration music on this speaker.

Taking & Uploading Photo with Raspberry Pi ๐Ÿฅง

This was probably the most complicated part of the project. I built & expose an API from my Raspberry Pi. The code for this API is here. When a request is made to an endpoint on this API, it takes a photo with a camera module on the Raspberry Pi & then uploads the photo to cloud storage. The API response contains the identifier of the photo in storage so the workflow knows how to use it.

Image from iOS (10)

Posting Photo as Comment on Pull Request ๐ŸŽ‰

I use the octokit/request-action action to post the photo from cloud storage to the pull request.

Screen Shot 2021-12-02 at 10 46 08

Additional Resources / Info

Discussion (2)

Collapse
zt4ff_1 profile image
Kayode

Awesome one, pal!

Collapse
rajvirsingh1313 profile image
Rajvir Singh

Dang Nice Man, wonderful idea!