DevJourney · code I wrote while learning

js-projects-install-check.yml

3.4 KB
name: JS Projects Install & Build Check

# Projects covered by a dedicated Docker Image CI workflow (learning-react,
# learning-qwik, html.nodejs.dj.upayan.dev) already install and build on
# every push/PR, so they are intentionally excluded from this matrix.

on:
  push:
    branches: ['main']
    paths:
      - 'NodeJS/**'
      - 'Typescript/**'
      - 'astro/**'
      - 'electronjs/**'
      - 'nextjs/**'
      - 'react/VIT/react-crud/**'
      - 'react/crud-operations/**'
      - 'react/last-practice/**'
      - '.github/workflows/js-projects-install-check.yml'
  pull_request:
    branches: ['main']
    paths:
      - 'NodeJS/**'
      - 'Typescript/**'
      - 'astro/**'
      - 'electronjs/**'
      - 'nextjs/**'
      - 'react/VIT/react-crud/**'
      - 'react/crud-operations/**'
      - 'react/last-practice/**'
      - '.github/workflows/js-projects-install-check.yml'

permissions:
  contents: read

jobs:
  install-and-build:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        project:
          - { path: 'NodeJS', manager: 'npm', build: false }
          - {
              path: 'NodeJS/crud-operations-mongodb',
              manager: 'npm',
              build: false,
            }
          - { path: 'NodeJS/my-rest-api', manager: 'npm', build: false }
          - { path: 'NodeJS/rest-api', manager: 'npm', build: false }
          - { path: 'Typescript/website', manager: 'npm', build: false }
          - {
              path: 'Typescript/fleet-tracker/api',
              manager: 'npm',
              build: true,
            }
          - {
              path: 'Typescript/fleet-tracker/app',
              manager: 'npm',
              build: true,
            }
          - { path: 'astro/learning-astro', manager: 'npm', build: true }
          - { path: 'electronjs', manager: 'npm', build: false }
          - { path: 'nextjs/learning-nextjs', manager: 'pnpm', build: true }
          - { path: 'react/VIT/react-crud/api', manager: 'npm', build: false }
          - { path: 'react/VIT/react-crud/app', manager: 'npm', build: true }
          - { path: 'react/crud-operations/api', manager: 'pnpm', build: false }
          - { path: 'react/crud-operations/app', manager: 'pnpm', build: true }
          - { path: 'react/last-practice/api', manager: 'pnpm', build: false }
          - { path: 'react/last-practice/app', manager: 'pnpm', build: true }
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up pnpm
        if: matrix.project.manager == 'pnpm'
        uses: pnpm/action-setup@v4
        with:
          version: 11

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 24
          cache: ${{ matrix.project.manager }}
          cache-dependency-path: ${{ matrix.project.path }}/${{ matrix.project.manager == 'npm' && 'package-lock.json' || 'pnpm-lock.yaml' }}

      - name: Install dependencies (npm)
        if: matrix.project.manager == 'npm'
        working-directory: ${{ matrix.project.path }}
        run: npm ci

      - name: Install dependencies (pnpm)
        if: matrix.project.manager == 'pnpm'
        working-directory: ${{ matrix.project.path }}
        run: pnpm install --frozen-lockfile

      - name: Build
        if: matrix.project.build
        working-directory: ${{ matrix.project.path }}
        run: ${{ matrix.project.manager }} run build