huridocs/uwazi

View on GitHub
.github/workflows/ci_e2e_cypress_pages.yml

Summary

Maintainability
Test Coverage
name: e2e cypress PAGES

on:
  push:
    branches:
      - development
  pull_request:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  e2e-cypress:
    runs-on: ubuntu-20.04
    services:
      elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.17.6-amd64
        ports:
          - 9200/tcp
        options: -e="discovery.type=single-node" --health-cmd="curl http://localhost:9200/_cluster/health" --health-interval=10s --health-timeout=30s --health-retries=10
      redis:
        image: redis:5.0.14
        ports:
          - 6379:6379

    steps:
      - name: Start MongoDB
        uses: supercharge/mongodb-github-action@1.8.0
        with:
          mongodb-version: 5.0.27
          mongodb-replica-set: test-rs
      - name: Checkout reposistory
        uses: actions/checkout@v4
      - name: Checkout submodules
        run: git submodule update --init --recursive
      - name: Setup Nodejs
        uses: actions/setup-node@v4
        with:
          node-version-file: '.nvmrc'
      - name: Cache node modules
        uses: actions/cache@v2
        with:
          path: ./node_modules
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
      - name: install dependencies
        run: yarn install
      - run: sudo apt update
      - run: sudo apt-get install poppler-utils
      - name: Cache build
        id: cache-build
        uses: actions/cache@v2
        with:
          path: ./prod
          key: >-
            ${{ runner.os }}-build-${{ hashFiles('app/**/*.*') }}-
            ${{ hashFiles('database/**/*.*') }}-
            ${{ hashFiles('**/yarn.lock') }}-
            ${{ hashFiles('**/webpack.production.config.js') }}-
            ${{ hashFiles('**/.babelrc') }}-
            ${{ hashFiles('webpack/**/config.js') }}-
      - name: build production
        if: steps.cache-build.outputs.cache-hit != 'true'
        run: yarn production-build
      - name: Set up Python 3.11
        uses: actions/setup-python@v4
        with:
          python-version: 3.11
      - name: Clone dummy services
        uses: actions/checkout@v4
        with:
          repository: huridocs/dummy_extractor_services
          path: dummy_extractor_services
      - run: python3 -m venv .venv
        working-directory: dummy_extractor_services
      - run: make install_venv -C dummy_extractor_services
      - run: make start -C dummy_extractor_services > logs.log &
      - run: sleep 5 && wget --waitretry=5 --retry-connrefused -v http://localhost:5051/info
      - name: Log on failure
        if: ${{ failure() }}
        run: cat dummy_extractor_services/logs.log
      - run: yarn blank-state
        id: blank-state-attempt1
        continue-on-error: true
        env:
          DBHOST: localhost:27017
          ELASTICSEARCH_URL: http://localhost:${{ job.services.elasticsearch.ports[9200] }}
          DATABASE_NAME: uwazi_e2e
          INDEX_NAME: uwazi_e2e
          TRANSPILED: true
      - run: yarn blank-state --force
        id: blank-state-attempt2
        if: steps.blank-state-attempt1.outcome == 'failure'
        env:
          DBHOST: localhost:27017
          ELASTICSEARCH_URL: http://localhost:${{ job.services.elasticsearch.ports[9200] }}
          DATABASE_NAME: uwazi_e2e
          INDEX_NAME: uwazi_e2e
          TRANSPILED: true          
      - run: yarn ix-config
        env:
          DBHOST: localhost:27017
          DATABASE_NAME: uwazi_e2e
      - name: start Uwazi
        env:
          NOTIFICATION_DELAY: 50
          DBHOST: localhost:27017
          ELASTICSEARCH_URL: http://localhost:${{ job.services.elasticsearch.ports[9200] }}
          DATABASE_NAME: uwazi_e2e
          INDEX_NAME: uwazi_e2e
          EXTERNAL_SERVICES: true
        run: yarn run-production > output.txt &
      - name: wait for uwazi to be ready
        run: sleep 5 && wget --waitretry=5 --retry-connrefused -v http://localhost:3000/
        timeout-minutes: 3
      - name: Cypress run
        uses: cypress-io/github-action@v6
        with:
          browser: chrome
          component: false
          config-file: cypress.config.ts
          spec: "cypress/e2e/pages/*.cy.ts"
        timeout-minutes: 25
        env:
          DBHOST: localhost:27017
          ELASTICSEARCH_URL: http://localhost:${{ job.services.elasticsearch.ports[9200] }}
          TRANSPILED: true
      - uses: actions/upload-artifact@v3
        if: ${{ failure() }}
        with:
          name: snapshots
          path: cypress/e2e/**/__image_snapshots__/
      - uses: actions/upload-artifact@v3
        if: ${{ failure() }}
        with:
          name: video
          path: cypress/videos/
      - name: Print server output
        run: cat output.txt
        if: failure()