#!/bin/bash set -euo pipefail # Bitbucket Server integration test script - AUTOMATED VERSION # Usage: ./start-auto.sh [STOP_BITBUCKET_WHEN_FINISHED] [PERSIST_BITBUCKET_LOCALLY] STOP_BITBUCKET_WHEN_FINISHED=${1:-'true'} PERSIST_BITBUCKET_LOCALLY=${2:-'false'} BITBUCKET_IMAGE_TAG=${3:-'latest'} BITBUCKET_HOME=${4:-"${HOME}/ghorg/bitbucket-server-data"} BITBUCKET_HOST=${5:-'bitbucket.example.com'} BITBUCKET_URL=${6:-'http://bitbucket.example.com:7990'} LOCAL_BITBUCKET_GHORG_DIR=${7:-"${HOME}/ghorg"} SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" echo "=== Bitbucket Server Integration Test - AUTOMATED ===" echo "๐Ÿ—‘๏ธ Database will be wiped clean on startup" echo "Stop when finished: ${STOP_BITBUCKET_WHEN_FINISHED}" echo "Persist locally: ${PERSIST_BITBUCKET_LOCALLY}" echo "Image tag: ${BITBUCKET_IMAGE_TAG}" echo "Bitbucket home: ${BITBUCKET_HOME}" echo "Bitbucket host: ${BITBUCKET_HOST}" echo "Bitbucket URL: ${BITBUCKET_URL}" echo "Local ghorg directory: ${LOCAL_BITBUCKET_GHORG_DIR}" echo "" # Complete cleanup - remove all data for fresh start echo "๐Ÿงน Performing complete cleanup for fresh test run..." # Stop and remove existing containers and volumes if docker ps -aq -f name=bitbucket > /dev/null || docker ps -aq -f name=bitbucket-postgres > /dev/null; then echo "Stopping and removing existing Bitbucket and PostgreSQL containers..." cd "${SCRIPT_DIR}" docker-compose down -v || true sleep 2 fi # Remove persistent data directories echo "Cleaning up persistent data directories..." if [ -d "${BITBUCKET_HOME}" ]; then echo "Removing Bitbucket home directory: ${BITBUCKET_HOME}" rm -rf "${BITBUCKET_HOME}" || true fi # Remove any Docker volumes related to Bitbucket echo "Removing Docker volumes..." docker volume ls -q | grep -i bitbucket | xargs -r docker volume rm || true docker volume ls -q | grep -i postgres | xargs -r docker volume rm || true # Clean up any leftover test directories echo "Cleaning up test output directories..." rm -rf "${HOME}/ghorg/local-bitbucket-"* || true rm -rf "${HOME}/ghorg/bitbucket.example.com" || true rm -rf "/tmp/bitbucket-custom-path" || true # Prune unused Docker resources echo "Pruning unused Docker resources..." docker system prune -f || true echo "โœ… Cleanup completed - ready for fresh installation" # Ensure fresh Bitbucket home directory exists echo "Creating fresh Bitbucket home directory: ${BITBUCKET_HOME}" mkdir -p "${BITBUCKET_HOME}" echo "Starting Bitbucket Server..." cd "${SCRIPT_DIR}" ./run.sh "${BITBUCKET_IMAGE_TAG}" "${BITBUCKET_HOME}" "${BITBUCKET_HOST}" "${PERSIST_BITBUCKET_LOCALLY}" echo "" echo "Waiting for Bitbucket Server to be ready..." OUTPUT_DIR="${HOME}/ghorg-test-output" mkdir -p "${OUTPUT_DIR}" # Wait for server to be ready echo "Waiting for Bitbucket Server to start..." sleep 10 # Check if server is running echo "Checking server status..." max_attempts=30 attempt=0 while [ $attempt -lt $max_attempts ]; do if curl -s "${BITBUCKET_URL}/status" | grep -q "RUNNING"; then echo "โœ… Bitbucket Server is running!" break fi echo "โณ Waiting for server... (attempt $((attempt + 1))/$max_attempts)" sleep 5 attempt=$((attempt + 1)) done if [ $attempt -eq $max_attempts ]; then echo "โŒ Server failed to start within expected time" exit 1 fi # Set up environment variables export GHORG_SCM_TYPE=bitbucket export GHORG_SCM_BASE_URL="${BITBUCKET_URL}" export GHORG_BITBUCKET_USERNAME=admin export GHORG_BITBUCKET_APP_PASSWORD=admin export GHORG_INSECURE_BITBUCKET_CLIENT=true # Save 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 export GHORG_BITBUCKET_APP_PASSWORD=admin export GHORG_INSECURE_BITBUCKET_CLIENT=true EOF echo "โœ… Credentials saved" echo "" echo "Seeding Bitbucket Server with test data..." if ./seed.sh; then echo "โœ… Seeding completed" echo "" echo "Running integration tests..." if ./integration-tests.sh; then echo "๐ŸŽ‰ All integration tests passed!" test_result=0 else echo "โŒ Some integration tests failed" test_result=1 fi else echo "โš ๏ธ Seeding failed, but running basic tests..." echo "" echo "Running basic integration tests..." if ./integration-tests.sh; then echo "๐ŸŽ‰ Basic integration tests passed!" test_result=0 else echo "โŒ Integration tests failed" test_result=1 fi fi # Cleanup if [ "${STOP_BITBUCKET_WHEN_FINISHED}" = "true" ]; then echo "" echo "Stopping Bitbucket Server and PostgreSQL (keeping volumes for next run)..." cd "${SCRIPT_DIR}" docker-compose down || true fi echo "" if [ $test_result -eq 0 ]; then echo "๐ŸŽ‰ Bitbucket Server integration tests completed successfully!" else echo "โŒ Bitbucket Server integration tests failed" fi exit $test_result