Пайплайн автоматического обновления данных
Назначение и аудитория
Для разработчиков, которые хотят регулярно подтягивать публичные выгрузки (каталог Минфина, наборы ГИИС), прогонять минимальные проверки и сохранять снимок в репозитории или артефакте CI без ручного скачивания.
Входные данные
- URL источника — например https://minfin.gov.ru/opendata/list.csv (сводный каталог; см. открытые данные Минфина).
- Каталог для снимков — в примере ниже
data/в корне проекта (создаётся цельюdirs). - Секреты — для приватных API не храните токены в Makefile; используйте GitHub Actions secrets или переменные окружения CI.
- Правила качества — после скачивания прогоняйте проверки из контроля качества данных.
Инструменты
make(GNU Make) — оркестрация шагов на Unix/macOS; на Windows — WSL или GnuWin32.curl— HTTP GET сUser-Agent.- Git и при необходимости GitHub Actions — расписание и публикация артефактов.
Шаги
- Опишите цели в
Makefile: создание каталогов, загрузка, валидация, постобработка. - Зафиксируйте User-Agent и таймауты
curl(--max-time), логируйте HTTP-код. - Проверьте файл (не HTML-заглушка, не пустой): размер, заголовок CSV, контрольная сумма.
- В CI задайте
on: scheduleи ограничьте частоту, чтобы не перегружать оператора. - Коммитьте только после успешного шага проверки или выкладывайте как артефакт workflow без записи в git.
Воспроизводимый пример
Фрагмент Makefile
Сохраните как Makefile в корне репозитория и выполните make fetch-minfin-list (нужны curl и make).
DATA_DIR := data
.PHONY: dirs fetch-minfin-list
dirs:
mkdir -p $(DATA_DIR)
fetch-minfin-list: dirs
curl -fsS --max-time 120 \
-A "Mozilla/5.0 (compatible; finguide-pipeline/1.0)" \
-o $(DATA_DIR)/minfin-list.csv \
"https://minfin.gov.ru/opendata/list.csv"
@test -s $(DATA_DIR)/minfin-list.csv
@head -n 1 $(DATA_DIR)/minfin-list.csv | grep -q property || (echo "Не похоже на CSV каталога"; exit 1)
Фрагмент расписания GitHub Actions
on:
workflow_dispatch: {}
schedule:
- cron: "17 5 * * 1" # понедельник 05:17 UTC
jobs:
fetch:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Снимок каталога Минфина
run: make fetch-minfin-list
- uses: actions/upload-artifact@v4
with:
name: minfin-list
path: data/minfin-list.csv
Проверка результата
- После
make fetch-minfin-listфайлdata/minfin-list.csvне пустой, первая строка содержитproperty. curlзавершился с кодом 0; при ошибке сети цель падает и не оставляет пустой файл (при необходимости добавьтеrm -fперед повтором).- В Actions артефакт
minfin-listуспешно загружается из шагаupload-artifact.
Ограничения и типовые ошибки
- Условия использования данных — у Минфина и операторов других источников; автоматическая публикация снимков в git может не подходить по лицензии — уточняйте.
- Частые запросы — риск 429/блокировок; кешируйте и не опрашивайте чаще, чем меняется источник.
- Коммит бинарников раздувает историю — предпочитайте артефакты или внешнее объектное хранилище.
- Секреты в логах — не печатайте URL с токенами; маскируйте вывод
curl -v.
Связанные страницы
- Открытые данные Минфина (каталог и паспорта).
- Открытые данные Минфина России.
- Контроль качества данных.
- Работа с API budget.gov.ru — аналогичный паттерн для
budget.gov.ru.