Skip to content

Commit 2ed0c9c

Browse files
committed
Init base repo
0 parents  commit 2ed0c9c

60 files changed

Lines changed: 7565 additions & 0 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: Build and push docker
2+
3+
4+
on:
5+
push:
6+
branches: ['main']
7+
tags:
8+
- 'v*'
9+
10+
11+
env:
12+
REGISTRY: ghcr.io
13+
IMAGE_NAME: ${{ github.repository }}
14+
15+
16+
jobs:
17+
build-and-push-image:
18+
name: Build and push
19+
runs-on: ubuntu-latest
20+
permissions:
21+
contents: read
22+
packages: write
23+
steps:
24+
- name: Checkout repository
25+
uses: actions/checkout@v4
26+
- name: Log in to the Container registry
27+
uses: docker/login-action@v2
28+
with:
29+
registry: ${{ env.REGISTRY }}
30+
username: ${{ github.actor }}
31+
password: ${{ secrets.GITHUB_TOKEN }}
32+
- name: Extract metadata (tags, labels) for Docker
33+
id: meta
34+
uses: docker/metadata-action@v4
35+
with:
36+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
37+
tags: |
38+
type=ref,event=tag,enable=${{ startsWith(github.ref, 'refs/tags/v') }}
39+
type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/v') }}
40+
type=raw,value={{date 'YYYY-MM-DD_HH:mm:ss'}},enable=true
41+
- name: Build and push Docker image
42+
uses: docker/build-push-action@v4
43+
with:
44+
context: .
45+
file: cicd/Dockerfile
46+
push: true
47+
tags: ${{ steps.meta.outputs.tags }}
48+
labels: ${{ steps.meta.outputs.labels }}
49+
build-args: |
50+
APP_VERSION=${{ github.ref_name }}

.github/workflows/checks.yml

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
name: Test packages
2+
3+
4+
on:
5+
push:
6+
branches: ['main']
7+
pull_request:
8+
9+
10+
jobs:
11+
unittest-backend:
12+
name: Unit tests (backend)
13+
runs-on: ubuntu-latest
14+
defaults:
15+
run:
16+
shell: bash
17+
working-directory: ./backend
18+
services:
19+
postgres:
20+
image: postgres:15-alpine
21+
env:
22+
POSTGRES_HOST_AUTH_METHOD: trust
23+
options: >-
24+
--health-cmd pg_isready
25+
--health-interval 10s
26+
--health-timeout 5s
27+
--health-retries 5
28+
-p 5432:5432
29+
steps:
30+
- name: Checkout
31+
uses: actions/checkout@v4
32+
- uses: actions/setup-python@v4
33+
with:
34+
python-version: '3.11'
35+
- name: Install dependencies
36+
run: |
37+
python -m ensurepip
38+
python -m pip install --upgrade --no-cache-dir pip
39+
python -m pip install --upgrade --no-cache-dir -r requirements.txt -r requirements.dev.txt
40+
- name: Migrate DB
41+
run: |
42+
DB_DSN=postgresql://postgres@localhost:5432/postgres alembic upgrade head
43+
- name: Build coverage file
44+
run: |
45+
DB_DSN=postgresql://postgres@localhost:5432/postgres pytest --junitxml=pytest.xml --cov-report=term-missing:skip-covered --cov=my_app_api tests/ | tee pytest-coverage.txt
46+
- name: Print report
47+
if: always()
48+
run: |
49+
cat pytest-coverage.txt
50+
- name: Pytest coverage comment
51+
uses: MishaKav/pytest-coverage-comment@main
52+
if: github.event_name == 'pull_request'
53+
with:
54+
pytest-coverage-path: ./pytest-coverage.txt
55+
title: Coverage Report
56+
badge-title: Code Coverage
57+
hide-badge: false
58+
hide-report: false
59+
create-new-comment: false
60+
hide-comment: false
61+
report-only-changed-files: false
62+
remove-link-from-badge: false
63+
junitxml-path: ./pytest.xml
64+
junitxml-title: Summary
65+
66+
67+
linting-backend:
68+
name: Style tests (backend)
69+
runs-on: ubuntu-latest
70+
defaults:
71+
run:
72+
shell: bash
73+
working-directory: ./backend
74+
steps:
75+
- name: Checkout
76+
uses: actions/checkout@v4
77+
- uses: actions/setup-python@v2
78+
with:
79+
python-version: 3.11
80+
- uses: isort/isort-action@master
81+
with:
82+
requirementsFiles: "requirements.txt requirements.dev.txt"
83+
- uses: psf/black@stable
84+
- name: Comment if linting failed
85+
if: failure() && github.event_name == 'pull_request'
86+
uses: thollander/actions-comment-pull-request@v2
87+
with:
88+
message: |
89+
:poop: Code linting failed, use `black` and `isort` to fix it.
90+
91+
92+
linting-frontend:
93+
name: Style tests (frontend)
94+
runs-on: ubuntu-latest
95+
defaults:
96+
run:
97+
shell: bash
98+
working-directory: ./frontend
99+
steps:
100+
- name: Checkout
101+
uses: actions/checkout@v4
102+
- name: cd into folder
103+
run: cd frontend
104+
- uses: actions/setup-node@v3
105+
with:
106+
node-version: '18'
107+
- name: Install
108+
run: npm ci
109+
- name: Check
110+
run: npm run check

