refactor: clean up root directory - move deprecated files to archive
Archive: - docker-compose.yml, Dockerfile.playwright - scripts/ (legacy test scripts) - docs/, .test/ (old documentation and tests) - IMPROVEMENT_PROPOSAL.md (superseded by .kilo/) - BROWSER_VISIBILITY.md, README.Docker.md - cleanup-packages.sh, fix-permissions.sh, install-apaw.sh Keep in root: - .kilo/ (active system) - .claude/ (Claude Code runtime) - AGENTS.md (agent reference) - README.md (main documentation) - src/ (utility code) - package.json, tsconfig.json (project config)
This commit is contained in:
66
archive/scripts/create-gitea-token.sh
Normal file
66
archive/scripts/create-gitea-token.sh
Normal file
@@ -0,0 +1,66 @@
|
||||
#!/bin/bash
|
||||
# Create Gitea API token using Basic Auth
|
||||
# Usage: ./scripts/create-gitea-token.sh <username> <password>
|
||||
|
||||
API_URL="https://git.softuniq.eu/api/v1"
|
||||
|
||||
if [ -z "$1" ] || [ -z "$2" ]; then
|
||||
echo "Usage: $0 <username> <password>"
|
||||
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
|
||||
221
archive/scripts/full-gitea-test.sh
Normal file
221
archive/scripts/full-gitea-test.sh
Normal file
@@ -0,0 +1,221 @@
|
||||
#!/bin/bash
|
||||
# Full Gitea API test: create token, create milestone, create issues with comments
|
||||
# Usage: ./scripts/full-gitea-test.sh <username> <password>
|
||||
|
||||
echo "=== Gitea API Full Test ==="
|
||||
echo ""
|
||||
|
||||
# Check arguments
|
||||
if [ -z "$1" ] || [ -z "$2" ]; then
|
||||
echo "Usage: $0 <username> <password>"
|
||||
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 ""
|
||||
148
archive/scripts/init-scoped-labels.sh
Normal file
148
archive/scripts/init-scoped-labels.sh
Normal file
@@ -0,0 +1,148 @@
|
||||
#!/bin/bash
|
||||
# Initialize standard scoped labels for Gitea
|
||||
# Usage: ./scripts/init-scoped-labels.sh
|
||||
|
||||
echo "=== Gitea Scoped Labels Initialization ==="
|
||||
echo ""
|
||||
|
||||
# Check for token
|
||||
if [ -z "$GITEA_TOKEN" ]; then
|
||||
echo "❌ GITEA_TOKEN not set!"
|
||||
echo ""
|
||||
echo "Run: ./scripts/create-gitea-token.sh <username> <password>"
|
||||
echo "Or: export GITEA_TOKEN=your_token"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
API_URL="https://git.softuniq.eu/api/v1"
|
||||
|
||||
# Detect repository
|
||||
REMOTE=$(git remote get-url origin 2>/dev/null | head -1)
|
||||
OWNER=$(echo "$REMOTE" | sed 's/.*[:/]\([^/]*\)\/.*/\1/')
|
||||
REPO=$(echo "$REMOTE" | sed 's/.*[:/][^/]*\/\([^/.]*\).*/\1/')
|
||||
|
||||
if [ -z "$OWNER" ] || [ -z "$REPO" ]; then
|
||||
echo "❌ Could not detect repository"
|
||||
echo "Set OWNER and REPO manually:"
|
||||
echo " export OWNER=UniqueSoft"
|
||||
echo " export REPO=APAW"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "📦 Repository: $OWNER/$REPO"
|
||||
echo ""
|
||||
|
||||
# Function to create label
|
||||
create_label() {
|
||||
local NAME="$1"
|
||||
local COLOR="$2"
|
||||
local DESC="$3"
|
||||
local EXCLUSIVE="$4"
|
||||
|
||||
# Check if label exists
|
||||
EXISTING=$(curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||
"$API_URL/repos/$OWNER/$REPO/labels?name=$NAME" | grep -o "\"name\":\"$NAME\"")
|
||||
|
||||
if [ -n "$EXISTING" ]; then
|
||||
echo " ⏭️ $NAME (already exists)"
|
||||
return
|
||||
fi
|
||||
|
||||
# Create label
|
||||
RESPONSE=$(curl -s -X POST \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"name\":\"$NAME\",\"color\":\"$COLOR\",\"description\":\"$DESC\",\"exclusive\":$EXCLUSIVE}" \
|
||||
"$API_URL/repos/$OWNER/$REPO/labels")
|
||||
|
||||
if echo "$RESPONSE" | grep -q '"id"'; then
|
||||
echo " ✅ $NAME"
|
||||
else
|
||||
echo " ❌ $NAME - $(echo $RESPONSE | grep -o '"message":"[^"]*"')"
|
||||
fi
|
||||
}
|
||||
|
||||
# Status labels
|
||||
echo "🏷️ Creating status labels..."
|
||||
create_label "status::new" "0052cc" "New issue, not started" true
|
||||
create_label "status::planned" "1d76db" "Planned for sprint" true
|
||||
create_label "status::in-progress" "fbca04" "Work in progress" true
|
||||
create_label "status::review" "d93f0b" "Under review" true
|
||||
create_label "status::testing" "d4c5f9" "In testing" true
|
||||
create_label "status::done" "0e8a16" "Completed" true
|
||||
create_label "status::blocked" "b60205" "Blocked" true
|
||||
create_label "status::cancelled" "5319e7" "Cancelled" true
|
||||
echo ""
|
||||
|
||||
# Priority labels
|
||||
echo "🏷️ Creating priority labels..."
|
||||
create_label "priority::critical" "b60205" "Critical priority" true
|
||||
create_label "priority::high" "d93f0b" "High priority" true
|
||||
create_label "priority::medium" "fbca04" "Medium priority" true
|
||||
create_label "priority::low" "0e8a16" "Low priority" true
|
||||
echo ""
|
||||
|
||||
# Type labels
|
||||
echo "🏷️ Creating type labels..."
|
||||
create_label "type::bug" "d73a4a" "Something is broken" true
|
||||
create_label "type::feature" "0e8a16" "New feature" true
|
||||
create_label "type::enhancement" "a2eeef" "Improvement" true
|
||||
create_label "type::documentation" "0075ca" "Documentation" true
|
||||
create_label "type::refactor" "7057ff" "Code refactoring" true
|
||||
create_label "type::test" "d4c5f9" "Testing" true
|
||||
create_label "type::chore" "cfd3d7" "Maintenance task" true
|
||||
echo ""
|
||||
|
||||
# Size labels
|
||||
echo "🏷️ Creating size labels..."
|
||||
create_label "size::xs" "cfd3d7" "Extra small (<1 hour)" true
|
||||
create_label "size::s" "c2e0c6" "Small (1-2 hours)" true
|
||||
create_label "size::m" "fbca04" "Medium (2-4 hours)" true
|
||||
create_label "size::l" "d93f0b" "Large (4-8 hours)" true
|
||||
create_label "size::xl" "b60205" "Extra large (>8 hours)" true
|
||||
echo ""
|
||||
|
||||
# Component labels (non-exclusive)
|
||||
echo "🏷️ Creating component labels..."
|
||||
create_label "component::api" "1d76db" "API related" false
|
||||
create_label "component::ui" "bfdadc" "UI related" false
|
||||
create_label "component::database" "c5def5" "Database related" false
|
||||
create_label "component::auth" "d4c5f9" "Authentication related" false
|
||||
create_label "component::pipeline" "7057ff" "Pipeline related" false
|
||||
create_label "component::agent" "5319e7" "Agent related" false
|
||||
echo ""
|
||||
|
||||
# Pipeline status labels (alternative status format)
|
||||
echo "🏷️ Creating pipeline status labels..."
|
||||
create_label "pipeline::new" "0052cc" "New pipeline task" true
|
||||
create_label "pipeline::researching" "1d76db" "Research phase" true
|
||||
create_label "pipeline::designed" "bfd4f2" "Design complete" true
|
||||
create_label "pipeline::testing" "fbca04" "Tests in progress" true
|
||||
create_label "pipeline::implementing" "d93f0b" "Implementation" true
|
||||
create_label "pipeline::reviewing" "d4c5f9" "Code review" true
|
||||
create_label "pipeline::fixing" "e99695" "Fixing issues" true
|
||||
create_label "pipeline::releasing" "c2e0c6" "Release preparation" true
|
||||
create_label "pipeline::evaluated" "fef2c0" "Evaluation complete" true
|
||||
create_label "pipeline::completed" "0e8a16" "Pipeline complete" true
|
||||
echo ""
|
||||
|
||||
echo "=========================================="
|
||||
echo "✅ Scoped labels initialized!"
|
||||
echo ""
|
||||
echo "📋 Usage examples:"
|
||||
echo ""
|
||||
echo "Set status (exclusive - removes other status:: labels):"
|
||||
echo " client.addLabels(issueNumber, ['status::in-progress', 'priority::high'])"
|
||||
echo ""
|
||||
echo "Set priority:"
|
||||
echo " client.addLabels(issueNumber, ['priority::critical'])"
|
||||
echo ""
|
||||
echo "Set type and size:"
|
||||
echo " client.addLabels(issueNumber, ['type::feature', 'size::m'])"
|
||||
echo ""
|
||||
echo "Add component (multiple allowed):"
|
||||
echo " client.addLabels(issueNumber, ['component::api', 'component::auth'])"
|
||||
echo ""
|
||||
echo "🔗 View all labels:"
|
||||
echo " https://git.softuniq.eu/$OWNER/$REPO/labels"
|
||||
echo ""
|
||||
203
archive/scripts/review-watcher.sh
Normal file
203
archive/scripts/review-watcher.sh
Normal file
@@ -0,0 +1,203 @@
|
||||
#!/bin/bash
|
||||
# Review Watcher Script
|
||||
# Watches for completion comments and triggers automatic review
|
||||
# Usage: ./scripts/review-watcher.sh [issue_number]
|
||||
|
||||
echo "=== Review Watcher ==="
|
||||
echo ""
|
||||
|
||||
# Check for token
|
||||
if [ -z "$GITEA_TOKEN" ]; then
|
||||
echo "❌ GITEA_TOKEN not set!"
|
||||
echo "Run: export GITEA_TOKEN=your_token"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
API_URL="https://git.softuniq.eu/api/v1"
|
||||
|
||||
# Detect repository
|
||||
REMOTE=$(git remote get-url origin 2>/dev/null | head -1)
|
||||
OWNER=$(echo "$REMOTE" | sed 's/.*[:/]\([^/]*\)\/.*/\1/')
|
||||
REPO=$(echo "$REMOTE" | sed 's/.*[:/][^/]*\/\([^/.]*\).*/\1/')
|
||||
|
||||
if [ -z "$OWNER" ] || [ -z "$REPO" ]; then
|
||||
echo "❌ Could not detect repository"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "📦 Repository: $OWNER/$REPO"
|
||||
echo ""
|
||||
|
||||
# Function to check issue for completion markers
|
||||
check_issue() {
|
||||
local ISSUE_NUM=$1
|
||||
|
||||
echo "🔎 Checking issue #$ISSUE_NUM..."
|
||||
|
||||
# Get issue details
|
||||
ISSUE=$(curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||
"$API_URL/repos/$OWNER/$REPO/issues/$ISSUE_NUM")
|
||||
|
||||
ISSUE_BODY=$(echo "$ISSUE" | grep -o '"body":"[^"]*"' | sed 's/"body":"//; s/"$//')
|
||||
ISSUE_TITLE=$(echo "$ISSUE" | grep -o '"title":"[^"]*"' | sed 's/"title":"//; s/"$//')
|
||||
|
||||
# Get comments
|
||||
COMMENTS=$(curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||
"$API_URL/repos/$OWNER/$REPO/issues/$ISSUE_NUM/comments")
|
||||
|
||||
# Check for completion markers
|
||||
COMPLETION_MARKERS="done completed ready выполнено готово сделано ✓ ✅"
|
||||
FOUND_MARKER=""
|
||||
|
||||
for marker in $COMPLETION_MARKERS; do
|
||||
if echo "$ISSUE_BODY $COMMENTS" | grep -qi "$marker"; then
|
||||
FOUND_MARKER="$marker"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Check for checklist completion
|
||||
CHECKLIST_COMPLETE=$(echo "$ISSUE_BODY" | grep -c '\- \[x\]' || echo 0)
|
||||
CHECKLIST_TOTAL=$(echo "$ISSUE_BODY" | grep -c '\- \[' || echo 0)
|
||||
|
||||
if [ "$CHECKLIST_TOTAL" -gt 0 ] && [ "$CHECKLIST_COMPLETE" -eq "$CHECKLIST_TOTAL" ]; then
|
||||
echo "✅ All checklist items complete ($CHECKLIST_COMPLETE/$CHECKLIST_TOTAL)"
|
||||
FOUND_MARKER="checklist-complete"
|
||||
fi
|
||||
|
||||
if [ -n "$FOUND_MARKER" ]; then
|
||||
echo "✅ Completion marker found: $FOUND_MARKER"
|
||||
echo ""
|
||||
echo "📋 Issue: $ISSUE_TITLE"
|
||||
echo " Body length: ${#ISSUE_BODY} chars"
|
||||
echo " Comments: $(echo "$COMMENTS" | grep -c '"id"' || echo 0)"
|
||||
echo ""
|
||||
return 0
|
||||
else
|
||||
echo "⏳ No completion markers found"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to create fix task
|
||||
create_fix_task() {
|
||||
local PARENT_NUM=$1
|
||||
local FIX_TITLE=$2
|
||||
local FIX_BODY=$3
|
||||
local PRIORITY=$4
|
||||
|
||||
echo "Creating fix task: $FIX_TITLE"
|
||||
|
||||
RESPONSE=$(curl -s -X POST \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"title\": \"Fix: $FIX_TITLE (from #$PARENT_NUM)\",
|
||||
\"body\": \"## Parent Issue\n#$PARENT_NUM\n\n## Problem\n$FIX_BODY\n\n## Priority\n$PRIORITY\",
|
||||
\"labels\": [\"type::bug\", \"$PRIORITY\", \"status::new\"]
|
||||
}" \
|
||||
"$API_URL/repos/$OWNER/$REPO/issues")
|
||||
|
||||
FIX_NUM=$(echo "$RESPONSE" | grep -o '"number":[0-9]*' | head -1 | cut -d: -f2)
|
||||
|
||||
if [ -n "$FIX_NUM" ]; then
|
||||
echo "✅ Created fix task #$FIX_NUM"
|
||||
|
||||
# Comment on parent
|
||||
curl -s -X POST \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"body\":\"Created fix task: #$FIX_NUM\n\n**Priority:** $PRIORITY\n**Action:** Fix required before merge\"}" \
|
||||
"$API_URL/repos/$OWNER/$REPO/issues/$PARENT_NUM/comments" > /dev/null
|
||||
|
||||
return $FIX_NUM
|
||||
else
|
||||
echo "❌ Failed to create fix task"
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to run validation
|
||||
run_validation() {
|
||||
local ISSUE_NUM=$1
|
||||
|
||||
echo ""
|
||||
echo "🔍 Running validation..."
|
||||
echo ""
|
||||
|
||||
# Get issue files (from body or comments)
|
||||
FILES=$(curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||
"$API_URL/repos/$OWNER/$REPO/issues/$ISSUE_NUM" | \
|
||||
grep -oE 'src/[a-zA-Z0-9_/.-]+\.(ts|js|tsx|jsx|go|py)' | \
|
||||
head -10)
|
||||
|
||||
if [ -n "$FILES" ]; then
|
||||
echo "Files to validate:"
|
||||
echo "$FILES" | while read f; do echo " - $f"; done
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# Placeholder for actual validation
|
||||
# In real implementation, this would call validation agents
|
||||
echo "Running checks:"
|
||||
echo " ✅ Markdown validation"
|
||||
echo " ✅ Syntax check"
|
||||
echo " ⚠️ Security scan (2 issues found)"
|
||||
echo " ⚠️ Performance check (1 issue found)"
|
||||
echo ""
|
||||
|
||||
# Simulated issues for demo
|
||||
echo "Creating fix tasks for found issues..."
|
||||
create_fix_task "$ISSUE_NUM" \
|
||||
"Add rate limiting to auth endpoints" \
|
||||
"auth.ts lacks rate limiting, vulnerable to brute force attacks" \
|
||||
"priority::high"
|
||||
|
||||
create_fix_task "$ISSUE_NUM" \
|
||||
"Remove debug console.log statements" \
|
||||
"Production code contains console.log in jwt.ts line 12" \
|
||||
"priority::medium"
|
||||
}
|
||||
|
||||
# Main logic
|
||||
if [ -n "$1" ]; then
|
||||
# Check specific issue
|
||||
check_issue "$1"
|
||||
if [ $? -eq 0 ]; then
|
||||
run_validation "$1"
|
||||
fi
|
||||
else
|
||||
# Check all open issues with status::review label
|
||||
echo "Searching for issues ready for review..."
|
||||
echo ""
|
||||
|
||||
ISSUES=$(curl -s -H "Authorization: token $GITEA_TOKEN" \
|
||||
"$API_URL/repos/$OWNER/$REPO/issues?state=open&labels=status::review" | \
|
||||
grep -o '"number":[0-9]*' | cut -d: -f2)
|
||||
|
||||
if [ -z "$ISSUES" ]; then
|
||||
echo "No issues found with status::review label"
|
||||
echo ""
|
||||
echo "To check a specific issue: $0 <issue_number>"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
for ISSUE_NUM in $ISSUES; do
|
||||
echo "────────────────────────────────────"
|
||||
check_issue "$ISSUE_NUM"
|
||||
if [ $? -eq 0 ]; then
|
||||
run_validation "$ISSUE_NUM"
|
||||
fi
|
||||
echo ""
|
||||
done
|
||||
fi
|
||||
|
||||
echo "=========================================="
|
||||
echo "✅ Review watcher complete"
|
||||
echo ""
|
||||
echo "To manually trigger review:"
|
||||
echo " $0 <issue_number>"
|
||||
echo ""
|
||||
echo "To watch continuously (webhook mode):"
|
||||
echo " while true; do $0; sleep 300; done"
|
||||
echo ""
|
||||
168
archive/scripts/run-pipeline-test.sh
Normal file
168
archive/scripts/run-pipeline-test.sh
Normal file
@@ -0,0 +1,168 @@
|
||||
#!/bin/bash
|
||||
# Autonomous Pipeline Test Runner
|
||||
# Runs complete system test for all agents, workflows, and skills
|
||||
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ APAW Autonomous Pipeline - System Test Runner ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
# Configuration
|
||||
GITEA_URL="https://git.softuniq.eu"
|
||||
API_URL="https://git.softuniq.eu/api/v1"
|
||||
OWNER="UniqueSoft"
|
||||
REPO="APAW"
|
||||
|
||||
# Check for token
|
||||
if [ -z "$GITEA_TOKEN" ]; then
|
||||
echo "❌ GITEA_TOKEN not set!"
|
||||
echo " Run: export GITEA_TOKEN=your_token"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Colors
|
||||
GREEN='\033[0;32m'
|
||||
RED='\033[0;31m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
# Test counters
|
||||
TESTS_PASSED=0
|
||||
TESTS_FAILED=0
|
||||
TESTS_TOTAL=0
|
||||
|
||||
# Function to run test
|
||||
run_test() {
|
||||
local test_name="$1"
|
||||
local test_command="$2"
|
||||
|
||||
TESTS_TOTAL=$((TESTS_TOTAL + 1))
|
||||
|
||||
echo -e "${BLUE}▶ Testing: ${test_name}${NC}"
|
||||
|
||||
if eval "$test_command" > /dev/null 2>&1; then
|
||||
TESTS_PASSED=$((TESTS_PASSED + 1))
|
||||
echo -e " ${GREEN}✅ PASSED${NC}"
|
||||
return 0
|
||||
else
|
||||
TESTS_FAILED=$((TESTS_FAILED + 1))
|
||||
echo -e " ${RED}❌ FAILED${NC}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ PHASE 1: Agent Testing ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
# Test each agent file exists
|
||||
echo "Testing agent configurations..."
|
||||
for agent in orchestrator requirement-refiner history-miner system-analyst product-owner lead-developer frontend-developer sdet-engineer code-skeptic the-fixer performance-engineer security-auditor release-manager evaluator prompt-optimizer capability-analyst agent-architect markdown-validator; do
|
||||
run_test "Agent file: $agent" "[ -f .kilo/agents/${agent}.md ]"
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "Testing agent models..."
|
||||
# Check that no unavailable models are used (anthropic, openai direct)
|
||||
run_test "No unavailable models" "! grep -r 'model:.*anthropic' .kilo/agents/ 2>/dev/null"
|
||||
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ PHASE 2: Commands Testing ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
for cmd in pipeline status evaluate plan ask debug code review review-watcher feature hotfix; do
|
||||
run_test "Command: /$cmd" "[ -f .kilo/commands/${cmd}.md ]"
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ PHASE 3: Skills Testing ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
for skill in gitea scoped-labels fix-workflow; do
|
||||
run_test "Skill: $skill" "[ -f .kilo/skills/${skill}/SKILL.md ]"
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ PHASE 4: TypeScript Modules Testing ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
for module in index workflow router evaluator git-ops gitea-client pipeline-runner prompt-loader types; do
|
||||
run_test "Module: ${module}.ts" "[ -f src/kilocode/agent-manager/${module}.ts ]"
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ PHASE 5: Gitea Integration ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
# Test Gitea API connectivity
|
||||
echo "Testing Gitea API..."
|
||||
run_test "API connectivity" "curl -s '$API_URL/repos/$OWNER/$REPO' -H 'Authorization: token $GITEA_TOKEN' | grep -q '\"name\"'"
|
||||
|
||||
# Test scoped labels
|
||||
echo ""
|
||||
echo "Testing scoped labels..."
|
||||
run_test "Status labels" "curl -s '$API_URL/repos/$OWNER/$REPO/labels' -H 'Authorization: token $GITEA_TOKEN' | grep -q 'status::new'"
|
||||
run_test "Priority labels" "curl -s '$API_URL/repos/$OWNER/$REPO/labels' -H 'Authorization: token $GITEA_TOKEN' | grep -q 'priority::critical'"
|
||||
run_test "Type labels" "curl -s '$API_URL/repos/$OWNER/$REPO/labels' -H 'Authorization: token $GITEA_TOKEN' | grep -q 'type::feature'"
|
||||
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ PHASE 6: Pipeline Flow Test ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
# Test workflow state machine
|
||||
echo "Testing workflow transitions..."
|
||||
run_test "Workflow graph" "[ -f src/kilocode/agent-manager/workflow.ts ]"
|
||||
run_test "Router" "[ -f src/kilocode/agent-manager/router.ts ]"
|
||||
run_test "Pipeline runner" "[ -f src/kilocode/agent-manager/pipeline-runner.ts ]"
|
||||
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ PHASE 7: Autonomous Components ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
run_test "Capability analyst" "[ -f .kilo/agents/capability-analyst.md ]"
|
||||
run_test "Agent architect" "[ -f .kilo/agents/agent-architect.md ]"
|
||||
run_test "Review watcher" "[ -f .kilo/commands/review-watcher.md ]"
|
||||
run_test "Fix workflow" "[ -f .kilo/skills/fix-workflow/SKILL.md ]"
|
||||
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ TEST RESULTS SUMMARY ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
echo "Total Tests: ${TESTS_TOTAL}"
|
||||
echo -e "Passed: ${GREEN}${TESTS_PASSED}${NC}"
|
||||
echo -e "Failed: ${RED}${TESTS_FAILED}${NC}"
|
||||
echo ""
|
||||
|
||||
if [ $TESTS_FAILED -eq 0 ]; then
|
||||
echo -e "${GREEN}✅ ALL TESTS PASSED${NC}"
|
||||
echo ""
|
||||
echo "System is ready for autonomous operation!"
|
||||
echo ""
|
||||
echo "Next steps:"
|
||||
echo " 1. Run: ./scripts/run-pipeline-test.sh (or /pipeline 5 in KiloCode)"
|
||||
echo " 2. Test individual agents: @agent-name <task>"
|
||||
echo " 3. View milestone: https://git.softuniq.eu/${OWNER}/${REPO}/milestone/43"
|
||||
echo ""
|
||||
exit 0
|
||||
else
|
||||
echo -e "${RED}❌ SOME TESTS FAILED${NC}"
|
||||
echo ""
|
||||
echo "Please fix the issues above before running pipeline."
|
||||
exit 1
|
||||
fi
|
||||
203
archive/scripts/test-gitea.sh
Normal file
203
archive/scripts/test-gitea.sh
Normal file
@@ -0,0 +1,203 @@
|
||||
#!/bin/bash
|
||||
# Test Gitea API Integration
|
||||
# Run this script after setting GITEA_TOKEN environment variable
|
||||
|
||||
echo "=== Gitea API Test Script ==="
|
||||
echo ""
|
||||
|
||||
# Check if GITEA_TOKEN is set
|
||||
if [ -z "$GITEA_TOKEN" ]; then
|
||||
echo "❌ GITEA_TOKEN not set!"
|
||||
echo ""
|
||||
echo "To get your token:"
|
||||
echo "1. Run: ./scripts/create-gitea-token.sh <username> <password>"
|
||||
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 "Note: Use 'all' scope for full access"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
||||
API_URL="https://git.softuniq.eu/api/v1"
|
||||
OWNER="UniqueSoft"
|
||||
REPO="APAW"
|
||||
|
||||
echo "📦 Testing API: $API_URL"
|
||||
echo "📁 Repository: $OWNER/$REPO"
|
||||
echo ""
|
||||
|
||||
# 1. Test authentication
|
||||
echo "🔐 Testing authentication..."
|
||||
WHOAMI=$(curl -s -H "Authorization: token $GITEA_TOKEN" "$API_URL/user")
|
||||
if echo "$WHOAMI" | grep -q '"login"'; then
|
||||
LOGIN=$(echo "$WHOAMI" | sed 's/.*"login":"\([^"]*\)".*/\1/')
|
||||
echo "✅ Authenticated as: $LOGIN"
|
||||
else
|
||||
echo "❌ Authentication failed"
|
||||
echo "Response: $WHOAMI"
|
||||
exit 1
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 2. Create Milestone
|
||||
echo "🎯 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\",
|
||||
\"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" != "" ]; then
|
||||
echo "✅ Milestone created: ID=$MILESTONE_ID"
|
||||
else
|
||||
echo "❌ Failed to create milestone"
|
||||
echo "Response: $MILESTONE_RESPONSE"
|
||||
exit 1
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 3. Create Issues with checklists
|
||||
echo "📝 Creating issues..."
|
||||
|
||||
# Issue 1
|
||||
echo " Creating issue 1..."
|
||||
ISSUE1_BODY='## Описание
|
||||
Настроить Gitea API клиент для работы с репозиторием.
|
||||
|
||||
## Чеклист
|
||||
- [x] Создать GiteaClient класс
|
||||
- [x] Добавить методы для Issues API
|
||||
- [x] Добавить методы для Labels API
|
||||
- [x] Добавить методы для Milestones API
|
||||
- [ ] Написать документацию
|
||||
|
||||
## Примечания
|
||||
Базовая функциональность готова, нужно дописать JSDoc комментарии.'
|
||||
|
||||
ISSUE1_RESPONSE=$(curl -s -X POST \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"title\": \"Setup Gitea Client\",
|
||||
\"body\": $(echo "$ISSUE1_BODY" | sed 's/"/\\"/g' | awk '{printf "%s\\n", $0}' | tr -d '\n' | sed 's/\\n$//'),
|
||||
\"milestone\": $MILESTONE_ID
|
||||
}" \
|
||||
"$API_URL/repos/$OWNER/$REPO/issues")
|
||||
|
||||
ISSUE1_NUM=$(echo "$ISSUE1_RESPONSE" | sed 's/.*"number":\([0-9]*\).*/\1/' | head -1)
|
||||
if [ -n "$ISSUE1_NUM" ]; then
|
||||
echo "✅ Issue #$ISSUE1_NUM: Setup Gitea Client"
|
||||
else
|
||||
echo "❌ Failed to create issue 1"
|
||||
echo "Response: $ISSUE1_RESPONSE"
|
||||
fi
|
||||
|
||||
# Issue 2
|
||||
echo " Creating issue 2..."
|
||||
ISSUE2_BODY='## Описание
|
||||
Реализовать оркестратор пайплайна для управления workflow.
|
||||
|
||||
## Чеклист
|
||||
- [x] Создать класс PipelineRunner
|
||||
- [x] Добавить маршрутизацию по статусам
|
||||
- [x] Интегрировать логирование в Gitea
|
||||
- [x] Добавить подсчёт эффективности
|
||||
- [ ] Добавить обработку ошибок
|
||||
- [ ] Добавить retry механизм
|
||||
|
||||
## Примечания
|
||||
Основная логика готова, нужно улучшить обработку edge cases.'
|
||||
|
||||
ISSUE2_RESPONSE=$(curl -s -X POST \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"title\": \"Implement Pipeline Runner\",
|
||||
\"body\": $(echo "$ISSUE2_BODY" | sed 's/"/\\"/g' | awk '{printf "%s\\n", $0}' | tr -d '\n' | sed 's/\\n$//'),
|
||||
\"milestone\": $MILESTONE_ID
|
||||
}" \
|
||||
"$API_URL/repos/$OWNER/$REPO/issues")
|
||||
|
||||
ISSUE2_NUM=$(echo "$ISSUE2_RESPONSE" | sed 's/.*"number":\([0-9]*\).*/\1/' | head -1)
|
||||
if [ -n "$ISSUE2_NUM" ]; then
|
||||
echo "✅ Issue #$ISSUE2_NUM: Implement Pipeline Runner"
|
||||
fi
|
||||
|
||||
# Issue 3
|
||||
echo " Creating issue 3..."
|
||||
ISSUE3_BODY='## Описание
|
||||
Протестировать интеграцию с Gitea API.
|
||||
|
||||
## Чеклист
|
||||
- [x] Unit тесты для GiteaClient
|
||||
- [x] Integration тесты для PipelineRunner
|
||||
- [ ] E2E тесты с реальным API
|
||||
- [ ] Performance тесты
|
||||
|
||||
## Примечания
|
||||
Требуется настройка CI/CD для автоматического запуска тестов.'
|
||||
|
||||
ISSUE3_RESPONSE=$(curl -s -X POST \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"title\": \"Test Integration\",
|
||||
\"body\": $(echo "$ISSUE3_BODY" | sed 's/"/\\"/g' | awk '{printf "%s\\n", $0}' | tr -d '\n' | sed 's/\\n$//'),
|
||||
\"milestone\": $MILESTONE_ID
|
||||
}" \
|
||||
"$API_URL/repos/$OWNER/$REPO/issues")
|
||||
|
||||
ISSUE3_NUM=$(echo "$ISSUE3_RESPONSE" | sed 's/.*"number":\([0-9]*\).*/\1/' | head -1)
|
||||
if [ -n "$ISSUE3_NUM" ]; then
|
||||
echo "✅ Issue #$ISSUE3_NUM: Test Integration"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 4. Add comments
|
||||
if [ -n "$ISSUE1_NUM" ]; then
|
||||
echo "💬 Adding comments to issue #$ISSUE1_NUM..."
|
||||
|
||||
curl -s -X POST \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"body": "## ✅ Выполнено\n\n- Базовая структура классов\n- Интеграция с Gitea API\n- Обработка ошибок\n\n## 🔄 В процессе\n\n- Документация\n- Тестирование"}' \
|
||||
"$API_URL/repos/$OWNER/$REPO/issues/$ISSUE1_NUM/comments" > /dev/null
|
||||
|
||||
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\nPOST /repos/{owner}/{repo}/issues\nPOST /repos/{owner}/{repo}/issues/{n}/comments\nGET /repos/{owner}/{repo}/labels\n```\n\n### Структура данных\n\n```typescript\ninterface Milestone {\n id: number\n title: string\n state: \"open\" | \"closed\"\n}\n```"}' \
|
||||
"$API_URL/repos/$OWNER/$REPO/issues/$ISSUE1_NUM/comments" > /dev/null
|
||||
|
||||
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**: ~200ms\n- **Время создания issue**: ~150ms\n- **Время добавления comment**: ~100ms\n\n### Выводы\n\nИнтеграция с Gitea API 1.21+ работает корректно."}' \
|
||||
"$API_URL/repos/$OWNER/$REPO/issues/$ISSUE1_NUM/comments" > /dev/null
|
||||
|
||||
echo "✅ Comments added"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 5. Summary
|
||||
echo "=========================================="
|
||||
echo "📊 Test Results"
|
||||
echo "=========================================="
|
||||
echo "✅ Milestone created: ID=$MILESTONE_ID"
|
||||
echo "✅ Issues created: 3"
|
||||
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 "✅ Comments added: 3 per issue (to first issue)"
|
||||
echo ""
|
||||
echo "🔗 View at:"
|
||||
echo " https://git.softuniq.eu/$OWNER/$REPO/milestone/$MILESTONE_ID"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user