Excluding a folder from the Github action workflow
Задача
Предположим, что репозиторий имеет три папки:
app
extensions
checker
Папка app
- это фронтенд и GH-action обновляет её при обновлении ветки deploy
Папка extensions
может обновляться когда угодно, т.к. без отдельной команды деплоя она не будет учтена.
Таким образом action может обновлять две папки - app и extensions, а папка checker должна быть проигнорирована, т.к. бекенд чекер может иметь незавершённые процессы и его обновление - это отдельный процесс: сначала нужно заблокировать возможность создавать задачи на фронте, т.е. перевести в maintenance mode, долждаться завершения всех задач, потом обновить checker и снова активировать функции добавления на фронте.
Ранее action копировал полностью весь репозиторий в папку public (nginx/nextjs). Теперь же нам нужно модифицировать его, чтобы он копировал только две вышеуказанные папки.
Решение
Нужно использовать две отдельные команды rsync
для копирования только нужных папок.
Вот как это можно реализовать:
- name: Stop the pm2 and move the files, ~ dir
working-directory: /home/appuser
run: |
sudo pm2 stop app-name-app
sudo pm2 delete app-name-app
sudo rsync -av --checksum --inplace --progress actions-runner-easy-embed/_work/repo-name/repo-name/app/ /usr/share/nginx/domains/domain.com/public/app/
sudo rsync -av --checksum --inplace --progress actions-runner-easy-embed/_work/repo-name/repo-name/extension/ /usr/share/nginx/domains/domain.com/public/extension/
Альтернативный вариант с исключением:
Если вы хотите использовать одну команду с исключением папки checker
:
- name: Stop the pm2 and move the files, ~ dir
working-directory: /home/appuser
run: |
sudo pm2 stop app-name-app
sudo pm2 delete app-name-app
sudo rsync -av --checksum --inplace --progress --exclude='checker/' actions-runner-easy-embed/_work/repo-name/repo-name/ /usr/share/nginx/domains/domain.com/public/
Рекомендация:
Лучше использовать первый вариант с двумя командами, так как он:
- Более явно показывает что именно копируется
- Легче контролировать и отлаживать
- Избежите случайного копирования других файлов из корня