mirror of
https://github.com/gabrie30/ghorg.git
synced 2025-09-21 13:41:11 +02:00
244 lines
9.3 KiB
Bash
Executable File
244 lines
9.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
BITBUCKET_URL="${1:-http://bitbucket.example.com:7990}"
|
|
OUTPUT_DIR="${2:-/tmp/test-ghorg-output}"
|
|
|
|
# Default admin credentials (set in bitbucket.properties)
|
|
ADMIN_USERNAME="admin"
|
|
ADMIN_PASSWORD="admin"
|
|
ADMIN_EMAIL="admin@bitbucket.local"
|
|
|
|
echo "Waiting for Bitbucket Server to be ready at ${BITBUCKET_URL}..."
|
|
|
|
# Function to check if Bitbucket is responding
|
|
check_bitbucket_ready() {
|
|
curl -s --max-time 10 "${BITBUCKET_URL}/status" > /dev/null 2>&1
|
|
}
|
|
|
|
# Wait for Bitbucket to be ready (up to 5 minutes)
|
|
timeout=300
|
|
elapsed=0
|
|
while ! check_bitbucket_ready && [ $elapsed -lt $timeout ]; do
|
|
echo "Checking if Bitbucket is ready... (${elapsed}s/${timeout}s)"
|
|
sleep 10
|
|
elapsed=$((elapsed + 10))
|
|
done
|
|
|
|
if ! check_bitbucket_ready; then
|
|
echo "❌ Bitbucket Server did not become ready within ${timeout} seconds"
|
|
echo "Check container logs: docker logs bitbucket"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Bitbucket Server is responding!"
|
|
|
|
# Give additional time for complete initialization with pre-configured database and admin user
|
|
echo "Waiting for Bitbucket Server to fully initialize with H2 database..."
|
|
echo "Background setup automation script is also running..."
|
|
echo "This may take up to 3 minutes for complete automated setup..."
|
|
# Reduced initialization wait
|
|
sleep 30
|
|
|
|
# Check if setup is complete by testing the API
|
|
echo "Checking Bitbucket Server setup status..."
|
|
|
|
# Test if we can access the API without authentication (should fail with 401)
|
|
api_response=$(curl -s -w "%{http_code}" "${BITBUCKET_URL}/rest/api/1.0/repos" -o /dev/null)
|
|
|
|
if [ "$api_response" = "401" ]; then
|
|
echo "✅ Bitbucket Server API is responding correctly (401 Unauthorized as expected)"
|
|
setup_complete=true
|
|
elif [ "$api_response" = "200" ]; then
|
|
echo "⚠️ Bitbucket Server API is accessible without authentication - this may indicate setup issues"
|
|
setup_complete=true
|
|
else
|
|
echo "⚠️ Bitbucket Server API returned status: $api_response"
|
|
|
|
# Check if we're still seeing setup pages
|
|
if curl -s "${BITBUCKET_URL}" | grep -qi "setup\|database\|welcome.*bitbucket"; then
|
|
echo "🔧 Bitbucket Server is still showing setup pages"
|
|
setup_complete=false
|
|
else
|
|
echo "✅ Bitbucket Server appears to be ready"
|
|
setup_complete=true
|
|
fi
|
|
fi
|
|
|
|
if [ "$setup_complete" = false ]; then
|
|
if [ "${ENV:-}" = "ci" ]; then
|
|
echo "🤖 CI Mode: Setup not complete but proceeding with authentication test"
|
|
echo "This validates that ghorg's Bitbucket Server client implementation is working"
|
|
else
|
|
echo ""
|
|
echo "💡 MANUAL SETUP REQUIRED:"
|
|
echo "1. Open ${BITBUCKET_URL} in your browser"
|
|
echo "2. Complete the setup wizard:"
|
|
echo " - Choose 'Internal' for database (H2)"
|
|
echo " - Create admin user with credentials:"
|
|
echo " Username: admin"
|
|
echo " Password: admin"
|
|
echo " Email: admin@bitbucket.local"
|
|
echo "3. Skip license (evaluation mode)"
|
|
echo "4. Complete setup and re-run tests"
|
|
echo ""
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Test authentication with admin credentials
|
|
echo "Testing authentication with admin credentials..."
|
|
|
|
auth_test=$(curl -s -w "%{http_code}" -u "${ADMIN_USERNAME}:${ADMIN_PASSWORD}" \
|
|
"${BITBUCKET_URL}/rest/api/1.0/users/${ADMIN_USERNAME}" -o /tmp/auth_test.json)
|
|
|
|
if [ "$auth_test" = "200" ]; then
|
|
echo "✅ Authentication successful with admin:admin"
|
|
|
|
# Validate the response contains user information
|
|
if grep -q "\"name\".*\"${ADMIN_USERNAME}\"" /tmp/auth_test.json; then
|
|
echo "✅ User information retrieved successfully"
|
|
|
|
# Output credentials for other scripts
|
|
mkdir -p "${OUTPUT_DIR}"
|
|
cat > "${OUTPUT_DIR}/bitbucket_credentials.env" << EOF
|
|
export GHORG_SCM_TYPE=bitbucket
|
|
export GHORG_SCM_BASE_URL=${BITBUCKET_URL}
|
|
export GHORG_BITBUCKET_USERNAME=${ADMIN_USERNAME}
|
|
export GHORG_BITBUCKET_APP_PASSWORD=${ADMIN_PASSWORD}
|
|
export GHORG_INSECURE_BITBUCKET_CLIENT=true
|
|
EOF
|
|
|
|
echo "✅ Credentials saved to ${OUTPUT_DIR}/bitbucket_credentials.env"
|
|
|
|
# Test a few more API endpoints to ensure full functionality
|
|
echo "Testing additional API endpoints..."
|
|
|
|
# Test projects endpoint
|
|
projects_test=$(curl -s -w "%{http_code}" -u "${ADMIN_USERNAME}:${ADMIN_PASSWORD}" \
|
|
"${BITBUCKET_URL}/rest/api/1.0/projects" -o /dev/null)
|
|
|
|
if [ "$projects_test" = "200" ]; then
|
|
echo "✅ Projects API endpoint working"
|
|
else
|
|
echo "⚠️ Projects API returned status: $projects_test"
|
|
fi
|
|
|
|
# Test repositories endpoint
|
|
repos_test=$(curl -s -w "%{http_code}" -u "${ADMIN_USERNAME}:${ADMIN_PASSWORD}" \
|
|
"${BITBUCKET_URL}/rest/api/1.0/repos" -o /dev/null)
|
|
|
|
if [ "$repos_test" = "200" ]; then
|
|
echo "✅ Repositories API endpoint working"
|
|
else
|
|
echo "⚠️ Repositories API returned status: $repos_test"
|
|
fi
|
|
|
|
echo ""
|
|
echo "🎉 Bitbucket Server is ready for testing!"
|
|
echo " Base URL: ${BITBUCKET_URL}"
|
|
echo " Username: ${ADMIN_USERNAME}"
|
|
echo " Password: ${ADMIN_PASSWORD}"
|
|
echo ""
|
|
|
|
else
|
|
echo "⚠️ Authentication succeeded but user data appears invalid"
|
|
cat /tmp/auth_test.json
|
|
fi
|
|
|
|
elif [ "$auth_test" = "401" ]; then
|
|
echo "❌ Authentication failed with admin:admin"
|
|
echo "API request failed with status 401: Authentication failed"
|
|
|
|
# Check if setup is still in progress or if we can try API-based admin creation
|
|
setup_page_content=$(curl -s "${BITBUCKET_URL}" 2>/dev/null)
|
|
|
|
if echo "$setup_page_content" | grep -qi "setup\|database\|admin.*user"; then
|
|
echo "⚠️ Bitbucket Server setup may still be in progress"
|
|
echo "Attempting API-based admin user creation as fallback..."
|
|
|
|
# Try to create admin user via setup API if available
|
|
admin_creation_response=$(curl -s -w "%{http_code}" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"username": "'${ADMIN_USERNAME}'",
|
|
"password": "'${ADMIN_PASSWORD}'",
|
|
"displayName": "Administrator",
|
|
"emailAddress": "'${ADMIN_EMAIL}'"
|
|
}' \
|
|
"${BITBUCKET_URL}/rest/api/1.0/admin/users" 2>/dev/null)
|
|
|
|
if [[ "$admin_creation_response" == *"201" ]] || [[ "$admin_creation_response" == *"409" ]]; then
|
|
echo "✅ Admin user creation via API successful (or user already exists)"
|
|
sleep 30 # Give time for user to be fully set up
|
|
|
|
# Retry authentication
|
|
retry_auth_test=$(curl -s -w "%{http_code}" -u "${ADMIN_USERNAME}:${ADMIN_PASSWORD}" \
|
|
"${BITBUCKET_URL}/rest/api/1.0/users/${ADMIN_USERNAME}" -o /tmp/retry_auth_test.json)
|
|
|
|
if [ "$retry_auth_test" = "200" ]; then
|
|
echo "✅ Authentication successful after API user creation"
|
|
if grep -q "\"name\".*\"${ADMIN_USERNAME}\"" /tmp/retry_auth_test.json; then
|
|
echo "✅ User information retrieved successfully"
|
|
mkdir -p "${OUTPUT_DIR}"
|
|
cat > "${OUTPUT_DIR}/bitbucket_credentials.env" << EOF
|
|
export GHORG_SCM_TYPE=bitbucket
|
|
export GHORG_SCM_BASE_URL=${BITBUCKET_URL}
|
|
export GHORG_BITBUCKET_USERNAME=${ADMIN_USERNAME}
|
|
export GHORG_BITBUCKET_APP_PASSWORD=${ADMIN_PASSWORD}
|
|
export GHORG_INSECURE_BITBUCKET_CLIENT=true
|
|
EOF
|
|
echo "✅ Credentials saved to ${OUTPUT_DIR}/bitbucket_credentials.env"
|
|
echo "🎉 Fully automated Bitbucket Server setup complete!"
|
|
exit 0
|
|
fi
|
|
fi
|
|
else
|
|
echo "⚠️ API-based admin user creation failed: $admin_creation_response"
|
|
fi
|
|
|
|
echo "Waiting additional 60 seconds for properties-based setup to complete..."
|
|
sleep 60
|
|
|
|
# Final retry with original credentials
|
|
final_retry_auth_test=$(curl -s -w "%{http_code}" -u "${ADMIN_USERNAME}:${ADMIN_PASSWORD}" \
|
|
"${BITBUCKET_URL}/rest/api/1.0/users/${ADMIN_USERNAME}" -o /tmp/final_retry_auth_test.json)
|
|
|
|
if [ "$final_retry_auth_test" = "200" ]; then
|
|
echo "✅ Authentication successful after extended wait"
|
|
if grep -q "\"name\".*\"${ADMIN_USERNAME}\"" /tmp/final_retry_auth_test.json; then
|
|
echo "✅ User information retrieved successfully"
|
|
mkdir -p "${OUTPUT_DIR}"
|
|
cat > "${OUTPUT_DIR}/bitbucket_credentials.env" << EOF
|
|
export GHORG_SCM_TYPE=bitbucket
|
|
export GHORG_SCM_BASE_URL=${BITBUCKET_URL}
|
|
export GHORG_BITBUCKET_USERNAME=${ADMIN_USERNAME}
|
|
export GHORG_BITBUCKET_APP_PASSWORD=${ADMIN_PASSWORD}
|
|
export GHORG_INSECURE_BITBUCKET_CLIENT=true
|
|
EOF
|
|
echo "✅ Credentials saved to ${OUTPUT_DIR}/bitbucket_credentials.env"
|
|
echo "🎉 Fully automated Bitbucket Server setup complete!"
|
|
exit 0
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo "❌ Unattended setup failed. Possible issues:"
|
|
echo "1. Check Docker logs: docker logs bitbucket"
|
|
echo "2. Verify bitbucket.properties configuration"
|
|
echo "3. Ensure sufficient startup time for initialization"
|
|
echo ""
|
|
exit 1
|
|
|
|
else
|
|
echo "❌ Authentication test failed with status: $auth_test"
|
|
exit 1
|
|
fi
|
|
|
|
# Clean up
|
|
rm -f /tmp/auth_test.json /tmp/bb_cookies
|
|
|
|
echo "✅ Bitbucket Server setup and authentication verification complete!"
|