diff --git a/scripts/create-gitea-token.sh b/scripts/create-gitea-token.sh new file mode 100755 index 0000000..1e4f025 --- /dev/null +++ b/scripts/create-gitea-token.sh @@ -0,0 +1,66 @@ +#!/bin/bash +# Create Gitea API token using Basic Auth +# Usage: ./scripts/create-gitea-token.sh + +API_URL="https://git.softuniq.eu/api/v1" + +if [ -z "$1" ] || [ -z "$2" ]; then + echo "Usage: $0 " + echo "" + echo "Example: $0 NW mypassword" + echo "" + echo "This will create a new API token for the user." + exit 1 +fi + +USERNAME="$1" +PASSWORD="$2" +TOKEN_NAME="Pipeline Test $(date +%Y%m%d%H%M%S)" + +echo "=== Gitea Token Creation ===" +echo "" +echo "👤 Username: $USERNAME" +echo "🔑 Token name: $TOKEN_NAME" +echo "" + +# Create token using Basic Auth +echo "🔐 Creating 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 "$RESPONSE" | grep -q '"message"'; then + ERROR=$(echo "$RESPONSE" | sed 's/.*"message":"\([^"]*\)".*/\1/') + echo "❌ Failed to create token: $ERROR" + echo "" + echo "Response: $RESPONSE" + exit 1 +fi + +# Extract token +TOKEN=$(echo "$RESPONSE" | sed 's/.*"sha1":"\([^"]*\)".*/\1/' | head -1) +TOKEN_ID=$(echo "$RESPONSE" | sed 's/.*"id":\([0-9]*\).*/\1/' | head -1) + +if [ -n "$TOKEN" ] && [ ${#TOKEN} -gt 10 ]; then + echo "✅ Token created successfully!" + echo "" + echo "📋 Token details:" + echo " ID: $TOKEN_ID" + echo " Name: $TOKEN_NAME" + echo " Token: $TOKEN" + echo "" + echo "💡 Save this token for future use:" + echo "" + echo " export GITEA_TOKEN=$TOKEN" + echo "" + echo " # Add to ~/.bashrc for persistence:" + echo " echo 'export GITEA_TOKEN=$TOKEN' >> ~/.bashrc" + echo "" +else + echo "❌ Failed to extract token from response" + echo "Response: $RESPONSE" + exit 1 +fi \ No newline at end of file diff --git a/scripts/full-gitea-test.sh b/scripts/full-gitea-test.sh new file mode 100755 index 0000000..8a16d17 --- /dev/null +++ b/scripts/full-gitea-test.sh @@ -0,0 +1,221 @@ +#!/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 "" \ No newline at end of file diff --git a/scripts/test-gitea.sh b/scripts/test-gitea.sh index d200627..802979e 100755 --- a/scripts/test-gitea.sh +++ b/scripts/test-gitea.sh @@ -10,11 +10,11 @@ if [ -z "$GITEA_TOKEN" ]; then echo "❌ GITEA_TOKEN not set!" echo "" echo "To get your token:" - echo "1. Go to: https://git.softuniq.eu/user/settings/applications" - echo "2. Generate new token with 'repo' and 'issue' scopes" + echo "1. Run: ./scripts/create-gitea-token.sh " + echo "2. Or create manually at: https://git.softuniq.eu/user/settings/applications" echo "3. Export it: export GITEA_TOKEN=your_token_here" echo "" - echo "Example: export GITEA_TOKEN=abc123def456" + echo "Note: Use 'all' scope for full access" echo "" exit 1 fi