-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit c54e178
Showing
29 changed files
with
978 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
name: Deploy | ||
|
||
on: | ||
push: | ||
branches: [main] | ||
workflow_dispatch: | ||
|
||
permissions: | ||
contents: read | ||
pages: write | ||
id-token: write | ||
|
||
concurrency: | ||
group: pages | ||
cancel-in-progress: false | ||
|
||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
|
||
- name: Setup Bun | ||
uses: oven-sh/setup-bun@v1 | ||
|
||
- name: Setup Pages | ||
uses: actions/configure-pages@v4 | ||
|
||
- name: Install dependencies | ||
run: bun install | ||
|
||
- name: Build with VitePress | ||
run: bun run build | ||
|
||
- name: Upload artifact | ||
uses: actions/upload-pages-artifact@v3 | ||
with: | ||
path: .vitepress/dist | ||
|
||
deploy: | ||
environment: | ||
name: github-pages | ||
url: ${{ steps.deployment.outputs.page_url }} | ||
needs: build | ||
runs-on: ubuntu-latest | ||
name: Deploy | ||
steps: | ||
- name: Deploy to GitHub Pages | ||
id: deployment | ||
uses: actions/deploy-pages@v4 |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
# VitePress dev/build outputs | ||
.vitepress/cache | ||
|
||
# Node dependencies | ||
node_modules | ||
|
||
# Logs | ||
logs | ||
*.log | ||
|
||
# Misc | ||
.DS_Store | ||
.fleet | ||
.idea | ||
|
||
# Local env files | ||
.env | ||
.env.* | ||
!.env.example |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
#!/bin/sh | ||
bun run lint:staged |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
{ | ||
"*.{js,jsx,cjs,mjs,ts,tsx,vue,css}": "eslint --fix" | ||
} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
import { defineConfig } from 'vitepress' | ||
|
||
export default defineConfig({ | ||
base: '/docs/', | ||
title: 'Bidaro', | ||
description: 'Макет реального веб-приложения в предметной области продажи товаров в форме английского онлайн-аукциона', | ||
themeConfig: { | ||
nav: [ | ||
{ text: 'О проекте', link: '/about/what-is-it', activeMatch: '/about/' }, | ||
{ text: 'Разработка', link: '/about-dev/what-is-dev', activeMatch: '/about-dev/' }, | ||
], | ||
sidebar: { | ||
'/about/': [ | ||
{ | ||
text: 'Начало', | ||
items: [ | ||
{ text: 'Что это такое?', link: '/about/what-is-it' }, | ||
{ text: 'Предметная область', link: '/about/subject-area' }, | ||
{ text: 'Бизнес анализ', link: '/about/business-analysis' }, | ||
{ text: 'Предыстория', link: '/about/prehistory' }, | ||
], | ||
}, | ||
{ | ||
text: 'Продукт', | ||
items: [ | ||
{ text: 'Общее видение', link: '/about/product/shared-vision' }, | ||
{ text: 'Бизнес модель', link: '/about/product/business-model' }, | ||
{ text: 'План разработки', link: '/about/product/development-plan' }, | ||
], | ||
}, | ||
{ | ||
text: 'Функционал', | ||
items: [ | ||
{ text: 'Аутентификация', link: '/about/feature/authentication' }, | ||
{ text: 'Авторизация', link: '/about/feature/authorization' }, | ||
{ text: 'Профили', link: '/about/feature/profiles' }, | ||
{ text: 'Торги', link: '/about/feature/bidding' }, | ||
{ text: 'Каталог', link: '/about/feature/catalog' }, | ||
{ text: 'Обслуживание', link: '/about/feature/maintenance' }, | ||
], | ||
}, | ||
{ | ||
text: 'Будущее', | ||
items: [ | ||
{ text: 'Изображения', link: '/about/future/images' }, | ||
{ text: 'Чатинг', link: '/about/future/chating' }, | ||
], | ||
}, | ||
], | ||
'/about-dev/': [ | ||
{ | ||
text: 'Разработка', | ||
items: [ | ||
{ text: 'Что такое разработка?', link: '/about-dev/what-is-dev' }, | ||
{ text: 'Инфраструктура', link: '/about-dev/infrastructure' }, | ||
{ text: 'Тестирование', link: '/about-dev/testing' }, | ||
], | ||
}, | ||
], | ||
}, | ||
}, | ||
}) |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
{ | ||
"recommendations": [ | ||
"dbaeumer.vscode-eslint" | ||
] | ||
} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
{ | ||
// Enable the ESlint flat config support | ||
"eslint.experimental.useFlatConfig": true, | ||
|
||
// Disable the default formatter, use eslint instead | ||
"prettier.enable": false, | ||
"editor.formatOnSave": false, | ||
|
||
// Auto fix | ||
"editor.codeActionsOnSave": { | ||
"source.fixAll": "explicit", | ||
"source.organizeImports": "never" | ||
}, | ||
|
||
// Silent the stylistic rules in you IDE, but still auto fix them | ||
"eslint.rules.customizations": [ | ||
{ "rule": "style/*", "severity": "off" }, | ||
{ "rule": "*-indent", "severity": "off" }, | ||
{ "rule": "*-spacing", "severity": "off" }, | ||
{ "rule": "*-spaces", "severity": "off" }, | ||
{ "rule": "*-order", "severity": "off" }, | ||
{ "rule": "*-dangle", "severity": "off" }, | ||
{ "rule": "*-newline", "severity": "off" }, | ||
{ "rule": "*quotes", "severity": "off" }, | ||
{ "rule": "*semi", "severity": "off" } | ||
], | ||
|
||
// Enable eslint for all supported languages | ||
"eslint.validate": [ | ||
"javascript", | ||
"javascriptreact", | ||
"typescript", | ||
"typescriptreact", | ||
"vue", | ||
"css", | ||
"less", | ||
"scss", | ||
"pcss", | ||
"postcss", | ||
"html", | ||
"markdown", | ||
"json", | ||
"jsonc", | ||
"yaml" | ||
] | ||
} |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
# Инфраструктура | ||
|
||
Под инфраструктурой понимается все компоненты и технологии, необходимые для разработки, развертывания и поддержки продукта в продакшен окружении. | ||
|
||
## Сервер | ||
|
||
Под сервером понимается кластер серверов под управлением kubernetes. Из вне, через IP-адресс, приходит запрос и попадает на ingress узел с load балансером, который далее определяет узел для обработки запроса и перенаправляет его туда. | ||
|
||
Каждый узел кластера имеет поднятный контейнер с основным приложением. | ||
|
||
Так же выделятся ряд узлов для основных хранилищ продукта. | ||
|
||
## Основное приложение | ||
|
||
Основное приложение продукта, с которым взаимодействуют пользователи, написано на фреймворке Nuxt 3 и совмещает в себе Frontend и Backend части. | ||
|
||
Пользовательская часть приложения посылает все запросы на серверную часть. | ||
|
||
Серверная часть приложения подключается ко внешним сервисам (основные хранилища, smtp сервер и т.д), принимает запросы от пользователей и производит необходимые манипуляции с данными (чтение, добавление, переадресацию и т.д.) при этом не сохраняя никакого состояния внутри себя. | ||
|
||
## Основные хранилища | ||
|
||
Для сохранения данных продукта (пользователи, лоты, токены, изображения и т.д.) используются специализированные хранилища запущеные в кластере kubernetes. | ||
|
||
- Для сохранения временных или часто используемых данных будет использоваться Redis как хранилище кеша. | ||
|
||
- Для сохранения всех остальных данных будет использоваться PostgreSQL как основная база данных. | ||
|
||
- Для сохранения резервных копий данных приложения будет использоваться отдельное внешнее файловое хранилище Google Drive. | ||
|
||
## DevOps и CI/CD | ||
|
||
Когда выходит новая версия основного приложения, запускаются процессы поставки новой версии на сервер в GitHub Actions. | ||
|
||
Что происходит на сервере: | ||
|
||
- Сервер переводится в maintenance режим. Все внешние запросы будут переводится на приложение с выдачей информации о техническом обслуживании продукта. | ||
|
||
- Удаляются все работающие экземпляры основного приложения. | ||
|
||
- Запускается процесс обновления контейнеров основного приложения и приложения для миграции. | ||
|
||
- Запускается обновленное приложения для миграции базы данных. | ||
|
||
- Запускаются экземпляры основного приложения. | ||
|
||
- Сервер переводится в рабочий режим. | ||
|
||
## Внешние интеграции | ||
|
||
### Сетевые компоненты | ||
|
||
Все, без исключения, пользователи будут взаимодействовать с продуктом через доменное имя (DNS, например auction.ua.com). Оно переводит пользователя по нашему IP адресу, где его принимает наш сервер. | ||
|
||
### Безопасность сети | ||
|
||
При создании соединения между пользователем и сервером, будет производится обмен SSL/TLS сертификатами от Let's Encrypt, которые будут шифровать передачу логинов, паролей и других важных данный. | ||
|
||
### Внешнее хранилище | ||
|
||
- Для сохранения полноценных файлов и изображений будет использоваться S3-совместимое объектное хранилище. | ||
|
||
### Внешние сервисы | ||
|
||
- Для произведения оплаты услуг пользователем, будет использоватся платежный сервис Fondy. | ||
|
||
- Для отправки рассылки пользователям, будет использоваться email провайдер Gmail. |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
# Тестирование | ||
|
||
Чтобы удостоверится в правильной работе продукта, в основные моменты изменения кода будет проходит его тестирование. Это поможет отловить баги и проблемы на ранних этапах и оперативно их исправить. | ||
|
||
Когда происходит тестирование: | ||
|
||
- При внесении изменений в исходный код. Запускаются unit и integration тесты на стороне разработчика, чтобы не допустить мелких ошибок с его стороны. | ||
|
||
- При создании запроса на слитие кода в develop ветку. Запускаются все виды тестов на стороне GitHub Actions. | ||
|
||
Таким образом достигается состояния, когда код из develop ветки может в любой момент выйти в релиз, так как все изменения прошли полное тестирование. | ||
|
||
## Виды тестов | ||
|
||
### Unit-тесты | ||
|
||
Чтобы протестировать маленькие части приложения, например composables фукнции, утилиты, хранилища и другое, используется unit тесты. | ||
|
||
Они выполняются очень быстро и это позволяет убедится в том, что функции которые могут быть на всех уровнях приложения работают без ошибок. | ||
|
||
### Integration-тесты | ||
|
||
Чтобы протестировать компоненты с которыми взаимодействует пользователь, например формы, используется интеграционные (или компонентные) тесты. | ||
|
||
### End-to-End тесты | ||
|
||
Задачей e2e тестов является протестировать основной поток пользователя, чтобы убедится что там нет ошибок. | ||
|
||
Например, что аутентификация с правильными данными работает так, как задуманно и пользователь попадает попадет в свой профиль. | ||
|
||
### End-to-End API тесты | ||
|
||
Задачей e2e тестов для API является проверка того, что запросы на серверную часть ожидаемо правильно обрабатываются. | ||
|
||
Например, что запрос на получение данных без токена возвращает ошибку, или запрос на вход в профиль с правильными данными возвращает успех. | ||
|
||
## Запуск тестов локально | ||
|
||
Когда разработчик запускает тесты на своем компютере, с unit и integration тестами проблем не возникает, так как они не выходят за рамки приложения, а все внешние запросы подменяются. А вот для e2e тестов внешние сервисы уже необходимы. | ||
|
||
Чтобы запустить такие тесты, на стороне разработчика нужно: | ||
|
||
- Поднять все внешние сервисы через docker | ||
|
||
- Создать копию `.env` с названием `.env.test` | ||
|
||
- Сделать миграцию базы данных через migrator | ||
|
||
После всех этих манипуляций, e2e тесты запустятся | ||
|
||
::: warning Важно! | ||
В `.env.test` адреса сервисов могут быть равны с `.env`, но названия базы данных или бакета s3 хранилища должны быть разными. Перед началом тестирования происходит полное удаление всех данных, чтобы ничего не мешало отслеживать эффекты от запуса тестов. | ||
::: | ||
|
||
## Запуск тестов через CI/CD | ||
|
||
Если запуск тестов локально требует вручную поднять docker контейнеры приложения, то через GitHub Actions достаточно будет [прописать сервисы в workflow файле](https://docs.github.com/en/actions/using-containerized-services/about-service-containers). |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
# Что такое разработка |
Oops, something went wrong.