# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions

name: Node.js CI

on:
  push:
    branches: [ main, 1.x ]
  pull_request:
  workflow_dispatch:

jobs:
  build-and-lint:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [14.x]

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm install -g npm@7
    - run: npm ci
    - run: npm run build
    - run: npm run lint

  unit:
    runs-on: ubuntu-latest


    strategy:
      matrix:
        node-version: [12.x, 14.x, 16.x]

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm install -g npm@7
    - run: npm ci
    - run: npm run build
    - run: npm test

  integration:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [12.x, 14.x, 16.x]

    services:
      rippled:
        image: natenichols/rippled-standalone:latest
        ports:
        - 6006:6006
        options:
          --health-cmd="wget localhost:6006 || exit 1" --health-interval=5s --health-retries=10 --health-timeout=2s

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm install -g npm@7
    - run: npm ci
    - run: npm run build
    - run: npm run test:integration
      env:
        HOST: localhost
        PORT: ${{ job.services.rippled.ports['6006'] }}

  browser:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [14.x] # This just needs to be compatible w/ puppeteer

    services:
      rippled:
        image: natenichols/rippled-standalone:latest
        ports:
        - 6006:6006
        options:
          --health-cmd="wget localhost:6006 || exit 1" --health-interval=5s --health-retries=10 --health-timeout=2s

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v1
      with:
        node-version: ${{ matrix.node-version }}
    - run: npm install -g npm@7
    - run: npm ci
    - run: npm run build
    - run: npm run test:browser
