services:
  buildbot-master:
    image: 'buildbot/buildbot-master:${BUILDBOT_IMAGE_TAG:-v4.1.0}'
    restart: unless-stopped
    environment:
      - 'HOSTNAME=${MASTER_HOSTNAME:-buildbot-master-1}'
      - 'BUILDBOT_CONFIG_DIR=${BUILDBOT_CONFIG_DIR:-config}'
      - 'BUILDBOT_CONFIG_URL=${BUILDBOT_CONFIG_URL:-https://github.com/buildbot/buildbot-docker-example-config/archive/master.tar.gz}'
      - 'BUILDBOT_WORKER_PORT=${BUILDBOT_WORKER_PORT:-9989}'
      - 'BUILDBOT_WEB_URL=${BUILDBOT_WEB_URL:-http://localhost:8010/}'
      - 'BUILDBOT_WEB_PORT=${BUILDBOT_WEB_PORT:-tcp:port=8010}'
      - 'POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}'
      - 'POSTGRES_USER=${SERVICE_USER_POSTGRESQL}'
      - 'POSTGRES_DB=${POSTGRES_DB:-buildbot}'
      - 'BUILDBOT_DB_URL=postgresql+psycopg2://{POSTGRES_USER}:{POSTGRES_PASSWORD}@postgresql/{POSTGRES_DB}'
    healthcheck:
      test:
        - CMD
        - curl
        - '-f'
        - 'http://127.0.0.1:8010'
      interval: 2s
      timeout: 10s
      retries: 15
    depends_on:
      postgresql:
        condition: service_healthy
  postgresql:
    image: 'postgres:${POSTGRES_IMAGE_TAG:-16-alpine}'
    restart: unless-stopped
    healthcheck:
      test:
        - CMD-SHELL
        - 'pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}'
      interval: 2s
      timeout: 10s
      retries: 15
    volumes:
      - 'buildbot-db:/var/lib/postgresql/data'
    environment:
      - 'POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}'
      - 'POSTGRES_USER=${SERVICE_USER_POSTGRESQL}'
      - 'POSTGRES_DB=${POSTGRES_DB:-buildbot}'
  buildbot-worker:
    image: 'buildbot/buildbot-worker:${BUILDBOT_IMAGE_TAG:-v4.1.0}'
    restart: unless-stopped
    environment:
      - 'BUILDMASTER=${BUILDMASTER:-buildbot-master}'
      - 'BUILDMASTER_PORT=${BUILDBOT_WORKER_PORT:-9989}'
      - 'WORKERNAME=${WORKERNAME:-example-worker}'
      - 'WORKERPASS=${WORKERPASS:-pass}'
      - 'WORKER_ENVIRONMENT_BLACKLIST=${WORKER_ENVIRONMENT_BLACKLIST:-DOCKER_BUILDBOT* BUILDBOT_ENV_* BUILDBOT_1* WORKER_ENVIRONMENT_BLACKLIST}'