mnemo_cards/.forgejo/workflows/FIX_FLUTTER_GIT.md
2025-11-19 23:46:22 +03:00

5.6 KiB
Raw Blame History

Исправление ошибки "Flutter directory is not a clone of the GitHub project"

Дата: 19 ноября 2025
Статус: Исправлено

Проблема

При выполнении CI/CD workflow для web app получали ошибку:

Error: The Flutter directory is not a clone of the GitHub project.
       The flutter tool requires Git in order to operate properly;
       to install Flutter, see the instructions at:
       https://flutter.dev/get-started

Причина

Flutter SDK требует наличия Git для своей работы, так как:

  1. Flutter проверяет целостность своего SDK через Git
  2. Flutter использует Git для управления своими компонентами
  3. В некоторых runner'ах Git может не быть установлен по умолчанию

Решение

Добавлены следующие изменения во все Flutter workflow:

1. Полный checkout репозитория

Было:

- name: Checkout code
  uses: actions/checkout@v4

Стало:

- name: Checkout code
  uses: actions/checkout@v4
  with:
    fetch-depth: 0  # Полная история Git

2. Явная установка Git

Добавлен новый шаг перед Setup Flutter:

- name: Install Git
  run: |
    sudo apt-get update
    sudo apt-get install -y git    

3. Включение кеширования Flutter

Было:

- name: Setup Flutter
  uses: subosito/flutter-action@v2
  with:
    flutter-version: '3.35.5'
    channel: 'stable'

Стало:

- name: Setup Flutter
  uses: subosito/flutter-action@v2
  with:
    flutter-version: '3.35.5'
    channel: 'stable'
    cache: true  # Включено кеширование

Обновленные файлы

  1. .forgejo/workflows/ci-web.yml - Web App CI

    • Job: test - обновлен
    • Job: build - обновлен
  2. .forgejo/workflows/ci-mobile.yml - Mobile App CI

    • Все jobs обновлены (3 job'а)
  3. .forgejo/workflows/code-quality.yml - Code Quality

    • Job обновлен

Преимущества изменений

1. Полная история Git (fetch-depth: 0)

  • Позволяет Git командам работать корректно
  • Необходимо для некоторых Flutter операций
  • Полезно для анализа изменений

2. Явная установка Git

  • Гарантирует наличие Git в runner
  • Избегает зависимости от базового образа
  • Работает на разных платформах (GitHub Actions, Forgejo Actions)

3. Кеширование Flutter (cache: true)

  • Ускоряет установку Flutter SDK
  • Экономит время на повторных запусках
  • Уменьшает нагрузку на сеть

Проверка

После применения изменений:

  1. Commit изменения:

    git add .forgejo/workflows/
    git commit -m "fix: Add Git installation for Flutter workflows"
    git push origin master
    
  2. Запустить workflow вручную через Forgejo UI:

    • Перейти в Actions
    • Выбрать workflow (например, Web App CI)
    • Нажать "Run workflow"
  3. Проверить логи:

    • Шаг "Install Git" должен выполниться успешно
    • Шаг "Setup Flutter" должен пройти без ошибок
    • Шаг "Build web app" должен завершиться успешно

Альтернативные решения

Если проблема сохраняется, можно попробовать:

1. Использовать Docker образ с предустановленным Flutter

jobs:
  build:
    runs-on: ubuntu-latest
    container:
      image: ghcr.io/cirruslabs/flutter:3.35.5

2. Установить Flutter вручную

- name: Install Flutter manually
  run: |
    git clone https://github.com/flutter/flutter.git -b stable
    echo "$PWD/flutter/bin" >> $GITHUB_PATH    

3. Использовать flutter-action с git-path

- name: Setup Flutter
  uses: subosito/flutter-action@v2
  with:
    flutter-version: '3.35.5'
    channel: 'stable'
    cache: true
    git-path: /usr/bin/git

Версия Flutter

Во всех workflow используется Flutter 3.35.5 stable, как указано в требованиях.

Дополнительные настройки

Если используется self-hosted runner

На self-hosted runner нужно убедиться что Git установлен:

# На сервере runner'а
ssh root@147.45.152.129

# Проверить Git
git --version

# Если не установлен
sudo apt-get update
sudo apt-get install -y git

Если нужно обновить Flutter на сервере

# На сервере
cd /path/to/flutter
git fetch
git checkout stable
git pull
flutter doctor

Статус

🟢 ИСПРАВЛЕНО

Все Flutter workflow обновлены и должны работать корректно.


Примечание: Изменения применены ко всем workflow файлам, использующим Flutter, чтобы обеспечить единообразие и избежать подобных проблем в будущем.