Main Ambassadors workflow #27
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Main Ambassadors workflow | |
on: | |
workflow_dispatch: | |
jobs: | |
linter_test: | |
name: Test backend with linter | |
runs-on: ubuntu-latest | |
steps: | |
# Копирование репозитория из GitHub | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
# Установка python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.12.2 | |
cache: "pip" | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install -r ./backend/requirements.lint.txt | |
- name: Test with flake8 | |
run: | | |
cd backend/ | |
python -m flake8 . | |
pytest_test: | |
runs-on: ubuntu-latest | |
services: | |
postgres: | |
image: postgres:16.1 | |
env: | |
POSTGRES_USER: test_user | |
POSTGRES_PASSWORD: test_password | |
POSTGRES_DB: django_db | |
ports: | |
- 5432:5432 | |
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 | |
steps: | |
# Копирование репозитория из GitHub | |
- uses: actions/checkout@v4 | |
- name: Set up Python | |
# Установка python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: 3.12.2 | |
cache: "pip" | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install -r ./backend/requirements.txt | |
- name: Test with pytest | |
env: | |
POSTGRES_USER: test_user | |
POSTGRES_PASSWORD: test_password | |
POSTGRES_DB: django_db | |
DB_HOST: 127.0.0.1 | |
DB_PORT: 5432 | |
run: | | |
cd backend/ | |
python manage.py makemigrations | |
pytest | |
build_and_push_to_docker_hub: | |
name: Push Docker image to DockerHub | |
runs-on: ubuntu-latest | |
needs: | |
- linter_test | |
- pytest_test | |
steps: | |
- name: Check out the repo | |
# Получение исходного кода из репозитория | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
# Установка сборщика контейнеров Docker | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to Docker | |
# Авторизация на Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Push to DockerHub | |
# Одновременный билд и пуш образа в Docker Hub | |
uses: docker/build-push-action@v5 | |
with: | |
context: ./backend/ | |
push: true | |
tags: aleksey2299/ambassadors_backend:latest | |
build_gateway_and_push_to_docker_hub: | |
name: Push nginx Docker image to DockerHub | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out the repo | |
# Получение исходного кода из репозитория | |
uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
# Установка сборщика контейнеров Docker | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to Docker | |
# Авторизация на Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Push to DockerHub | |
# Одновременный билд и пуш образа в Docker Hub | |
uses: docker/build-push-action@v5 | |
with: | |
context: ./nginx/ | |
push: true | |
tags: aleksey2299/ambassadors_nginx:latest | |
deploy: | |
runs-on: ubuntu-latest | |
needs: | |
- build_and_push_to_docker_hub | |
- build_gateway_and_push_to_docker_hub | |
steps: | |
- name: Checkout repo | |
# Получение исходного кода из репозитория | |
uses: actions/checkout@v4 | |
# Копируем docker-compose.production.yml на продакшен-сервер | |
- name: Copy docker-compose.yml via ssh | |
uses: appleboy/scp-action@master | |
# Передаём параметры для action appleboy/scp-action: | |
with: | |
host: ${{ secrets.HOST }} | |
username: ${{ secrets.USER }} | |
key: ${{ secrets.SSH_KEY }} | |
passphrase: ${{ secrets.SSH_PASSPHRASE }} | |
source: "docker-compose.production.yml" | |
target: "ambassadors" | |
- name: Executing remote ssh commands to deploy | |
uses: appleboy/ssh-action@master | |
with: | |
host: ${{ secrets.HOST }} | |
username: ${{ secrets.USER }} | |
key: ${{ secrets.SSH_KEY }} | |
passphrase: ${{ secrets.SSH_PASSPHRASE }} | |
# Параметр script передаёт в action appleboy/ssh-action команды, | |
# которые нужно выполнить на сервере, | |
# с которым установлено соединение | |
script: | | |
cd ambassadors | |
sudo docker compose -f docker-compose.production.yml pull | |
sudo docker compose -f docker-compose.production.yml down | |
sudo docker compose -f docker-compose.production.yml up -d |