name: go
on:
  push:
    branches:
      - main
  pull_request:
jobs:

  build:
    name: test
    runs-on: ubuntu-latest

    services:
      postgres:
        image: postgres:11
        env:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
          POSTGRES_DB: postgres
        ports:
        - 5432:5432
        # needed because the postgres container does not provide a healthcheck
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
      mysql:
        image: mysql:8
        env:
          MYSQL_ROOT_PASSWORD: mysecretpassword
          MYSQL_DATABASE: mysql
        ports:
        - 3306:3306

    steps:
    - uses: actions/checkout@v2.4.0

    - uses: actions/setup-go@v2
      with:
        go-version: '1.17'

    - name: test ./...
      run: go test --tags=examples ./...
      env:
        PG_USER: postgres
        PG_HOST: localhost
        PG_DATABASE: postgres
        PG_PASSWORD: postgres
        PG_PORT: ${{ job.services.postgres.ports['5432'] }}
        MYSQL_DATABASE: mysql
        MYSQL_HOST: localhost
        MYSQL_PORT: ${{ job.services.mysql.ports['3306'] }}
        MYSQL_ROOT_PASSWORD: mysecretpassword

    - name: build internal/endtoend
      run: go build ./...
      working-directory: internal/endtoend/testdata

    - name: test internal/endtoend
      run: go test ./...
      working-directory: internal/endtoend/testdata
