name: Frontend CI/CD on: push: branches: [main] paths: - 'frontend/**' - 'frontend/.github/workflows/frontend.yml' pull_request: branches: [main] paths: - 'frontend/**' - 'frontend/.github/workflows/frontend.yml' defaults: run: working-directory: frontend jobs: build: name: Build, Lint & Test runs-on: ubuntu-latest strategy: fail-fast: true matrix: node-version: ['20'] steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - name: Cache npm dependencies uses: actions/cache@v4 with: path: ~/.npm key: ${{ runner.os }}-npm-frontend-${{ hashFiles('frontend/package-lock.json') }} restore-keys: | ${{ runner.os }}-npm-frontend- - name: Install dependencies run: npm ci - name: Build run: npm run build - name: Lint run: npm run lint --if-present - name: Test run: npm test --if-present deploy: name: Deploy Frontend needs: build if: github.event_name == 'push' && github.ref == 'refs/heads/main' runs-on: ubuntu-latest steps: - name: Deploy via SSH uses: appleboy/ssh-action@v1 with: host: ${{ secrets.SSH_HOST }} username: ${{ secrets.SSH_USER }} port: ${{ secrets.SSH_PORT }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | cd /opt/myproject/frontend git pull origin main sudo systemctl restart frontend