depends_on:
  - build

when:
  - event: [pull_request, tag]
  - event: push
    branch:
      - ${CI_REPO_DEFAULT_BRANCH}

services:
  database:
    image: postgres
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=postgres

variables:
  - &rust_image 'git.nikos.gg/prymn/images/rust:33331dfc'
  - &elixir_image 'git.nikos.gg/prymn/images/elixir:1794cee2'
  - &cache_settings
      endpoint: https://75178f9eca227dea51b3db4db2c15a5a.r2.cloudflarestorage.com
      bucket: prymn-cache
      region: auto
      access-key:
        from_secret: R2_CACHE_ACCESS_KEY
      secret-key:
        from_secret: R2_CACHE_SECRET_KEY

steps:
  restore-elixir-cache:
    image: meltwater/drone-cache
    pull: true
    settings:
      <<: *cache_settings
      cache_key: '{{ .Commit.Branch }}-{{ checksum "app/mix.lock" }}'
      restore: true
      mount:
        - 'app/deps'
        - 'app/_build/dev'

  rust-test:
    image: *rust_image
    group: test
    secrets: [ R2_CACHE_ACCESS_KEY, R2_CACHE_SECRET_KEY ]
    commands:
      - export AWS_ACCESS_KEY_ID="$${R2_CACHE_ACCESS_KEY}"
      - export AWS_SECRET_ACCESS_KEY="$${R2_CACHE_SECRET_KEY}"
      - cargo test
    when:
      - path:
        - "**/*.rs"
        - "Cargo.*"

  elixir-test:
    image: *elixir_image
    group: test
    environment:
      - MIX_ENV=test
      - PRYMN_TEST_DATABASE_HOST=database
    commands:
      - cd app
      - mix test
    when:
      - path:
        - "**/*.{ex,exs}"
        - "mix.*"