DEV Community

Tuan Thanh Tan
Tuan Thanh Tan

Posted on

2

Adding Github Actions CI Workflow

Introduction

Hello everyone, my name is Dustin, today I'd like to talk about my experience working with Github Actions and some testings in Javascript.

At a glance

Github Actions was easy to set up as it's written beforehand, I just needed to remove 1 line of building step because I don't need it yet. But making my code to run and pass all 3 node versions was quite difficult. I ran into trouble a lot of times.

Progress

First, I decided to migrate from Commander to Yargs in order to make the code clearer. And then I added some more tests for the e2e test to make sure that help option and version option are working as I expected. As I was running the tests, I found out there's some errors happening and needed to be fixed as soon as possible. So I created a separate branch to fix it. The problem involved resolve variable in promise because I accidentally added curly braces around them. As I progressed, I decided to clean up my code a little bit more so I moved from using sync functions to async functions in the produceFolder class.

After that, I pushed the code to my repo, and it seemed like Github wasn't very happy with my package-lock.json and __snapshots__ for some reason. So I had to npm install and delete __snapshots__ and run the test again.

What I have for my github actions is

name: Node.js CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [12.x, 14.x, 16.x]
        # See supported Node.js release schedule at https://nodejs.org/en/about/releases/

    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 ci
    - run: npm test
Enter fullscreen mode Exit fullscreen mode

Unfortunately, it was only successful on the first 2 node versions, not the 16 one due to rm and mkdir. There was also a problem with rmdir because in Node 16, If I remember correctly, it won't be supported anymore so I had to only use mkdir to create a folder. I also had to add {recursive: true} just in case the folder already exists.

Wrap up

After a day struggling, I've successfully passed all 3 tests from Github actions and I've learnt a lot from it, especially using Git.

My testing still needs to be improved as it just covers some basics, not every edge case because testing takes a lot of time and thinking. More testing will be added later.

Tiugo image

Modular, Fast, and Built for Developers

CKEditor 5 gives you full control over your editing experience. A modular architecture means you get high performance, fewer re-renders and a setup that scales with your needs.

Start now

Top comments (0)