atlp-rwanda/hackers-ec-Fe

View on GitHub
.github/workflows/nodejs.js.yml

Summary

Maintainability
Test Coverage
name: build
on:
  push:
    branches:
      - develop
      - '*'
  pull_request:
    branches:
      - develop
      - '*'
jobs:
  test:
    runs-on: ubuntu-latest
    env:
      CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
      COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
      VITE_API_BASE_URL: ${{ secrets.VITE_API_BASE_URL }}

    strategy:
      matrix:
        node-version: ['20.x']
    steps:
      - uses: actions/checkout@v4
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
          cache: 'npm'

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm run test

      - name: Setup Code Climate test-reporter
        run: |
          # Download test reporter as a static binary
          curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
          chmod +x ./cc-test-reporter
          ./cc-test-reporter before-build

      - name: Store coverage report
        if: always()
        run: mkdir -p coverage

      - name: Send coverage report to Code Climate
        if: always()
        run: ./cc-test-reporter after-build -t lcov -p coverage

      - name: coveralls
        run: npx coveralls < coverage/lcov.info

  build-and-push-image:
    needs: test
    if: github.ref == 'refs/heads/develop'
    env:
      REGISTRY: docker.io
      IMAGE_NAME: ${{ secrets.IMAGE_NAME }}
      TAG: latest
    runs-on: ubuntu-latest

    permissions:
      contents: read
      packages: write
      attestations: write
      id-token: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Log in to Docker Hub
        uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Build and push docker image
        id: push
        uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4
        with:
          context: .
          push: true
          tags: ${{ env.IMAGE_NAME }}:${{ env.TAG }}