name: gropius-testing services: neo4j: image: ghcr.io/graphglue/neo4j:main restart: unless-stopped ports: - 7474:7474 - 7687:7687 volumes: - neo4j-conf:/conf - neo4j-data:/data - neo4j-import:/import - neo4j-logs:/logs environment: - NEO4J_server_memory_pagecache_size=1G - NEO4J_server_memory_heap_initial__size=1G - NEO4J_server_memory_heap_max__size=1G - NEO4J_AUTH=none - NEO4J_dbms_directories_run=/run healthcheck: test: wget -qO - http://localhost:7474 || exit 1 interval: 1s timeout: 10s retries: 20 start_period: 3s api-public: restart: unless-stopped build: context: ./gropius-backend args: module: api-public depends_on: neo4j: condition: service_healthy ports: - 8080:8080 environment: - SPRING_NEO4J_URI=bolt://neo4j:7687 - GROPIUS_API_PUBLIC_JWT_PUBLIC_KEY=LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFzYk9TSnJWM3VCN1IxcE4xYUQvOQpzc3pIVzV2RGRHMHBPS2JxdWlaclFCRmRrbTZuYUQzU1F2TWVnWHQ0ZGF0YnVzRHZiWDdJRS9DdS9uUEhXN2Z3Cnc5TGRKQ0Z5M0tSQ0NGQUJTd1QwUkxHaUNUejBCRkhCZFlzWjF2K2E1NU9lb3J0Q2NBRkRJbFdCQzJzL2FtaWYKQ242bHhkS3JQWHROSlBtTmdhVWI1S240K1l6OVJnTmkvWk5yeUZtNlRrd1FnMTNhNXJNM0NPYkt1WGdPdDdDYgpDWUpYYnJTL1k3VXRwUmwrd1lpQ012SnJneGgrTXJWKzdOSW9UZ2wvZm9JSU9PZUR5dXJhS09mYW1peDBHbWNyCi9tK2dGTGdtUVVMbmQ3M1hncmdGZ1NNbUU3UVhlczlnQkx5bE55dUxUUVVBb1RTZW1mQUJJemp4MWgxZC9tNVoKUXdJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg== - LOGGING_LEVEL_IO_GITHUB_GRAPHGLUE=WARN - GRAPHGLUE_CORE_USE_NEO4J_PLUGIN=true healthcheck: test: wget -qO - http://localhost:8080/health || exit 1 interval: 2s timeout: 10s retries: 20 start_period: 3s api-internal: restart: unless-stopped build: context: ./gropius-backend args: module: api-internal depends_on: neo4j: condition: service_healthy ports: - 8081:8080 environment: - SPRING_NEO4J_URI=bolt://neo4j:7687 - GROPIUS_API_INTERNAL_API_TOKEN=TodoInternalApiToken - LOGGING_LEVEL_IO_GITHUB_GRAPHGLUE=WARN - GROPIUS_CORE_CREATE_INDICES_ON_STARTUP=false - GRAPHGLUE_CORE_USE_NEO4J_PLUGIN=true healthcheck: test: wget -qO - http://localhost:8080/health || exit 1 interval: 2s timeout: 10s retries: 20 start_period: 3s postgres: image: postgres:14 restart: unless-stopped ports: - 5432:5432 volumes: - postgres-data:/var/lib/postgresql/data environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_DB=gropius login-service: restart: unless-stopped build: context: ./gropius-login-service command: /bin/sh -c "npx typeorm migration:run -d dist/migrationDataSource.config.js && sleep 10 && node dist/main.js" depends_on: api-internal: condition: service_healthy postgres: condition: service_started ports: - 3000:3000 environment: - GROPIUS_INTERNAL_BACKEND_ENDPOINT=http://api-internal:8080/graphql - GROPIUS_INTERNAL_BACKEND_TOKEN=TodoInternalApiToken - GROPIUS_ACCESS_TOKEN_EXPIRATION_TIME_MS=600000 - GROPIUS_LOGIN_DATABASE_HOST=postgres - GROPIUS_LOGIN_DATABASE_PASSWORD=postgres - GROPIUS_LOGIN_SYNC_API_SECRET=TODO_loginSecret - GROPIUS_DEFAULT_STRATEGY_INSTANCE_TYPE=userpass - GROPIUS_DEFAULT_STRATEGY_INSTANCE_CONFIG={} - GROPIUS_DEFAULT_STRATEGY_INSTANCE_NAME=userpass-local - GROPIUS_DEFAULT_USER_USERNAME=admin - GROPIUS_DEFAULT_USER_DISPLAYNAME=System-Admin - 'GROPIUS_DEFAULT_USER_POST_DATA={"password": "admin"}' - GROPIUS_DEFAULT_USER_STRATEGY_INSTANCE_NAME=userpass-local - GROPIUS_ENDPOINT=http://localhost:4200 - GROPIUS_OAUTH_PUBLIC_KEY=LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFzYk9TSnJWM3VCN1IxcE4xYUQvOQpzc3pIVzV2RGRHMHBPS2JxdWlaclFCRmRrbTZuYUQzU1F2TWVnWHQ0ZGF0YnVzRHZiWDdJRS9DdS9uUEhXN2Z3Cnc5TGRKQ0Z5M0tSQ0NGQUJTd1QwUkxHaUNUejBCRkhCZFlzWjF2K2E1NU9lb3J0Q2NBRkRJbFdCQzJzL2FtaWYKQ242bHhkS3JQWHROSlBtTmdhVWI1S240K1l6OVJnTmkvWk5yeUZtNlRrd1FnMTNhNXJNM0NPYkt1WGdPdDdDYgpDWUpYYnJTL1k3VXRwUmwrd1lpQ012SnJneGgrTXJWKzdOSW9UZ2wvZm9JSU9PZUR5dXJhS09mYW1peDBHbWNyCi9tK2dGTGdtUVVMbmQ3M1hncmdGZ1NNbUU3UVhlczlnQkx5bE55dUxUUVVBb1RTZW1mQUJJemp4MWgxZC9tNVoKUXdJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg== - GROPIUS_OAUTH_PRIVATE_KEY=LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2Z0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktnd2dnU2tBZ0VBQW9JQkFRQ3hzNUltdFhlNEh0SFcKazNWb1AvMnl6TWRibThOMGJTazRwdXE2Sm10QUVWMlNicWRvUGRKQzh4NkJlM2gxcTF1NndPOXRmc2dUOEs3KwpjOGRidC9ERDB0MGtJWExjcEVJSVVBRkxCUFJFc2FJSlBQUUVVY0YxaXhuVy81cm5rNTZpdTBKd0FVTWlWWUVMCmF6OXFhSjhLZnFYRjBxczllMDBrK1kyQnBSdmtxZmo1alAxR0EyTDlrMnZJV2JwT1RCQ0RYZHJtc3pjSTVzcTUKZUE2M3NKc0pnbGR1dEw5anRTMmxHWDdCaUlJeThtdURHSDR5dFg3czBpaE9DWDkrZ2dnNDU0UEs2dG9vNTlxYQpMSFFhWnl2K2I2QVV1Q1pCUXVkM3ZkZUN1QVdCSXlZVHRCZDZ6MkFFdktVM0s0dE5CUUNoTko2WjhBRWpPUEhXCkhWMytibGxEQWdNQkFBRUNnZ0VBRnIxZWRnS2gwOWRwemRZbjM1UFV3TVV3dTduV2pMY05YOWtJVDVMc0JaSlQKVVpKRWJQUUFUSjMwNk9mbWRkUmNWQzB0Vm1zemFrM1I3dkRjOFpFN3g2dGJyaXh6bU9XU0o2TXBUekxPbVYzTAoyUGZLV0NVb0p3VUtaUGRubUx2TXdKRkxBcTgrcW8yYmlsMEtpL0RnYlVUZ3JNeDFLbFIxZmtaTEEreWZnYWJCCjk1UEZKSVdORXJaNGpzQ0k2YmFLTjZsYVI1VERLSUhmVlJSTW9pUnk1Z1U3d0VDc2tJRjV3SytwaC9OYzdzQVAKMm0xVDNCNUVVYjB3MnYydXl2TWdmRU9iVlF1NHI3MEFyWmxlWVZlOHcxRktZSjVid1ZnclFYMnJkVUdwY0RRQgpIRWR3TGdsM2h6R3FTZnExcmllZTh0TjBxM0xvblNRZ2U1Yll2Y3k3WVFLQmdRREw4YjdoU2E2YVF6djkwMzc2ClQvbTVLSVRBZXdSbGNrVXJqQU1uaVRnZkFyeVg5enN0YTdaMDdoTnYxMDZ1UTFxOWt5OFNMWE0zVCtPUjRmWkkKMG4vWHJvSlcyZS9ZcWNab1NuSTVMVWp1bEJSVG1MN2JBUzk4M0twYTFycWpWZkxDT0xCeFVlbElFTW5nbUsvZwo1UjByM1dSNzhpSVhoZFZVTkI5bk5RalY0UUtCZ1FEZkR3d3c0dlZ6YXNMSFQvUkxhUEtocGEyMm5zKzN0Y1FpCnJvczl0UVgvajRscjl4NVY5MExjZkUrYUt1MXBWcG1oUVJhVFJ4VXVPeWpIOVlkeDdzRWtiT2V1N2E2ZjVMS1kKdlZlYWppNVd1QjQ2SUVpMWtFU2ExSzMyS2lHM3hBQUxNNWpYckNja0VRaHhCWEhjdHpOMFNwMk9IMTZOOWhLbwp0UFFVT1UyTG93S0JnUUNITEs0bHlKNlA1S3hvcXJ2bzBRVmw4ak03R001ckp2Z3R5dGwwWlFEcm5QYS9pc0NRCmRHbzB5bS9ibTB1dE9UdDFsNDZGYjlhRC9OR0xLY2dCc0hQSDB3VFU2QktPK3NoazY2TVZ2cXd1WmJ1clJQeUwKVUJmWG5MTFZEcW9hQktlb2o4Wnk5YVczZkZreUlrSEF3RnM3YmJ4aVlyU3gvcVRNOE5jM292RStRUUtCZ1FEQQp5MXZKSVZIdmVWWnpPVXM0cHJRWVBZQmcrUEVtbzBlc2hscTVjaTZHRGtWRCtTclNPTTRranBtcThmR1QrNUw4CkNxcjlqeEhpaktXWjkwRWptNjU2MGxxS0dzdTFUZEdFTFJ0NzdlcGxiK3hJWjBFUkZXb0d2VTdERnZWZnhWd1kKVW5lSDZqZEdlQ1pvc2NFUmVaTlNyMjl3dVBKY0YxVlhWbGdrNXNaOHF3S0JnSHJreXFESmRhblhFQWtYY1pYVgp2bno2eUdpVFAwT2Zpa05DeHJLZkQ0RkhUajc0eWdPTnJNY2RTWDNIWnhVK0V3dHVRQ3B0RUtibHQ5dWJORGF3ClIrRlZQWUF6QWJ4blZpMXFvKzN3V3hHVnp3elQwTGdhZyt5WnYvMU54aXJxL1FPeC94R3dNL0phWVhVNUhJV3oKejBjb3k1TlNDQVUyZlpydjlWVnVHTEs4Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K - GROPIUS_LOGIN_SPECIFIC_PUBLIC_KEY=LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF6K1FhM1k4S2ZRQlRrN3lVY0F6WgphT3VENm4wSHRVYnIxSHFrRjZZREExRzI5NlE4QjNJZU9GOEw3NXZlWmVQNHNWempaS01lc25lTVdPRFh5T0xHCmhlbU95azEyaEEwS0JidG9wV3YzaWNPeG9OR3VKN2xPVnlZR25ORXN6ZzNvM0J2QlpCeU9SU0IwSk53SzE1QmEKWXRrS3R0ZEZqNzZld1ZWSXpacFZaRXRhZm1NNTZ1NFpzQytOY3RUWDhwM2dTdnF5RXdTZGYySEcyNnU3U2F3YwpoTHZ0NUxMVHpMbVlROURreW14QVcyRzhkMW9hSXB1UnBLMWcwOHJGdXJ4TGlQOHJVZFpLZG10aFVoUmY2clFzCkRDWnVpTXA1SHY0NFVCUUY1SURtVjltWlNCeVJFZG1zSjRFL3pCUmRlbXJJeE1NZW1LQkxNalY3ZkFOR29ycDAKVlFJREFRQUIKLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg== - GROPIUS_LOGIN_SPECIFIC_PRIVATE_KEY=LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2QUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktZd2dnU2lBZ0VBQW9JQkFRRFA1QnJkandwOUFGT1QKdkpSd0RObG82NFBxZlFlMVJ1dlVlcVFYcGdNRFViYjNwRHdIY2g0NFh3dnZtOTVsNC9peFhPTmtveDZ5ZDR4WQo0TmZJNHNhRjZZN0tUWGFFRFFvRnUyaWxhL2VKdzdHZzBhNG51VTVYSmdhYzBTek9EZWpjRzhGa0hJNUZJSFFrCjNBclhrRnBpMlFxMjEwV1B2cDdCVlVqTm1sVmtTMXArWXpucTdobXdMNDF5MU5meW5lQksrcklUQkoxL1ljYmIKcTd0SnJCeUV1KzNrc3RQTXVaaEQwT1RLYkVCYllieDNXaG9pbTVHa3JXRFR5c1c2dkV1SS95dFIxa3AyYTJGUwpGRi9xdEN3TUptNkl5bmtlL2poUUZBWGtnT1pYMlpsSUhKRVIyYXduZ1QvTUZGMTZhc2pFd3g2WW9Fc3lOWHQ4CkEwYWl1blJWQWdNQkFBRUNnZ0VBQVg0aGFlT0hLQmVSNVBlT0dxa0xJL1FhOWVaUTRUMDQ0QXNKSGhlSXJXbmIKQ24xajYvUGJFSGRySnpubUsrRndBZkxzRnZpYURQdkZ1QzloU3hXVWZlMXV4bFZvU0dBSjNaYTNZQkpWRERSWQpGR29aWDkzSDBzb2tXNXFVRXhOU2NuWDNBemtINTAxTWQzY0RwTk1CWjkyY09rbm9kY0NiS1B2T3R0dGwydUk5CklPQmcrUlRWdlcxUHh5aWNGUUE0MU5ScE5uNGl4K1N0QUJZbnRwQVRxc0JZU3lPUmpjTDE1YzZuZUtDd1NpRG0KNUdmbVpPVUplNnQ2RjlzMFpjdWZOY2lOUm9FdFN5MWs0SW9XUmpMUUdBeGdtanYvaWRxSk45MEZLSlhTT2JwVgorVzFiYzVKK0NiQ05qNGxlT2haT2d0YlJkWW1wYUJzOGNvTVlUTCt0ZVFLQmdRRGF6YkVoRllqUjlGU2lXVzE0ClFnZ1BTczMxZHhTNDFac0NpZnhuNWt2UG9DSkJxWllhYlZtZWhBWHkxSm9DcGh4dkpyZWdsQlo5dFZqVjNLZjYKeXMyOGVVTVJsZ2FGNzRWUmhwWWc0OC9QSVBVckJ3elQ3OTFCSDdLbk4vZTY3UG9vZk5DdFRQZmZDNGR4cnFQZAp3aGE5Ty82OUtvOFJyTExCVy81MkhwdGNIUUtCZ1FEek80RVVzRUpmM0xjOE14aUlXRWFVUnVDUURUYWFlWWZFCmZFZ0lnT2VmOEFmWnBCS0s0SFliZXplMXA3MjhvSFRoWWFseUhTcGhDVnFVOG93b2NvWWRvbnFBV2FkWkEyY1EKZ3RrMk9xTmR2NW1DclNWa2sweSt2VkE3eVdyTGZveEVwYUMveW1iOWFuMEFSdktXV0psYXhXSHZncitqbThtUgp1RTlaWDU5VG1RS0JnRXA4OGd0SVVIN2hoaHFMQlVpR2VrWHllbkZSYTkyTTRxdVhuRFVtNHJJNVd0QXQwcXNHCmhSY0E3U0dCSFRrL29iaDVYdFFzOWdjdndLRjE4RDNoNHU2Qi9jSXo1OTZhN3pFVTkzRVUvVDhQZ2tkMnEvaE8KMVcwQlJJbkc5UEJQRXM3THh5TG9iQTRqMTZWdEJkNU4zLzNtT2MvZWVEeFZKYm5ML3JIcHM0eEZBb0dBTlJvMApvRE9yQ2dyQjVsNnhhSEw5VmJuenBQOTlnRlF3RS9HZU9GME1OSnJPMi9FNkt4KytLVm5KVzl0M1RRc3ErVm05CkNMRGRZN29MRUtHemY5RWcvcTlPVjE4N2JlK1VQTUtVY1laenpDL2NiKzhsVHNQcDZXcWpiYW9YcXIzQ0dlcWYKSWNBcXBBRHZzWFBMMm84VlMvL3oxYnFSNUVKS3k0bVZxVWw3RzJFQ2dZQVNJd2ZnZjEzNUwxUDZuUGx3dkhoUwozQUswWVhvU25RZ1NmYlRGcVc4MjFTV0ltaHJvVFR5Ri84b243ajZlRC90N1JYc3RpTzZFQjhtZXB6WlhsZm54Cm1QMkpoNEpGbWZuZjdCVWlWR2lEaEp0L1g4UzYrNTNkekY1eEVCYzBLWmxhRlVoM2g1czJPVGw5VXUzVXBSSTYKVk41dm05NnBWbEZpRDFwamFNOXJJZz09Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K - GROPIUS_LOGIN_SESSION_SECRET=TodoSessionSecret - GROPIUS_LOGIN_COOKIE_SECURE=false frontend: restart: unless-stopped build: context: gropius-frontend ports: - "4200:80" depends_on: api-public: condition: service_healthy login-service: condition: service_started environment: - LOGIN_OAUTH_CLIENT_ID=8ee1287d-71ff-4c85-becd-cba829f390a0 - API_PUBLIC_ENDPOINT=http://api-public:8080/graphql - LOGIN_SERVICE_ENDPOINT=http://login-service:3000 mongo: image: mongo restart: unless-stopped environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: root ports: - 27017:27017 volumes: - mongo-data:/data/db - mongo-config:/data/configdb sync-github: build: context: ./gropius-backend args: module: sync-github depends_on: - neo4j - mongo - login-service environment: - SPRING_NEO4J_URI=bolt://neo4j:7687 - SPRING_DATA_MONGODB_HOST=mongo - SPRING_DATA_MONGODB_PORT=27017 - SPRING_DATA_MONGODB_DATABASE=gropius - SPRING_DATA_MONGODB_USERNAME=root - SPRING_DATA_MONGODB_PASSWORD=root - GROPIUS_SYNC_LOGIN_SERVICE_BASE=http://login-service:3000/ - GROPIUS_SYNC_API_SECRET=TODO_loginSecret healthcheck: test: wget -qO - http://localhost:8080/health || exit 1 interval: 2s timeout: 10s retries: 20 start_period: 3s sync-jira: build: context: ./gropius-backend args: module: sync-jira depends_on: - neo4j - mongo - login-service environment: - SPRING_NEO4J_URI=bolt://neo4j:7687 - SPRING_DATA_MONGODB_HOST=mongo - SPRING_DATA_MONGODB_PORT=27017 - SPRING_DATA_MONGODB_DATABASE=gropius - SPRING_DATA_MONGODB_USERNAME=root - SPRING_DATA_MONGODB_PASSWORD=root - GROPIUS_SYNC_LOGIN_SERVICE_BASE=http://login-service:3000/ - GROPIUS_SYNC_API_SECRET=TODO_loginSecret healthcheck: test: wget -qO - http://localhost:8080/health || exit 1 interval: 2s timeout: 10s retries: 20 start_period: 3s volumes: neo4j-conf: neo4j-data: neo4j-import: neo4j-logs: neo4j-plugins: postgres-data: mongo-data: mongo-config: