Skip to content

Add docker build frontend #24

Add docker build frontend

Add docker build frontend #24

Workflow file for this run

name: Main RecipeBook Workflow
on:
push:
branches:
- master
jobs:
tests:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:13.10
# Указываем имя тестовой базы, имя и пароль пользователя в открытом виде,
# ведь эта база будет работать только во время прогона тестов
env:
POSTGRES_USER: django_user
POSTGRES_PASSWORD: django_password
POSTGRES_DB: django_db
ports:
- 5432:5432
# Эта конструкция описывает проверку готовности сервиса postgres
# Если её не будет, то тесты могут запуститься раньше, чем сервер PostgreSQL
# В результате тесты опять решат, что базы нет, — и упадут
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
steps:
- name: Check out code
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.9
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8==6.0.0
pip install -r ./backend/requirements.txt
- name: Test with flake8 and django tests
env:
POSTGRES_USER: django_user
POSTGRES_PASSWORD: django_password
POSTGRES_DB: django_db
# Сервер БД запущен в Docker, но его порт проброшен на хост
# Поэтому подключаемся к 127.0.0.1:5432
DB_HOST: 127.0.0.1
DB_PORT: 5432
run: |
python -m flake8 backend/
cd backend/
python manage.py test
build_and_push_to_docker_hub:
name: Push Docker image to DockerHub
runs-on: ubuntu-latest
needs: tests
steps:
- name: Check out the repo
# Получение исходного кода из репозитория
uses: actions/checkout@v3
- name: Set up Docker Buildx
# Установка сборщика контейнеров Docker
uses: docker/setup-buildx-action@v2
- name: Login to Docker
# Авторизация на Docker Hub
uses: docker/login-action@v2
# При помощи with передаём в action параметры username и password
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Push to DockerHub
# Одновременный билд и пуш образа в Docker Hub
uses: docker/build-push-action@v4
with:
# Параметр context: ./backend/ указывает, что нужный Dockerfile
# находится в ./backend/
context: ./backend/
# Параметр push: true указывает, что образ нужно не только собрать,
# но и отправить на Docker Hub
push: true
# В параметре tags задаётся название и тег для образа.
# Для каждого пересобранного образа
# устанавливаем тег latest, чтобы потом
# на сервере и в docker-compose.yml не указывать версию
tags: ${{ secrets.DOCKER_USERNAME }}/recipebook_backend:latest
frontend_tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up nodeJS
# Это готовый воркфлоу для установки Node.js на раннер
uses: actions/setup-node@v3
with:
# Это параметр воркфлоу, указывающий нужную версию Node.js
node-version: 18
# node-version: 14.21.3-alpine
- name: Install dependencies
# Эта команда устанавливает зависимости для фронтенда
run: |
cd frontend/
npm ci
- name: Test frontend
# Запускаем тесты
run: |
cd frontend/
npm run test
build_frontend_and_push_to_docker_hub:
name: Push frontend Docker image to DockerHub
runs-on: ubuntu-latest
needs: frontend_tests
steps:
- name: Check out the repo
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Login to Docker
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Push to DockerHub
uses: docker/build-push-action@v4
with:
context: ./frontend/
push: true
tags: ${{ secrets.DOCKER_USERNAME }}/recipebook_frontend:latest