DEV Community

Cover image for Alexa custom skill workflow using Github Actions
sania-dsouza
sania-dsouza

Posted on

Alexa custom skill workflow using Github Actions

My Workflow

Project link:

DevTo - Github Actions : Hackathon 2021

This repo and project was created as an entry into the DevTo-Github Hackthon 2021, which focused on integrating Github Actions in a project.

Category chosen: Interesting IoT

Getting Started

  1. Ensure you have node installed. Find out: node -v
  2. Clone the repo : git clone
  3. Install dependencies : npm install
  4. This project uses Jovo to create the Alexa skill. Jovo provides a 'debugger' that helps to view and test interactions with Alexa. Run it using jovo run
  5. Click Launch to start the app
  6. The Nutri Planner app must open and allow you to interact with this skill

Note: The app currently just allows the user to choose from a given list of responses. This is extendable to accept any custom user input to mimic regular Alexa behavior.

Github Actions integration

The Github Actions workflow is the .github/workflows/node.js.yml file The workflow is designed to function…

License: MIT

What is this about?

This project is the development of a custom Alexa skill using the Jovo platform that 'enables professional teams to build and run apps that work across smart speakers, the web, mobile, and more.'

  • The app is a nutrition planner that takes meal inputs from the user; the app currently accepts input from the user for breakfast, lunch and dinner and provides hard-coded replies for the same right now (see picture below as seen in the Jovo debugger)
  • While not implemented in this project, the goal is to save the user's input and count the number of calories consumed by the user in a day, for health monitoring.
  • Aside from creating the app and using Github Actions for the workflow, the skill was built and deployed to the Alexa Developer Console too for registration and further testing (a screenshot is attached later in this post).
  • Now for where Github Actions comes in!
    The following Actions have been used throughout the workflow:
    ~ checkout@v2 : To checkout code
    ~ setup-node@v2 : To get node installed
    ~ upload-artifact@v2 : To upload important artifacts such as the whole skill code and test reports to the workflow run
    ~ codecov-action@v2 : To report test coverage code to Codecov -- the code coverage tool
    ~ appleboy/lambda-action@master : To deploy zipped code to AWS Lambda

  • A number of secrets have been used to run the workflow as expected such as the AWS_ACCESS_KEY_ID, AWS_REGION etc.

  • The list of jobs in the workflow are below:
    ~ build
    ~ static-code-analysis
    ~ unit-test
    ~ code-coverage
    ~ virtual-alexa-tests
    ~ deploy-skill
    ~ store-artifacts

Codecov:
Codecov

Jovo Debugger:
Jovo Debugger Test run

Github Actions run:
Latest Workflow run

Submission Category :

Interesting IoT

Yaml File:

name: Node.js CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest
    name: Build
    strategy:
      matrix:
        node-version: [14.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'
    - run: npm install

  static-code-analysis: 
    runs-on: ubuntu-latest
    name: Static code analysis 
    needs: build
    steps: 
    - name: Checkout
      uses: actions/checkout@v2
    - run: |
        npm install
        npm run eslint

  unit-test: 
    runs-on: ubuntu-latest
    name: Unit test using Jest
    needs: static-code-analysis
    steps: 
    - name: Checkout
      uses: actions/checkout@v2
    - run: |
        npm install
        npm run test
    - name: Upload results
      uses: actions/upload-artifact@v2
      with:
        name: unit-test-report
        path: reports/test-report.html

  code-coverage: 
    runs-on: ubuntu-latest
    name: Code Coverage using Codecov
    needs: unit-test
    steps:
    - name: Checkout
      uses: actions/checkout@v2
    - run: |
        npm install
        npm run codecov
    - name: Codecov push results
      uses: codecov/codecov-action@v2
      with:
          token: ${{ secrets.CODECOV_TOKEN }} 

  virtual-alexa-tests: 
    runs-on: ubuntu-latest
    name: Test on Virtual Alexa
    needs: code-coverage
    steps: 
    - name: Checkout
      uses: actions/checkout@v2
    - run: |
        npm install
        npm run test-virtual
    - name: Upload results
      uses: actions/upload-artifact@v2
      with:
        name: virtual-test-report
        path: reports/test-report.html  

  deploy-skill: 
    name: Build and deploy lambda
    needs: virtual-alexa-tests
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Install dependencies and zip folder contents
        run: |
          npm install && zip -r bundle.zip .
      - name: deploy zip to aws lambda
        uses: appleboy/lambda-action@master
        with:
          aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws_region: ${{ secrets.AWS_REGION }}
          function_name: 'devto-gha-hack2021-dev-handler'
          zip_file: bundle.zip

  store-artifacts:
    name: Store skill code
    if: always()
    runs-on: ubuntu-latest
    needs: deploy-skill
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Upload code
        uses: actions/upload-artifact@v2
        with:
          name: code
          path: ${{ github.workspace }}
Enter fullscreen mode Exit fullscreen mode

Additional Resources / Info

A screenshot of the skill in action on the Alexa Developer Console:

Alexa Developer skill

Author:

saniadsouza image

Top comments (0)