CI-бот
octocat triggered CIRepository: Fgeeha/max-action Event: push Ref: refs/heads/Master Commit: 0123456 Run: github.com/…/actions/runs/42
12:04

💬 Open source · GitHub Actions · MIT

MAX Action

Уведомления в мессенджер MAX прямо из workflow. Пуши, пул-реквесты, деплои и упавшие сборки приходят в чат, канал или личные сообщения.

Go Docker MAX Bot API GitHub Actions v1

GitHub Marketplace Релизы

Быстрый старт

Добавьте секреты MAX_TOKEN и MAX_CHAT_ID в настройках репозитория (Settings → Secrets and variables → Actions) и один шаг в workflow.

name: MAX notification

on:
  push:

jobs:
  notify:
    runs-on: ubuntu-latest
    steps:
      - name: Send MAX message
        uses: Fgeeha/max-action@v1
        with:
          token: ${{ secrets.MAX_TOKEN }}
          chat_id: ${{ secrets.MAX_CHAT_ID }}
          message: |
            ${{ github.actor }} pushed a commit

            Repository: ${{ github.repository }}
            Commit: ${{ github.sha }}

Тег @v1 всегда указывает на последний совместимый релиз.

Токен выдаётся при создании бота на платформе MAX для партнёров. Храните его только в GitHub Secrets.

chat_id — ID группового чата или канала, куда добавлен бот. ID групп и каналов бывают отрицательными, это нормально.

user_id — ID пользователя для личного сообщения. Передаётся вместо chat_id: action требует ровно одного получателя. Способы узнать ID описаны в документации MAX.

Что умеет

📨
Чат, канал или личка

Одно сообщение за запуск через официальный POST /messages. Получатель — chat_id или user_id, текст до 4000 символов.

📝
Текст из любого источника

Строка в message, файл из репозитория через message_file или готовая сводка о запуске, если текст не задан. Форматирование Markdown или HTML.

🔐
Токен не утекает

Токен маскируется до первой строки лога, идёт только в заголовке Authorization, вычищается из текстов ошибок. Редиректы запрещены, TLS не отключается.

🔁
Повторы без спама

Сетевые сбои, 429 и 502–504 повторяются с экспоненциальной задержкой и учётом Retry-After. Ошибки 400/401/403/404 не повторяются.

📤
Outputs для следующих шагов

message_id, recipient_type и recipient_id доступны через steps.<id>.outputs.

⚡
Быстрый старт шага

Готовый образ в GHCR на основе scratch, около 6 МБ. Ничего не компилируется в вашем workflow.

Примеры

Только при падении сборки
- name: Send failure notification
  if: ${{ failure() }}
  uses: Fgeeha/max-action@v1
  with:
    token: ${{ secrets.MAX_TOKEN }}
    chat_id: ${{ secrets.MAX_CHAT_ID }}
    format: markdown
    message: |
      ❌ Workflow failed

      Repository: ${{ github.repository }}
      Run: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
Текст из файла
- uses: actions/checkout@v4
- run: git log -1 --pretty=%B > notes.txt
- uses: Fgeeha/max-action@v1
  with:
    token: ${{ secrets.MAX_TOKEN }}
    chat_id: ${{ secrets.MAX_CHAT_ID }}
    message_file: notes.txt
Сводка о запуске без текста

Если message и message_file не заданы, action соберёт сообщение сам: кто запустил, репозиторий, событие, ветка, короткий SHA и ссылка на запуск — как в примере вверху страницы.

- uses: Fgeeha/max-action@v1
  with:
    token: ${{ secrets.MAX_TOKEN }}
    chat_id: ${{ secrets.MAX_CHAT_ID }}

Параметры

InputПо умолчаниюОписание
token—Токен бота MAX, обязателен
chat_id—ID чата или канала
user_id—ID пользователя для личного сообщения
messageсводка о запускеТекст, поддерживает многострочный ввод
message_file—UTF-8 файл, приоритетнее message
formatпустоmarkdown, html или пусто
notifytrueУведомлять получателей
disable_link_previewfalseНе строить превью ссылок
timeout15Таймаут запроса, 1–120 секунд
retries2Повторы после первой попытки, 0–5
debugfalseБезопасный отладочный лог без токена и текста
api_base_urlplatform-api2.max.ruБазовый URL API, для тестов и миграций
OutputОписание
message_idID отправленного сообщения, если API его вернул
recipient_typechat или user
recipient_idФактически использованный ID получателя

Под капотом

  • Go без сторонних зависимостей. HTTP-клиент на стандартной библиотеке, ответ API читается с лимитом 1 МиБ, неизвестные поля JSON игнорируются.
  • Docker Action. Статический бинарник в образе scratch, публикуется в GHCR при релизе. Работает на Linux-раннерах.
  • Цепочка сертификатов MAX. platform-api2.max.ru использует сертификат Russian Trusted CA, которого нет в стандартных хранилищах. Официальный бандл Минцифры вшит в бинарник и добавляется только в пул этого клиента; CI предупреждает за 90 дней до истечения срока.
  • Проверки. Unit-тесты с race detector, прогон action против заглушки API в CI, actions закреплены по SHA. Живой тест с настоящим токеном вынесен в отдельный ручной workflow.

README README на русском Сообщить о проблеме

← Все проекты