#!/bin/bash # Full Gitea API test: create token, create milestone, create issues with comments # Usage: ./scripts/full-gitea-test.sh echo "=== Gitea API Full Test ===" echo "" # Check arguments if [ -z "$1" ] || [ -z "$2" ]; then echo "Usage: $0 " echo "" echo "Example: $0 NW mypassword" exit 1 fi USERNAME="$1" PASSWORD="$2" API_URL="https://git.softuniq.eu/api/v1" OWNER="UniqueSoft" REPO="APAW" echo "👤 Username: $USERNAME" echo "📦 Repository: $OWNER/$REPO" echo "" # Step 1: Create token echo "🔑 Step 1: Creating API token..." TOKEN_NAME="Pipeline Test $(date +%Y%m%d%H%M%S)" TOKEN_RESPONSE=$(curl -s -X POST \ -u "$USERNAME:$PASSWORD" \ -H "Content-Type: application/json" \ -d "{\"name\":\"$TOKEN_NAME\",\"scopes\":[\"all\"]}" \ "$API_URL/users/$USERNAME/tokens") # Check for error if echo "$TOKEN_RESPONSE" | grep -q '"message"'; then ERROR=$(echo "$TOKEN_RESPONSE" | sed 's/.*"message":"\([^"]*\)".*/\1/') echo "❌ Failed to create token: $ERROR" echo "Response: $TOKEN_RESPONSE" exit 1 fi GITEA_TOKEN=$(echo "$TOKEN_RESPONSE" | sed 's/.*"sha1":"\([^"]*\)".*/\1/' | head -1) if [ ${#GITEA_TOKEN} -lt 10 ]; then echo "❌ Failed to extract token" echo "Response: $TOKEN_RESPONSE" exit 1 fi echo "✅ Token created: ${GITEA_TOKEN:0:8}..." echo "" # Step 2: Verify authentication echo "🔐 Step 2: Verifying authentication..." WHOAMI=$(curl -s -H "Authorization: token $GITEA_TOKEN" "$API_URL/user") LOGIN=$(echo "$WHOAMI" | sed 's/.*"login":"\([^"]*\)".*/\1/') if [ -n "$LOGIN" ]; then echo "✅ Authenticated as: $LOGIN" else echo "❌ Authentication failed" echo "Response: $WHOAMI" exit 1 fi echo "" # Step 3: Create milestone echo "🎯 Step 3: Creating milestone..." DUE_DATE=$(date -d "+7 days" -Iseconds 2>/dev/null || date -v+7d -Iseconds 2>/dev/null || date -Iseconds) MILESTONE_RESPONSE=$(curl -s -X POST \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d "{ \"title\": \"Pipeline Integration Test\", \"description\": \"Testing agent-manager integration with Gitea API. Created by automated test script.\", \"due_on\": \"$DUE_DATE\" }" \ "$API_URL/repos/$OWNER/$REPO/milestones") MILESTONE_ID=$(echo "$MILESTONE_RESPONSE" | sed 's/.*"id":\([0-9]*\).*/\1/' | head -1) if [ -n "$MILESTONE_ID" ] && [ "$MILESTONE_ID" -eq "$MILESTONE_ID" ] 2>/dev/null; then echo "✅ Milestone created: ID=$MILESTONE_ID" else echo "❌ Failed to create milestone" echo "Response: $MILESTONE_RESPONSE" exit 1 fi echo "" # Step 4: Create issues echo "📝 Step 4: Creating issues..." create_issue() { local TITLE="$1" local BODY="$2" # Escape quotes in body local ESCAPED_BODY=$(echo "$BODY" | sed 's/"/\\"/g' | tr '\n' ' ') local RESPONSE=$(curl -s -X POST \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d "{ \"title\": \"$TITLE\", \"body\": \"$ESCAPED_BODY\", \"milestone\": $MILESTONE_ID }" \ "$API_URL/repos/$OWNER/$REPO/issues") local NUM=$(echo "$RESPONSE" | sed 's/.*"number":\([0-9]*\).*/\1/' | head -1) echo "$NUM" } # Issue 1 ISSUE1_BODY='## Описание Настроить Gitea API клиент для работы с репозиторием. ## Чеклист - [x] Создать GiteaClient класс - [x] Добавить методы для Issues API - [x] Добавить методы для Labels API - [x] Добавить методы для Milestones API - [ ] Написать документацию ## Примечания Базовая функциональность готова, нужно дописать JSDoc комментарии.' ISSUE1_NUM=$(create_issue "Setup Gitea Client (Test)" "$ISSUE1_BODY") if [ -n "$ISSUE1_NUM" ] && [ "$ISSUE1_NUM" -eq "$ISSUE1_NUM" ] 2>/dev/null; then echo "✅ Issue #$ISSUE1_NUM: Setup Gitea Client" fi # Issue 2 ISSUE2_BODY='## Описание Реализовать оркестратор пайплайна для управления workflow. ## Чеклист - [x] Создать класс PipelineRunner - [x] Добавить маршрутизацию по статусам - [x] Интегрировать логирование в Gitea - [x] Добавить подсчёт эффективности - [ ] Добавить обработку ошибок - [ ] Добавить retry механизм ## Примечания Основная логика готова, нужно улучшить обработку edge cases.' ISSUE2_NUM=$(create_issue "Implement Pipeline Runner (Test)" "$ISSUE2_BODY") if [ -n "$ISSUE2_NUM" ] && [ "$ISSUE2_NUM" -eq "$ISSUE2_NUM" ] 2>/dev/null; then echo "✅ Issue #$ISSUE2_NUM: Implement Pipeline Runner" fi # Issue 3 ISSUE3_BODY='## Описание Протестировать интеграцию с Gitea API. ## Чеклист - [x] Unit тесты для GiteaClient - [x] Integration тесты для PipelineRunner - [ ] E2E тесты с реальным API - [ ] Performance тесты ## Примечания Требуется настройка CI/CD для автоматического запуска тестов.' ISSUE3_NUM=$(create_issue "Test Integration (Test)" "$ISSUE3_BODY") if [ -n "$ISSUE3_NUM" ] && [ "$ISSUE3_NUM" -eq "$ISSUE3_NUM" ] 2>/dev/null; then echo "✅ Issue #$ISSUE3_NUM: Test Integration" fi echo "" # Step 5: Add comments echo "💬 Step 5: Adding comments..." if [ -n "$ISSUE1_NUM" ] && [ "$ISSUE1_NUM" -eq "$ISSUE1_NUM" ] 2>/dev/null; then # Progress comment curl -s -X POST \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"body": "## ✅ Прогресс\n\nКод готов и протестирован.\n\n### Выполнено\n- ✅ Базовая структура классов\n- ✅ Интеграция с Gitea API\n- ✅ Обработка ошибок\n\n### В процессе\n- 🔄 Документация\n- 🔄 Тесты"}' \ "$API_URL/repos/$OWNER/$REPO/issues/$ISSUE1_NUM/comments" > /dev/null # Technical details comment curl -s -X POST \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"body": "## 📋 Технические детали\n\n### Используемые API endpoints\n\n```\nPOST /repos/{owner}/{repo}/milestones - Создать milestone\nPOST /repos/{owner}/{repo}/issues - Создать issue\nPOST /repos/{owner}/{repo}/issues/{n}/comments - Добавить комментарий\nGET /repos/{owner}/{repo}/labels - Получить labels\n```\n\n### Структура данных\n\n```typescript\ninterface Milestone {\n id: number\n title: string\n state: \"open\" | \"closed\"\n open_issues: number\n closed_issues: number\n}\n```"}' \ "$API_URL/repos/$OWNER/$REPO/issues/$ISSUE1_NUM/comments" > /dev/null # Results comment curl -s -X POST \ -H "Authorization: token $GITEA_TOKEN" \ -H "Content-Type: application/json" \ -d '{"body": "## ✅ Результаты тестирования\n\n| Компонент | Статус |\n|-----------|--------|\n| GiteaClient | ✅ Работает |\n| PipelineRunner | ✅ Работает |\n| Label API | ✅ Работает |\n| Milestone API | ✅ Работает |\n| Comment API | ✅ Работает |\n\n### Метрики\n\n- **Время создания milestone**: ~150ms\n- **Время создания issue**: ~120ms \n- **Время добавления comment**: ~80ms\n\n### Выводы\n\nИнтеграция с Gitea API 1.21+ работает корректно. Все основные функции протестированы.\n\n✅ Тест успешно завершён!"}' \ "$API_URL/repos/$OWNER/$REPO/issues/$ISSUE1_NUM/comments" > /dev/null echo "✅ Added 3 comments to issue #$ISSUE1_NUM" fi echo "" # Step 6: Summary echo "==========================================" echo "📊 Test Results Summary" echo "==========================================" echo "✅ Token created (saved in GITEA_TOKEN)" echo "✅ Milestone: ID=$MILESTONE_ID" echo "" echo "✅ Issues created:" if [ -n "$ISSUE1_NUM" ]; then echo " - #$ISSUE1_NUM: Setup Gitea Client"; fi if [ -n "$ISSUE2_NUM" ]; then echo " - #$ISSUE2_NUM: Implement Pipeline Runner"; fi if [ -n "$ISSUE3_NUM" ]; then echo " - #$ISSUE3_NUM: Test Integration"; fi echo "" echo "💬 Comments: 3 added to first issue" echo "" echo "🔗 View milestone:" echo " https://git.softuniq.eu/$OWNER/$REPO/milestone/$MILESTONE_ID" echo "" echo "🔑 Token for future use:" echo " export GITEA_TOKEN=$GITEA_TOKEN" echo ""