oceanprotocol/ocean.js

View on GitHub
.github/workflows/ci.yml

Summary

Maintainability
Test Coverage
name: 'CI'

on:
  push:
    branches:
      - main
      - v3
    tags:
      - '**'
  pull_request:
    branches:
      - '**'

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - name: Cache node_modules
        uses: actions/cache@v4
        env:
          cache-name: cache-node-modules
        with:
          path: ~/.npm
          key: ${{ runner.os }}-lint-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: ${{ runner.os }}-lint-${{ env.cache-name }}-
      - run: npm ci
      - run: npm run lint

  test_unit:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - name: Cache node_modules
        uses: actions/cache@v4
        env:
          cache-name: cache-node-modules
        with:
          path: ~/.npm
          key: ${{ runner.os }}-test-unit-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: ${{ runner.os }}-test-unit-${{ env.cache-name }}-
      # Env var expansion workaround
      # https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable
      - name: Set ADDRESS_FILE
        run: echo "ADDRESS_FILE=${HOME}/.ocean/ocean-contracts/artifacts/address.json" >> $GITHUB_ENV
      - name: Checkout Barge
        uses: actions/checkout@v3
        with:
          repository: 'oceanprotocol/barge'
          path: 'barge'

      - name: Run Ganache with Barge
        working-directory: ${{ github.workspace }}/barge
        run: |
          bash -x start_ocean.sh  --no-aquarius --no-elasticsearch --no-provider --no-dashboard 2>&1 > start_ocean.log &
      - run: npm ci
      - name: Wait for contracts deployment
        working-directory: ${{ github.workspace }}/barge
        run: |
          for i in $(seq 1 250); do
            sleep 5
            [ -f "$HOME/.ocean/ocean-contracts/artifacts/ready" ] && break
            done
          ls -la "$HOME/.ocean/ocean-contracts/artifacts/"
      - run: npm run build:metadata
      - run: npm run test:unit:cover
      - uses: actions/upload-artifact@v4
        with:
          name: coverage-unit
          path: coverage/

  test_integration:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - name: Cache node_modules
        uses: actions/cache@v4
        env:
          cache-name: cache-node-modules
        with:
          path: ~/.npm
          key: ${{ runner.os }}-test-integration-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: ${{ runner.os }}-test-integration-${{ env.cache-name }}-

      # Env var expansion workaround
      # https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable
      - name: Set ADDRESS_FILE
        run: echo "ADDRESS_FILE=${HOME}/.ocean/ocean-contracts/artifacts/address.json" >> $GITHUB_ENV

      - name: Checkout Barge
        uses: actions/checkout@v3
        with:
          repository: 'oceanprotocol/barge'
          path: 'barge'
      - name: Login to Docker Hub
        if: ${{ env.DOCKERHUB_PASSWORD && env.DOCKERHUB_USERNAME }}
        run: |
          echo "Login to Docker Hub";echo "$DOCKERHUB_PASSWORD" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin
        env:
          DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
          DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}

      - name: Run Barge
        working-directory: ${{ github.workspace }}/barge
        run: |
          bash -x start_ocean.sh --with-provider2 --no-dashboard --with-c2d 2>&1 > start_ocean.log &
      - run: npm ci
      - run: npm run build:metadata
      - name: Delete default runner images
        run: |
          docker image rm node:16
          docker image rm node:16-alpine
          docker image rm node:18
          docker image rm node:18-alpine
          docker image rm node:20
          docker image rm debian:10
          docker image rm debian:11
          docker image rm moby/buildkit:latest
      - name: Wait for contracts deployment and C2D cluster to be ready
        working-directory: ${{ github.workspace }}/barge
        run: |
          for i in $(seq 1 250); do
            sleep 10
            [ -f "$HOME/.ocean/ocean-contracts/artifacts/ready" -a -f "$HOME/.ocean/ocean-c2d/ready" ] && break
            done

      - name: integration
        run: npm run test:integration:cover
        env:
          PROVIDER_URL: 'http://172.15.0.4:8030'
      - name: docker logs
        run: docker logs ocean_aquarius_1 && docker logs ocean_provider_1 && docker logs ocean_provider2_1 && docker logs ocean_computetodata_1
        if: ${{ failure() }}
      - name: Upload coverage
        uses: actions/upload-artifact@v4
        with:
          name: coverage-integration
          path: coverage/

  build:
    runs-on: ${{ matrix.os }}

    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        node: ['20', '18']

    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
      - name: Cache node_modules
        uses: actions/cache@v4
        env:
          cache-name: cache-node-modules
        with:
          path: ~/.npm
          key: ${{ runner.os }}-${{ matrix.node }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: ${{ runner.os }}-${{ matrix.node }}-build-${{ env.cache-name }}-
      - run: npm ci
      - run: npm run build
      - run: npm run doc:json

  coverage:
    runs-on: ubuntu-latest
    needs: [test_unit, test_integration]
    if: ${{ success() && github.actor != 'dependabot[bot]' }}
    steps:
      - uses: actions/checkout@v3
      - uses: actions/download-artifact@v4
        with:
          name: coverage-unit
      - uses: actions/download-artifact@v4
        with:
          name: coverage-integration
      - uses: paambaati/codeclimate-action@v2.7.5
        env:
          CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
        with:
          coverageLocations: |
            ${{ github.workspace }}/unit/lcov.info:lcov
            ${{ github.workspace }}/integration/lcov.info:lcov

  create_guide:
    runs-on: ubuntu-latest
    needs: [test_unit, test_integration]
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: checkout ocean.js repo
        uses: actions/checkout@v3
        with:
          repository: 'oceanprotocol/ocean.js'
          path: 'ocean.js'
          ref: ${{ github.event.pull_request.head.sha }}

      - name: setup git config
        run: |
          # setup the username and email. I tend to use 'GitHub Actions Bot' with no email by default
          git config user.name "GitHub Actions Bot"
          git config user.email "<>"

      - name: Create Guide & Commit if there are changes
        run: npm run commit:guides

  # update_docs:
  #   runs-on: ubuntu-latest
  #   needs: [test_unit, test_integration]
  #   steps:
  #     - uses: actions/checkout@v3
  #     - uses: actions/setup-node@v4
  #       with:
  #         node-version: '16'

  #     - name: checkout ocean.js repo
  #       uses: actions/checkout@v3
  #       with:
  #         repository: 'oceanprotocol/ocean.js'
  #         path: 'ocean.js'
  #         ref: ${{ github.event.pull_request.head.sha }}

  #     - name: setup git config
  #       run: |
  #         # setup the username and email. I tend to use 'GitHub Actions Bot' with no email by default
  #         git config user.name "GitHub Actions Bot"
  #         git config user.email "<>"

  #     - name: Create updated docs & commit changes
  #       run: npm run commit:docs