Skip to content

Latest commit

 

History

History
325 lines (247 loc) · 13.1 KB

File metadata and controls

325 lines (247 loc) · 13.1 KB

GitHub Actions Integration — Accellens

Версия: 1.0 Дата: 10 ноября 2025


1. Обзор

Официальный GitHub Action accellens/github-action предоставляет запуск web сканов как часть CI pipelines. Поддерживает PR-комментарии, статусные проверки и загрузку отчётов.


2. Установка

Создайте workflow (например, .github/workflows/accellens-scan.yml):

name: Accessibility Scan

on:
  pull_request:
    branches: [main, develop]
  push:
    branches: [main]
  workflow_dispatch:
    inputs:
      urls:
        description: 'URLs to scan (comma-separated or file path)'
        required: false
        type: string
      dry-run:
        description: 'Run in dry-run mode (mock credentials, no real scan)'
        required: false
        type: boolean
        default: false

jobs:
  accessibility:
    runs-on: ubuntu-latest
    name: Accellens Accessibility Scan

    permissions:
      contents: read
      pull-requests: write
      issues: write

    steps:
      - name: Checkout code
        uses: actions/checkout@v6

      - name: Run Accellens Scan
        id: accellens-scan
        uses: ./.github/actions/accellens-scan
        with:
          project: ${{ secrets.ACCELLENS_PROJECT || 'mysite' }}
          urls: ${{ github.event.inputs.urls || './urls.txt' }}
          token: ${{ secrets.ACCELLENS_TOKEN }}
          api-url: ${{ secrets.ACCELLENS_API_URL || 'https://api.accellens.dev' }}
          fail-on: high
          output-format: json
          comment-pr: true
          upload-artifact: true
          dry-run: ${{ github.event.inputs.dry-run || 'false' }}

      - name: Upload report artifact
        if: always()
        uses: actions/upload-artifact@v5
        with:
          name: accellens-report
          path: accellens-report.json
          retention-days: 30
          if-no-files-found: ignore

      - name: Display scan results
        if: always()
        run: |
          echo "Scan ID: ${{ steps.accellens-scan.outputs.scan-id }}"
          echo "Findings Count: ${{ steps.accellens-scan.outputs.findings-count }}"
          echo "Critical Findings: ${{ steps.accellens-scan.outputs.findings-critical }}"
          echo "High Findings: ${{ steps.accellens-scan.outputs.findings-high }}"

Примечание: Для использования action из другого репозитория, замените ./.github/actions/accellens-scan на Tridention/Accessibility-Intelligence-Platform/.github/actions/accellens-scan@v1 после публикации.

2.1 Dry-Run режим

Для тестирования workflow без реальных API вызовов используйте dry-run режим:

- name: Run Accellens Scan (Dry-Run)
  uses: ./.github/actions/accellens-scan
  with:
    project: sample-project
    urls: ./urls.txt
    token: mock-token-for-dry-run
    dry-run: 'true'

Dry-run режим:

  • ✅ Использует mock credentials (не требует реального токена)
  • ✅ Генерирует mock результаты сканирования
  • ✅ Создаёт mock отчёты (JSON/SARIF/PDF)
  • ✅ Не выполняет реальные API вызовы
  • ✅ Завершается успешно за ~2-3 секунды

Подробные логи успешного запуска см. в github-actions-dry-run-logs.md.


3. Параметры Action

Параметр Обязателен Значение по умолчанию Описание
project ✅ - Slug проекта в платформе
urls ✅ - Путь к файлу со списком URL или одиночный URL
token ✅ - API токен (GitHub secret). Используйте mock-token-for-dry-run для dry-run режима
api-url ❌ https://api.accellens.dev Базовый URL API Accellens
fail-on ❌ none Уровень, при котором workflow завершается с ошибкой (critical, high, medium, low, none)
output-format ❌ json json, pdf, sarif
extra-headers ❌ - Дополнительные HTTP заголовки (JSON строка)
wait-timeout ❌ 900 Таймаут ожидания завершения (секунд)
comment-pr ❌ true Публиковать результаты в PR комментариях
upload-artifact ❌ true Загружать отчёт как артефакт
dry-run ❌ false Запустить в dry-run режиме (mock credentials, no real scan)

4. Выходные данные

  • Артефакт отчёта (accellens-report.json/pdf) — загружается автоматически.
  • PR комментарий — автоматически публикуется в Pull Request с summary findings.
  • Outputs:
    • scan-id — ID завершенного сканирования
    • report-path — путь к файлу отчёта
    • findings-count — общее количество findings
    • findings-critical — количество critical findings
    • findings-high — количество high severity findings

5. Секреты и безопасность

  • ACCELLENS_TOKEN хранится в GitHub Secrets (org/team repo).
  • Токен имеет scope scan:write и report:read для конкретного проекта.
  • Optionally, используйте GitHub OIDC для short-lived токенов (roadmap).

