aenvs/.docs/02-opus-cli-docs/06-errors.md

7.1 KiB
Raw Blame History

Error Handling

Категории ошибок

1. Configuration Errors

Ошибки связанные с отсутствием или невалидностью конфигурации.

Код Сообщение Когда возникает Решение
ERR_NO_GLOBAL_CONFIG No storage configured. Run 'aevs config' first. Любая команда кроме config без глобального конфига aevs config
ERR_NO_PROJECT_CONFIG No aevs.yaml found. Run 'aevs init' first. push, status без локального конфига aevs init
ERR_CONFIG_EXISTS aevs.yaml already exists. Use --force to overwrite. init когда конфиг существует aevs init --force
ERR_INVALID_CONFIG Invalid config: {details} Конфиг существует, но невалидный Проверить синтаксис YAML

2. Validation Errors

Ошибки валидации входных данных.

Код Сообщение Когда возникает
ERR_INVALID_PROJECT_NAME Invalid project name "{name}". Use only a-z, 0-9, -, _ Невалидное имя проекта
ERR_EMPTY_FILES No files specified in aevs.yaml Пустой список files
ERR_INVALID_PATH Invalid file path: {path} Путь содержит .. или абсолютный

3. File System Errors

Ошибки работы с локальной файловой системой.

Код Сообщение Когда возникает
ERR_FILE_NOT_FOUND File not found: {path} Файл из config не существует при push
ERR_PERMISSION_DENIED Permission denied: {path} Нет прав на чтение/запись
ERR_DIR_CREATE_FAILED Failed to create directory: {path} Не удалось создать директорию при pull

4. Storage Errors

Ошибки работы с S3 storage.

Код Сообщение Когда возникает
ERR_ACCESS_DENIED Access denied. Check your credentials. Невалидные credentials
ERR_BUCKET_NOT_FOUND Bucket "{name}" not found. Bucket не существует
ERR_PROJECT_NOT_FOUND Project "{name}" not found in storage. Проект не найден при pull
ERR_UPLOAD_FAILED Failed to upload: {details} Ошибка при загрузке
ERR_DOWNLOAD_FAILED Failed to download: {details} Ошибка при скачивании
ERR_CONNECTION_FAILED Could not connect to storage: {details} Сетевая ошибка

5. Archive Errors

Ошибки работы с архивами.

Код Сообщение Когда возникает
ERR_ARCHIVE_CREATE Failed to create archive: {details} Ошибка создания tar.gz
ERR_ARCHIVE_EXTRACT Failed to extract archive: {details} Ошибка распаковки
ERR_ARCHIVE_CORRUPT Archive is corrupted Повреждённый архив

Формат вывода ошибок

Стандартный формат

Error: {сообщение}

{подсказка как исправить, если есть}

Примеры

$ aevs push

Error: No aevs.yaml found. Run 'aevs init' first.
$ aevs pull my-project

Error: Project "my-project" not found in storage.

Available projects:
  - my-app
  - another-project
$ aevs push

Error: File not found: .env.production

The file is listed in aevs.yaml but doesn't exist.
Remove it from the config or create the file.

Exit Codes

Code Meaning
0 Success
1 General error
2 Configuration error
3 File system error
4 Storage error
5 Network error
130 Interrupted (Ctrl+C)

Использование в скриптах

#!/bin/bash

aevs push
exit_code=$?

case $exit_code in
    0)
        echo "Success"
        ;;
    2)
        echo "Config error - run 'aevs config' or 'aevs init'"
        ;;
    4)
        echo "Storage error - check credentials"
        ;;
    5)
        echo "Network error - check connection"
        ;;
    *)
        echo "Unknown error: $exit_code"
        ;;
esac

Логирование

Уровни логирования

По умолчанию выводятся только ошибки. Для подробного вывода:

# Verbose mode
$ aevs push -v
$ aevs push --verbose

# Debug mode (максимум деталей)
$ aevs push --debug

Формат verbose вывода

$ aevs push -v

[INFO] Reading config from ./aevs.yaml
[INFO] Project: my-app
[INFO] Files to upload: 3
[INFO] Creating archive...
[INFO] Archive size: 479 bytes
[INFO] Uploading to s3://my-bucket/my-app/envs.tar.gz
[INFO] Uploading metadata...
[INFO] Done

Pushed 3 files to "my-app"

Формат debug вывода

$ aevs push --debug

[DEBUG] Config path: /Users/me/project/aevs.yaml
[DEBUG] Global config: /Users/me/.config/aevs/config.yaml
[DEBUG] Storage endpoint: https://s3.amazonaws.com
[DEBUG] Bucket: my-bucket
[DEBUG] Reading file: .env.development (156 bytes)
[DEBUG] Reading file: .env.production (234 bytes)
[DEBUG] Reading file: docker/.env (89 bytes)
[DEBUG] Creating tar.gz archive
[DEBUG] S3 PutObject: my-app/envs.tar.gz
[DEBUG] S3 Response: 200 OK, ETag: "abc123"
[DEBUG] S3 PutObject: my-app/metadata.json
[DEBUG] S3 Response: 200 OK
...

Graceful Degradation

При сетевых ошибках

$ aevs push

Error: Could not connect to storage.

Retrying in 2 seconds... (1/3)
Retrying in 4 seconds... (2/3)
Retrying in 8 seconds... (3/3)

Error: Connection failed after 3 attempts.
Check your internet connection and try again.

При прерывании (Ctrl+C)

$ aevs push
Pushing "my-app"...
  ✓ .env.development
^C
Interrupted. No changes were made to storage.
$ aevs pull
Pulling "my-app"...
  ✓ .env.development (created)
^C
Interrupted. Partially pulled files:
  - .env.development

Run 'aevs pull' again to complete.

Recovery Scenarios

Corrupted local config

$ aevs push

Error: Invalid config: yaml: line 3: did not find expected key

Fix the syntax error in aevs.yaml or run 'aevs init --force' to recreate.

Missing credentials

$ aevs push

Error: Access denied. Check your credentials.

Your credentials may have expired or been revoked.
Run 'aevs config' to update them.

Partial push failure

$ aevs push

Pushing "my-app"...
  ✓ .env.development
  ✓ .env.production
  ✗ docker/.env (failed)

Error: Upload interrupted.

Some files may have been uploaded. Run 'aevs push' again to retry.

При повторном push всё будет загружено заново (идемпотентность).