name: CI

on:
  push:
    branches:
      - master
  pull_request:

jobs:
  build:
    name: Build
    runs-on: ubuntu-16.04
    env:
      GOFLAGS: -mod=readonly

    services:
      postgres:
        image: postgres:10.8
        ports:
          - 5432
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

      etcd:
        image: gcr.io/etcd-development/etcd:v3.2.9
        ports:
          - 2379
        env:
          ETCD_LISTEN_CLIENT_URLS: http://0.0.0.0:2379
          ETCD_ADVERTISE_CLIENT_URLS: http://0.0.0.0:2379
        options: --health-cmd "ETCDCTL_API=3 etcdctl --endpoints http://localhost:2379 endpoint health" --health-interval 10s --health-timeout 5s --health-retries 5

      keystone:
        image: openio/openstack-keystone:pike
        ports:
          - 5000
          - 35357
        options: --health-cmd "curl --fail http://localhost:5000/v3" --health-interval 10s --health-timeout 5s --health-retries 5

    steps:
      - name: Set up Go
        uses: actions/setup-go@v1
        with:
          go-version: 1.13

      - name: Checkout code
        uses: actions/checkout@v1

      - name: Setup MySQL database
        run: mysql -u root -proot -e 'CREATE DATABASE dex;'

      - name: Run tests
        run: make testall
        env:
          DEX_FOO_USER_PASSWORD: $2a$10$33EMT0cVYVlPy6WAMCLsceLYjWhuHpbz5yuZxu/GAFj03J9Lytjuy
          DEX_MYSQL_DATABASE: dex
          DEX_MYSQL_USER: root
          DEX_MYSQL_PASSWORD: root
          DEX_MYSQL_HOST: 127.0.0.1
          DEX_MYSQL_PORT: 3306
          DEX_POSTGRES_DATABASE: postgres
          DEX_POSTGRES_USER: postgres
          DEX_POSTGRES_PASSWORD: postgres
          DEX_POSTGRES_HOST: localhost
          DEX_POSTGRES_PORT: ${{ job.services.postgres.ports[5432] }}
          DEX_ETCD_ENDPOINTS: http://localhost:${{ job.services.etcd.ports[2379] }}
          DEX_LDAP_TESTS: 1
          DEX_KEYSTONE_URL: http://localhost:${{ job.services.keystone.ports[5000] }}
          DEX_KEYSTONE_ADMIN_URL: http://localhost:${{ job.services.keystone.ports[35357] }}
          DEX_KEYSTONE_ADMIN_USER: demo
          DEX_KEYSTONE_ADMIN_PASS: DEMO_PASS

      - name: Run linter
        run: make lint

      # Ensure proto generation doesn't depend on external packages.
      - name: Verify proto
        run: make verify-proto
