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
- Ensure you have node installed. Find out:
node -v
- Clone the repo :
git clone
- Install dependencies :
npm install
- 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
- Click Launch to start the app
- 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 LambdaA 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
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 }}
Additional Resources / Info
A screenshot of the skill in action on the Alexa Developer Console:
Author:
Top comments (0)