Судя по вашему описанию и приведенному файлу конфигурации GitHub Actions, вероятная проблема заключается в том, как вы используете `actions/checkout@v2`. По умолчанию эта команда выполняет полный checkout кода, что может перезаписывать содержимое, если в ходе работы или конфигурации вашего workflow возникают побочные эффекты.
Однако также возможно, что в вашем окружении (например, в self-hosted runner) как-то настроены чистка или сброс рабочих директорий между шагами. Для решения этой проблемы есть несколько подходящих вариантов:
### 1. Переосмысленный порядок шагов
Вы можете убедиться, что перед установкой зависимостей для бэкенда не происходит очищение. Для этого попробуйте разделить ваши шаги так, чтобы они четко не взаимодействовали друг с другом.
### 2. Используйте кэширование
Вы можете использовать кэширование для сохранения зависимостей, чтобы не устанавливать их заново каждый раз. Используйте `actions/cache@v3` для кэширования папок `node_modules`. Пример:
```yaml
name: "Build Frontend"
on:
push:
branches:
- main
jobs:
build-frontend:
runs-on: self-hosted
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '20.18.0'
- name: Cache frontend dependencies
uses: actions/cache@v3
with:
path: frontend/node_modules
key: ${{ runner.os }}-frontend-${{ hashFiles('frontend/package-lock.json') }}
- name: Install frontend dependencies
run: npm ci
working-directory: frontend
- name: Build frontend
run: npm run build
working-directory: frontend
- name: Cache backend dependencies
uses: actions/cache@v3
with:
path: backend/node_modules
key: ${{ runner.os }}-backend-${{ hashFiles('backend/package-lock.json') }}
- name: Install backend dependencies
run: npm ci
working-directory: backend
- name: Restart pm2
run: pm2 restart 0 && pm2 restart 1
```
### 3. Изолируйте окружения
Если ни один из вышеупомянутых методов не работает, можно рассмотреть возможность создания отдельных jobs для каждой части вашего проекта, чтобы они были полностью изолированы друг от друга. Например:
```yaml
jobs:
build-frontend:
runs-on: self-hosted
steps:
# ваши шаги для фронтенда...
build-backend:
runs-on: self-hosted
needs: build-frontend
steps:
# ваши шаги для бэкенда...
```
Таким образом, каждый job будет выполняться на своей изолированной среде.
### 4. Проверьте логи вашего self-hosted runner
Также стоит проверить логи вашего self-hosted runner, чтобы убедиться, что нет каких-либо специфичных настроек, которые приводят к очистке папок. Многие системы CI/CD могут иметь очистные скрипты, которые могут вмешиваться в ваш workflow.
Следуя указанным выше рекомендациям, вы сможете предотвратить потерю зависимостей в папке `backend` и обеспечить успешную сборку вашего приложения.