6. Ограничения

  • Максимум 20 URL за запуск (MVP).
  • Скан занимает до 10 минут; увеличивайте wait-timeout при необходимости.
  • Mobile сканы не поддерживаются (будет отдельный action v1+).

7. Troubleshooting

7.1 Общие проблемы

Симптом Причина Решение
Workflow timeout Длинные сканы Увеличить wait-timeout, оптимизировать URL список
HTTP 401 Неверный токен Обновить secret, проверить права
Action не пишет отчёт Недостаточно прав на workspace Убедиться в праве write на repo
CLI installation failed Проблемы с npm registry Проверить доступность npm, использовать npm config set registry
Scan ID not found Неверный формат scan ID Проверить, что scan завершился успешно

7.2 Dry-Run режим

Проблема: Dry-run не активируется

Решение:

  1. Убедитесь, что dry-run: 'true' установлен в inputs
  2. Или используйте token: mock-token-for-dry-run
  3. Проверьте логи на наличие сообщения ⚠️ DRY-RUN MODE

Проблема: Dry-run генерирует пустой отчёт

Решение:

  1. Проверьте, что output-format указан корректно (json, pdf, sarif)
  2. Убедитесь, что файл accellens-report.{format} создан в workspace

7.3 Валидация конфигурации

Для проверки конфигурации workflow без реальных сканов:

# Локальная валидация YAML
yamllint .github/workflows/accellens-scan.yml

# Проверка через act (локальный GitHub Actions runner)
act workflow_dispatch -W .github/workflows/accellens-scan.yml \
  --input dry-run=true \
  --secret ACCELLENS_TOKEN=mock-token-for-dry-run

7.4 Примеры успешного запуска

Dry-Run режим:

⚠️  DRY-RUN MODE: Using mock credentials and simulated scan results
🔍 Running in DRY-RUN mode (mock credentials, no real scan)
Project: sample-project
URLs: ./urls.txt
Output format: json
Installing Accellens CLI...
✓ CLI installed successfully (mock)
Authenticating CLI...
✓ Authentication successful (mock)
Starting scan...
✓ Scan completed successfully (mock)
Scan ID: dry-run-abc123xyz
Generating report...
✓ Report saved to accellens-report.json
✓ Dry-run completed successfully

Реальный запуск:

Installing Accellens CLI...
✓ CLI installed successfully
Authenticating CLI...
✓ Authentication successful
Starting scan for project: mysite
Scan ID: 550e8400-e29b-41d4-a716-446655440000
Waiting for scan to complete (timeout: 900s)...
Scan status: running, waiting...
✓ Scan completed successfully
Fetching report...
✓ Report saved to accellens-report.json
✓ PR comment posted

7.5 Отладка

Включите debug логирование:

- name: Run Accellens Scan
  env:
    ACTIONS_STEP_DEBUG: true
    ACTIONS_RUNNER_DEBUG: true
  uses: ./.github/actions/accellens-scan
  with:
    # ... параметры

Проверьте outputs:

- name: Debug outputs
  if: always()
  run: |
    echo "Scan ID: ${{ steps.accellens-scan.outputs.scan-id }}"
    echo "Report Path: ${{ steps.accellens-scan.outputs.report-path }}"
    echo "Findings: ${{ steps.accellens-scan.outputs.findings-count }}"

8. Roadmap интеграций

  • PR annotations с подсветкой строк (v1).
  • Mobile scan action (accellens/mobile-action@v1).
  • Slack уведомления (via workflow dispatch).

Другие CI/CD интеграции: См. GitLab CI, Jenkins, CircleCI, Azure DevOps, Bitbucket Pipelines.


9. Примеры использования

9.1 Базовый пример

См. .github/workflows/accellens-scan.yml в репозитории для полного примера конфигурации.

9.2 Dry-Run валидация

Для тестирования workflow без реальных API вызовов:

- name: Validate workflow (Dry-Run)
  uses: ./.github/actions/accellens-scan
  with:
    project: test-project
    urls: https://example.com
    token: mock-token-for-dry-run
    dry-run: 'true'

Подробные логи успешного запуска см. в github-actions-dry-run-logs.md.

9.3 Результаты выполнения

Успешный dry-run:

  • ✅ Workflow завершается успешно за ~2-3 секунды
  • ✅ Генерируется mock отчёт с примерными данными
  • ✅ Все outputs установлены корректно
  • ✅ Артефакт загружается (если upload-artifact: true)

Успешный реальный запуск:

  • ✅ Scan выполняется и завершается успешно
  • ✅ Отчёт содержит реальные findings
  • ✅ PR комментарий публикуется (если comment-pr: true)
  • ✅ Workflow может завершиться с ошибкой, если fail-on условие выполнено

10. Связанные документы