include:
  - ./compose.a.yml
  - ./compose.b.yml

services:
  setup:
    extends:
      file: ./compose.tpl.yml
      service: misskey
    command: >
      bash -c "
        corepack enable && corepack prepare
        pnpm -F backend i
        pnpm -F misskey-js i
        pnpm -F misskey-reversi i
      "

  tester:
    image: node:20
    depends_on:
      a.test:
        condition: service_healthy
      b.test:
        condition: service_healthy
    environment:
      - NODE_ENV=development
      - NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/rootCA.crt
    volumes:
      - type: bind
        source: ../package.json
        target: /misskey/packages/backend/package.json
        read_only: true
      - type: bind
        source: ../test/resources
        target: /misskey/packages/backend/test/resources
        read_only: true
      - type: bind
        source: ./test
        target: /misskey/packages/backend/test-federation/test
        read_only: true
      - type: bind
        source: ../jest.config.cjs
        target: /misskey/packages/backend/jest.config.cjs
        read_only: true
      - type: bind
        source: ../jest.config.fed.cjs
        target: /misskey/packages/backend/jest.config.fed.cjs
        read_only: true
      - type: bind
        source: ../../misskey-js/built
        target: /misskey/packages/misskey-js/built
        read_only: true
      - type: bind
        source: ../../misskey-js/package.json
        target: /misskey/packages/misskey-js/package.json
        read_only: true
      - type: bind
        source: ../../../package.json
        target: /misskey/package.json
        read_only: true
      - type: bind
        source: ../../../pnpm-lock.yaml
        target: /misskey/pnpm-lock.yaml
        read_only: true
      - type: bind
        source: ../../../pnpm-workspace.yaml
        target: /misskey/pnpm-workspace.yaml
        read_only: true
      - type: bind
        source: ./certificates/rootCA.crt
        target: /usr/local/share/ca-certificates/rootCA.crt
        read_only: true
    working_dir: /misskey
    entrypoint: >
      bash -c '
        corepack enable && corepack prepare
        pnpm -F misskey-js i --frozen-lockfile
        pnpm -F backend i --frozen-lockfile
        exec "$0" "$@"
      '
    command: pnpm -F backend test:fed

  daemon:
    image: node:20
    depends_on:
      redis.test:
        condition: service_healthy
    volumes:
      - type: bind
        source: ../package.json
        target: /misskey/packages/backend/package.json
        read_only: true
      - type: bind
        source: ./daemon.ts
        target: /misskey/packages/backend/test-federation/daemon.ts
        read_only: true
      - type: bind
        source: ./tsconfig.json
        target: /misskey/packages/backend/test-federation/tsconfig.json
        read_only: true
      - type: bind
        source: ../../../package.json
        target: /misskey/package.json
        read_only: true
      - type: bind
        source: ../../../pnpm-lock.yaml
        target: /misskey/pnpm-lock.yaml
        read_only: true
      - type: bind
        source: ../../../pnpm-workspace.yaml
        target: /misskey/pnpm-workspace.yaml
        read_only: true
    working_dir: /misskey
    command: >
      bash -c "
        corepack enable && corepack prepare
        pnpm -F backend i --frozen-lockfile
        pnpm exec tsc -p ./packages/backend/test-federation
        node ./packages/backend/test-federation/built/daemon.js
      "

  redis.test:
    image: redis:7-alpine
    volumes:
      - type: bind
        source: ./volumes/redis
        target: /data
        bind:
          create_host_path: true
    healthcheck:
      test: redis-cli ping
      interval: 5s
      retries: 20