diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000000..c49d00378a --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,82 @@ +# .github/workflows/**main.yml** +name: Django-app workflow + +on: [push] + +jobs: + tests: + # «Раннер» — создание изолированного окружения с последней версией Ubuntu + runs-on: ubuntu-latest + + steps: + # Запуск actions checkout — готового скрипта + # для клонирования репозитория + - uses: actions/checkout@v2 + - name: Set up Python + # Запуск actions setup-python — готового скрипта + # для развёртывания окружения Python + uses: actions/setup-python@v2 + with: + # Выбор версии Python + python-version: 3.7 + + - name: Install dependencies + run: | + # обновление pip + python -m pip install --upgrade pip + # установка flake8 и его плагинов + pip install flake8 pep8-naming flake8-broken-line flake8-return flake8-isort + # установка зависимостей + pip install -r requirements.txt + + - name: Test with flake8 and django tests + run: | + # запуск проверки проекта по flake8 + python -m flake8 + # перейти в папку, содержащую manage.py — + #<корневая_папка_infra_actions>/<папка_проекта>/manage.py + cd infra_project/ + # запустить написанные разработчиком тесты + + deploy: + runs-on: ubuntu-latest + needs: build_and_push_to_docker_hub + steps: + - name: executing remote ssh commands to deploy + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.HOST }} + username: ${{ secrets.USER_VM }} + key: ${{ secrets.SSH_KEY }} + passphrase: ${{ secrets.PASSPHRASE }} # Если ваш ssh-ключ защищён фразой-паролем + script: | + # Выполняет pull образа с DockerHub + sudo docker pull bednenko1604/test:v1 + #остановка всех контейнеров + sudo docker stop $(sudo docker ps -a -q) + sudo docker run --rm -d -p 5000:5000 bednenko1604/test:v1 + + build_and_push_to_docker_hub: + name: Push Docker image to Docker Hub + runs-on: ubuntu-latest + needs: tests + steps: + - name: Check out the repo + # Проверка доступности репозитория Docker Hub для workflow + uses: actions/checkout@v2 + - name: Set up Docker Buildx + # Вызов сборщика контейнеров docker + uses: docker/setup-buildx-action@v1 + - name: Login to Docker + # Запуск скрипта авторизации на Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.USER}} + password: ${{ secrets.PASSPHRASE}} + - name: Push to Docker Hub + # Пуш образа в Docker Hub + uses: docker/build-push-action@v2 + with: + push: true + tags: bednenko1604/test:v1 + diff --git a/README.md b/README.md index d9d36e32fe..9978667c63 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,12 @@ # infra_actions Учебный проект для изучения работы GitHub Actions (Яндекс Практикум) + +## Запуск проета +Клонировать репозиторий +```git clone git@github.com:<ваш_username>/infra_actions.git``` + +Создать и активровать окружение +```python -m venv venv && . venv/bin/activate``` + +Установить зависимости +```pip install -r requirements.txt ``` \ No newline at end of file diff --git a/infra_project/infra_app/tests.py b/infra_project/infra_app/tests.py index 77c89862cb..fb9d51d96a 100644 --- a/infra_project/infra_app/tests.py +++ b/infra_project/infra_app/tests.py @@ -1,4 +1,5 @@ from http import HTTPStatus + from django.test import Client, TestCase @@ -20,4 +21,4 @@ def test_page_shows_correct_content(self): self.assertContains(response, 'У меня получилось!') response = self.guest_client.get('/second_page/') - self.assertContains(response, 'А это вторая страница!') + self.assertContains(response, 'А это вторая страница') diff --git a/infra_project/infra_app/urls.py b/infra_project/infra_app/urls.py index 416b10259e..55822a6f33 100644 --- a/infra_project/infra_app/urls.py +++ b/infra_project/infra_app/urls.py @@ -6,6 +6,6 @@ urlpatterns = [ path('', views.index, name='index'), - path('second/', views.second_page, name='second_page'), + path('second_page/', views.second_page, name='second_page'), ] diff --git a/infra_project/infra_project/urls.py b/infra_project/infra_project/urls.py index 10c002baed..c6a29369be 100644 --- a/infra_project/infra_project/urls.py +++ b/infra_project/infra_project/urls.py @@ -14,7 +14,7 @@ 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin -from django.urls import path, include +from django.urls import include, path urlpatterns = [ path('', include('infra_app.urls', namespace='infra_app')), diff --git a/infra_project/manage.py b/infra_project/manage.py index 82ee86cfa0..7c05f4ea58 100644 --- a/infra_project/manage.py +++ b/infra_project/manage.py @@ -5,7 +5,8 @@ def main(): - os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'infra_project.settings') + os.environ.setdefault('DJANGO_SETTINGS_MODULE', + 'infra_project.settings') try: from django.core.management import execute_from_command_line except ImportError as exc: diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000000..9e61d1f172 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,12 @@ +[flake8] +ignore = + W503, + F811 +exclude = + tests/, + */migrations/, + venv/, + env/ +per-file-ignores = + */settings.py:E501 +max-complexity = 10