LICENSE

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
BSD 3-Clause License
2+
3+
Copyright (c) 2024
4+
All rights reserved.
5+
6+
Redistribution and use in source and binary forms, with or without
7+
modification, are permitted provided that the following conditions are met:
8+
9+
1. Redistributions of source code must retain the above copyright notice, this
10+
list of conditions and the following disclaimer.
11+
12+
2. Redistributions in binary form must reproduce the above copyright notice,
13+
this list of conditions and the following disclaimer in the documentation
14+
and/or other materials provided with the distribution.
15+
16+
3. Neither the name of the copyright holder nor the names of its
17+
contributors may be used to endorse or promote products derived from
18+
this software without specific prior written permission.
19+
20+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Makefile

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
build:
2+
docker compose --file ./cicd/docker-compose.yml build
3+
4+
up: start
5+
run: start
6+
start: stop
7+
docker compose --file ./cicd/docker-compose.yml up --detach
8+
9+
stop:
10+
docker compose --file ./cicd/docker-compose.yml down
11+
12+
configure:
13+
cd backend && python3.11 -m venv venv
14+
cd backend && source ./venv/bin/activate && pip install -r requirements.dev.txt -r requirements.txt
15+
cd frontend && npm install
16+
17+
format:
18+
cd backend && source ./venv/bin/activate && autoflake -r --in-place --remove-all-unused-imports ./my_app_api
19+
cd backend && source ./venv/bin/activate && isort ./my_app_api
20+
cd backend && source ./venv/bin/activate && black ./my_app_api
21+
cd frontend && npm run lint
22+
cd frontend && npm run format
23+
cd frontend && npm run stylelint

README.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Пример приложения
2+
3+
В этом репозитории представлен пример простейшего сервиса с использованием Python FastAPI приложения
4+
в качестве бэкэнда приложения, и Vue.js приложения в качестве фронтенда.
5+
6+
7+
## Рекомендуемые пакеты для разработки
8+
- Git
9+
- Make
10+
- Docker
11+
- Docker Compose
12+
- Python 3.12
13+
- Node.js v18
14+
- VS Code
15+
16+
17+
## Инструкции
18+
### Получение кода на свой компьютер
19+
Для работы с данным примером необходимо забрать его к себе на ПК. Для этого нужно:
20+
1. *(Опционально)* Если вы хотите далее опубликовать код на GitHub полезно сначала скопировать
21+
репозиторий к себе кнопкой Fork на GitHub. Кнопка доступна в правом верхнем углу
22+
[страницы репозитория](https://github.com/profcomff/app-template).
23+
2. Создайте папку в удобном вам расположении.
24+
- *Удобно создать папку на рабочем столе с названием вашего приложения.*
25+
3. Откройте приложение "Командная строка" или "Терминал", в зависимости от операционной системы.
26+
4. Прейдите в папку проекта командой `cd /путь/к/папке`.
27+
- Если вы пользователь windows и создали на рабочем столе папку `my_app`, то команда будет
28+
выглядеть так: `cd %userprofile%/Desktop/my_app`
29+
- Если вы пользователь linux или MacOS и создали на рабочем столе папку `my_app`, то команда
30+
будет выглядеть сделующим образом: `cd ~/Desktop/my_app`
31+
5. Склонируйте код репозитория к себе на ПК командой
32+
`git clone https://github.com/profcomff/app-template.git .` (точка в конце означает скачивание
33+
кода в текущую папку). Если вы выполнили пункт 1 используйте в команде ссылку из зеленой кнопки
34+
"Code" в правом верхнем углу вашего репозитория.
35+
6. Откройте код в удобной среде разработки. Рекомендуем использовать VSCode, который можно открыть
36+
из терминала командой `code .`
37+
38+
### Сборка и запуск приложения для публикации
39+
Сборка исходного кода в один пакет производится с помощью Docker. В этом случае создается
40+
независимый от операционной системы пакет, который можно без проблем разместить на любом сервере.
41+
42+
Выполните команду `make` для сборки приложения. После окончания выполнения этой команды будет создан
43+
новый Docker образ с названием `my_app`, который можно запустить командой `make run`
44+
45+
### Разработка API на Python
46+
Код приложения находится в папке `backend`. Подробную инструкцию можно найти в [README.md](backend/README.md).
47+
48+
### Frontend разработка на Vue.js
49+
Код приложения находится в папке `frontend`. Подробную инструкцию можно найти в [README.md](frontend/README.md).
50+
51+
### Написание документации
52+
Код документации находится в папке `docs`. Подробную инструкцию можно найти в [README.md](docs/README.md).
53+
54+
### Автосборка
55+
Коммит в main запускает автоматическую сборку проекта средствами GitHub Actions. Настройки автосборки находятся в
56+
файле [.github/workflows/build_and_publish.yml](.github/workflows/build_and_publish.yml).
57+
58+
### Тесты на Pull Request
59+
При создании запроса на слияние, автоматически создаются проверки кода юниттестами и на стили.
60+
Следующие тесты будут запущены:
61+
- Проверки `isort` на верную сортировку импортов в папке `backend`
62+
- Проверки `black` на верный стиль написания кода в папке `backend`
63+
- Юнит тесты `pytest` из папки [tests](backend/tests) на код в папке `backend`
64+
- Проверки стилей `eslint`, `prettier`, `stylelint` на код в папке `frontend`
65+
66+
Настройки автотестов находятся в файле[.github/workflows/checks.yml](.github/workflows/checks.yml).
67+
68+
### Публикация готового приложения
69+
TODO: Предложить быстрый и бесплатный способ деплоя Docker контейнеров

backend/.dockerignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
venv/
2+
requirements.dev.txt

0 commit comments

Comments
 (0)