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@v2 with: node-version: '20' - name: Cache node_modules uses: actions/cache@v2 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@v2 with: node-version: '20' - name: Cache node_modules uses: actions/cache@v2 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@v2 with: name: coverage path: coverage/ test_integration: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v2 with: node-version: '20' - name: Cache node_modules uses: actions/cache@v2 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@v2 with: name: coverage 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@v2 with: node-version: ${{ matrix.node }} - name: Cache node_modules uses: actions/cache@v2 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@v2 with: name: coverage - 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@v2 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@v2 # 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