ff5df68bce
Release / publish-packages (push) Failing after 21m11s
Release / release (push) Successful in 1h35m7s
Release / trigger-coopenomics-docs (push) Successful in 3s
Release / trigger-mono-docs (push) Successful in 3s
Build bootstrap container / build (push) Successful in 10m29s
🔄 migrator
Утилита миграции данных между версиями платформы «Цифровой Кооператив»
Описание
migrator — система автоматических миграций для данных и смарт-контрактов платформы. Использует паттерн фабрики для динамической загрузки и последовательного выполнения миграционных скриптов. Отслеживает состояние миграций через JSON-файл и гарантирует применение только новых, ещё не выполненных миграций.
Поддерживает несколько окружений (local, test, prod) с раздельной конфигурацией через .env файлы.
Возможности
- Автоматическое отслеживание — JSON-файл состояния хранит последнюю выполненную миграцию для каждого окружения
- Инкрементальное применение — выполняются только новые миграции, пропуская уже применённые
- Паттерн Factory — динамическая загрузка миграционных скриптов через
MigrationFactory - Множество окружений — раздельные
.envфайлы дляlocal,testиprod - Утилиты — вспомогательные функции для работы с черновиками документов, переводами и блокчейн-операциями
Установка
pnpm install --filter migrator
Скрипты
| Скрипт | Описание |
|---|---|
pnpm run local |
Запуск миграций для локального окружения |
pnpm run test |
Запуск миграций для тестового окружения |
pnpm run prod |
Запуск миграций для production-окружения |
Все скрипты запускаются из корня монорепозитория через фильтр:
pnpm --filter migrator run <скрипт>
Конфигурация
Создайте .env файлы для каждого окружения в корне компонента:
local.env— локальная разработкаtest.env— тестовое окружениеprod.env— production
Основные переменные: endpoint блокчейна, приватные ключи для подписи транзакций. Подробности — в примерах .env файлов.
Архитектура
├── migrations/ # Миграционные скрипты
│ ├── 043_edit_selected_draft.ts
│ ├── 044_create_drafts.ts
│ └── ... # Нумерованные по порядку
├── src/
│ ├── index.ts # Точка входа — загрузка .env и запуск
│ ├── migrator.ts # Основная логика: загрузка состояния, выполнение миграций
│ ├── factory.ts # Фабрика загрузки миграционных скриптов
│ ├── migration_interface.ts # Интерфейс миграции
│ ├── eos.ts # Утилиты для работы с блокчейном EOSIO
│ └── utils/ # Вспомогательные утилиты
│ ├── createDraft.ts # Создание черновиков документов
│ ├── editDraft.ts # Редактирование черновиков
│ ├── editTranslation.ts # Работа с переводами
│ └── dirname.ts # ESM-совместимый __dirname
└── migration_state.json # Состояние выполненных миграций (per-env)
Жизненный цикл миграции
- Загружается файл состояния
migration_state.json - Определяется последняя выполненная миграция для текущего окружения
- Из директории
migrations/выбираются все скрипты после последней выполненной - Каждая миграция загружается через
MigrationFactoryи выполняется последовательно - После успешного выполнения состояние обновляется
Тестирование
pnpm --filter migrator run test