switchgear-testing 0.1.26

CI Integration Testing Framework for Switchgear
Documentation
services:
  bitcoin:
    image: bitcoin/bitcoin:27.0
    container_name: bitcoin-regtest
    command: [
      "bitcoind",
      "-printtoconsole",
      "-regtest=1",
      "-fallbackfee=0.0002",
      "-rpcallowip=0.0.0.0/0",
      "-rpcbind=0.0.0.0:18443",
      "-rpcuser=bitcoin",
      "-rpcpassword=bitcoin123",
      "-zmqpubrawblock=tcp://0.0.0.0:28332",
      "-zmqpubrawtx=tcp://0.0.0.0:28333",
      "-txindex=1",
      "-loglevel=info"
    ]
    ports:
      - "18443:18443"  # RPC port
      - "18444:18444"  # P2P port
      - "28332:28332"  # ZMQ block notifications
      - "28333:28333"  # ZMQ transaction notifications
    volumes:
      - lnurl-balancer_bitcoin_data:/home/bitcoin/.bitcoin
    networks:
      - lightning_network
    healthcheck:
      test: ["CMD", "bitcoin-cli", "-regtest", "-rpcuser=bitcoin", "-rpcpassword=bitcoin123", "-rpcconnect=127.0.0.1", "-rpcport=18443", "getblockchaininfo"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s

  setup:
    build: ./setup
    container_name: setup
    depends_on:
      bitcoin:
        condition: service_healthy
      cln:
        condition: service_healthy
      lnd:
        condition: service_healthy
      postgres:
        condition: service_healthy
      mysql:
        condition: service_healthy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - shared:/shared
    networks:
      - lightning_network
      - services
    restart: "no"
    healthcheck:
      test: ["CMD", "test", "-f", "/tmp/setup_complete"]
      interval: 5s
      timeout: 3s
      retries: 60
      start_period: 10s

  cln:
    build: ./cln
    container_name: cln-regtest
    hostname: "${CLN_HOSTNAME}"
    environment:
      LIGHTNINGD_NETWORK: regtest
      CLN_HOSTNAME: "${CLN_HOSTNAME}"
      CLN_PORT: "${CLN_PORT}"
    ports:
      - "9735:9735"   # Lightning P2P port
      - "${CLN_PORT}:${CLN_PORT}"   # gRPC port
    volumes:
      - lnurl-balancer_cln_data:/root/.lightning
    depends_on:
      bitcoin:
        condition: service_healthy
    networks:
      - lightning_network
      - services
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "lightning-cli", "--regtest", "getinfo"]
      interval: 5s
      timeout: 3s
      retries: 12
      start_period: 30s

  lnd:
    build: ./lnd
    container_name: lnd-regtest
    hostname: "${LND_HOSTNAME}"
    environment:
      LND_HOSTNAME: "${LND_HOSTNAME}"
      LND_PORT: "${LND_PORT}"
    ports:
      - "${LND_PORT}:${LND_PORT}"  # gRPC port
      - "8080:8080"    # REST port
      - "9734:9734"    # Lightning P2P port
    volumes:
      - lnurl-balancer_lnd_data:/root/.lnd
    depends_on:
      bitcoin:
        condition: service_healthy
    networks:
      - lightning_network
      - services
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "sh", "-c", "lncli --network=regtest getinfo >/dev/null 2>&1 || (echo 'password123' | lncli --network=regtest create --stdin 2>/dev/null || echo 'password123' | lncli --network=regtest unlock --stdin 2>/dev/null)"]
      interval: 5s
      timeout: 3s
      retries: 12
      start_period: 30s

  postgres:
    build: ./postgres
    container_name: postgres-db
    hostname: "${POSTGRES_HOSTNAME}"
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_LOG_MIN_MESSAGES: info
      POSTGRES_HOSTNAME: "${POSTGRES_HOSTNAME}"
    volumes:
      - lnurl-balancer_postgres_data:/var/lib/postgresql/data
    ports:
      - "${POSTGRES_PORT}:5432"
    networks:
      - services
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 3s
      retries: 5
      start_period: 10s

  mysql:
    build: ./mysql
    container_name: mysql-db
    hostname: "${MYSQL_HOSTNAME}"
    environment:
      MYSQL_ROOT_PASSWORD: mysql
      MYSQL_HOSTNAME: "${MYSQL_HOSTNAME}"
    volumes:
      - lnurl-balancer_mysql_data:/var/lib/mysql
    ports:
      - "${MYSQL_PORT}:3306"
    networks:
      - services
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pmysql"]
      interval: 5s
      timeout: 3s
      retries: 5
      start_period: 10s

  credentials-server:
    build: ./credentials-server
    container_name: credentials-server
    hostname: "${CREDENTIALS_SERVER_HOSTNAME}"
    volumes:
      - shared:/usr/share/nginx/html
    ports:
      - "${CREDENTIALS_SERVER_PORT}:8888"
    networks:
      - services
    depends_on:
      setup:
        condition: service_healthy
    restart: unless-stopped
    entrypoint: ["nginx"]
    command: ["-g", "daemon off;"]
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8888/credentials.tar.gz"]
      interval: 5s
      timeout: 3s
      retries: 5
      start_period: 10s

volumes:
  shared:
    external: false
  lnurl-balancer_bitcoin_data:
    external: false
  lnurl-balancer_cln_data:
    external: false
  lnurl-balancer_lnd_data:
    external: false
  lnurl-balancer_postgres_data:
    external: false
  lnurl-balancer_mysql_data:
    external: false

networks:
  lightning_network:
    driver: bridge
  services:
    name: $SERVICES_NETWORK_NAME
    driver: bridge