Skip to content

Main Ambassadors workflow #41

Main Ambassadors workflow

Main Ambassadors workflow #41

Workflow file for this run

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