INTO-CPS-Association/DTaaS

View on GitHub
.github/workflows/client.yml

Summary

Maintainability
Test Coverage
name: React website

on:
  push:
    paths:
      - 'client/**'
  pull_request:
    paths:
      - 'client/**'
  workflow_dispatch:

jobs:
  client:
    name: Test react website
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: client/
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup node
        uses: actions/setup-node@v4
        with:
          node-version: 20
          cache: "yarn"
          cache-dependency-path: "**/yarn.lock"

      - name: Install dependencies
        run: |
          yarn install
          yarn playwright install --with-deps

      - name: Run the linting checks
        run: |
          yarn syntax

      - name: Build the React SPA website and setup env
        run: |
          yarn build
          yarn config:test

      - name: Run client unit and integration tests
        run: |
          yarn test:int
          yarn test:unit
          yarn test:preview:unit
          yarn test:preview:int

      - name: Upload unit and integration test coverage to Codecov
        uses: codecov/codecov-action@v3
        with:
          files: client/coverage/clover.xml
          flags: client-unit-integration-tests 
        
      - name: Run e2e tests
        continue-on-error: true
        run: |
          yarn test:e2e

      - name: Upload Playwright Report
        uses: actions/upload-artifact@v4
        if: ${{ !cancelled() }}
        with:
          name: playwright-report
          path: client/playwright-report/**
          retention-days: 30

      - name: Upload e2e test coverage to Codecov
        uses: codecov/codecov-action@v3
        with:
          files: client/coverage/e2e/codecov.json
          flags: client-e2e-tests

  get_version:
    name: Get version
    runs-on: ubuntu-latest
    steps:
        - name: Checkout Repository
          uses: actions/checkout@v4
        - name: Install jq
          run: sudo apt-get install -y jq
        - name: get version
          id: get_version
          run: | 
            version=`cat ./client/package.json | jq -r '.version'`
            echo "version=$version" >> $GITHUB_OUTPUT
    outputs:
      version: ${{ steps.get_version.outputs.version }}

  publish-docker-image-ghcr:
    if: | 
      github.event_name == 'push' &&
      (startsWith(github.ref, 'refs/heads/feature/') || startsWith(github.ref, 'refs/heads/release-v'))
      
    name: Publish Docker image (GHCR)
    needs: [client, get_version]
    uses: ./.github/workflows/docker-ghcr.yml
    with: 
      image-name: dtaas-web
      version: ${{ needs.get_version.outputs.version }}
      dockerfile: client.dockerfile
    secrets: inherit

  publish-docker-image-dockerhub:
    if: | 
      github.event_name == 'push' &&
      (startsWith(github.ref, 'refs/heads/feature/') || startsWith(github.ref, 'refs/heads/release-v'))
      
    name: Publish Docker image (DockerHub)
    needs: [client, get_version]
    uses: ./.github/workflows/docker-dockerhub.yml
    with: 
      image-name: dtaas-web
      version: ${{ needs.get_version.outputs.version }}
      dockerfile: client.dockerfile
      readme-file: client/DOCKER.md
    secrets:
      DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
      DOCKERHUB_SCOPE: ${{ secrets.DOCKERHUB_SCOPE }}
      DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}