---
kind: pipeline
name: testing
steps:
- name: restore-cache
  image: meltwater/drone-cache
  pull: always
  settings:
    backend: "filesystem"
    restore: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

- name: test-vet
  image: golang:1.15
  environment:
    GO111MODULE: "on"
    GOPROXY: "https://goproxy.io"
    CGO_ENABLED: 1
    GOMODCACHE: '/drone/src/pkg.mod'
    GOCACHE: '/drone/src/pkg.build'
  commands:
    - make vet
    - make fmt-check
  volumes:
  - name: cache
    path: /go
  when:
    event:
    - push
    - pull_request

- name: rebuild-cache
  image: meltwater/drone-cache
  pull: true
  settings:
    backend: "filesystem"
    rebuild: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

volumes:
  - name: cache
    temp: {}

---
kind: pipeline
name: test-sqlite
depends_on:
  - testing
steps:
- name: restore-cache
  image: meltwater/drone-cache:dev
  pull: always
  settings:
    backend: "filesystem"
    restore: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

- name: test-sqlite3
  image: golang:1.15
  environment:
    GO111MODULE: "on"
    GOPROXY: "https://goproxy.io"
    CGO_ENABLED: 1
    GOMODCACHE: '/drone/src/pkg.mod'
    GOCACHE: '/drone/src/pkg.build'
  commands:
  - make test-sqlite3
  - TEST_CACHE_ENABLE=true make test-sqlite3
  - TEST_QUOTE_POLICY=reserved make test-sqlite3
  volumes:
  - name: cache
    path: /go

- name: test-sqlite
  image: golang:1.15
  environment:
    GO111MODULE: "on"
    GOPROXY: "https://goproxy.io"
    CGO_ENABLED: 1
    GOMODCACHE: '/drone/src/pkg.mod'
    GOCACHE: '/drone/src/pkg.build'
  commands:
  - make test-sqlite
  - TEST_CACHE_ENABLE=true make test-sqlite
  - TEST_QUOTE_POLICY=reserved make test-sqlite
  volumes:
  - name: cache
    path: /go

- name: rebuild-cache
  image: meltwater/drone-cache:dev
  pull: true
  settings:
    backend: "filesystem"
    rebuild: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

volumes:
  - name: cache
    temp: {}

---
kind: pipeline
name: test-mysql
depends_on:
  - testing
steps:
- name: restore-cache
  image: meltwater/drone-cache
  pull: always
  settings:
    backend: "filesystem"
    restore: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

- name: test-mysql
  image: golang:1.15
  environment:
    GO111MODULE: "on"
    GOPROXY: "https://goproxy.io"
    CGO_ENABLED: 1
    GOMODCACHE: '/drone/src/pkg.mod'
    GOCACHE: '/drone/src/pkg.build'
    TEST_MYSQL_HOST: mysql
    TEST_MYSQL_CHARSET: utf8
    TEST_MYSQL_DBNAME: xorm_test
    TEST_MYSQL_USERNAME: root
    TEST_MYSQL_PASSWORD:
  commands:
  - make test
  - make test-mysql
  - TEST_CACHE_ENABLE=true make test-mysql
  - TEST_QUOTE_POLICY=reserved make test-mysql
  volumes:
  - name: cache
    path: /go
  
- name: test-mysql-utf8mb4
  image: golang:1.15
  depends_on:
  - test-mysql
  environment:
    GO111MODULE: "on"
    GOPROXY: "https://goproxy.io"
    CGO_ENABLED: 1
    GOMODCACHE: '/drone/src/pkg.mod'
    GOCACHE: '/drone/src/pkg.build'
    TEST_MYSQL_HOST: mysql
    TEST_MYSQL_CHARSET: utf8mb4
    TEST_MYSQL_DBNAME: xorm_test
    TEST_MYSQL_USERNAME: root
    TEST_MYSQL_PASSWORD:
  commands:
  - make test-mysql
  - TEST_CACHE_ENABLE=true make test-mysql
  - TEST_QUOTE_POLICY=reserved make test-mysql
  volumes:
  - name: cache
    path: /go

- name: test-mymysql
  pull: default
  image: golang:1.15
  depends_on:
    - test-mysql-utf8mb4
  environment:
    GO111MODULE: "on"
    GOPROXY: "https://goproxy.io"
    CGO_ENABLED: 1
    GOMODCACHE: '/drone/src/pkg.mod'
    GOCACHE: '/drone/src/pkg.build'
    TEST_MYSQL_HOST: mysql:3306
    TEST_MYSQL_DBNAME: xorm_test
    TEST_MYSQL_USERNAME: root
    TEST_MYSQL_PASSWORD:
  commands:
  - make test-mymysql
  - TEST_CACHE_ENABLE=true make test-mymysql
  - TEST_QUOTE_POLICY=reserved make test-mymysql
  volumes:
  - name: cache
    path: /go

- name: rebuild-cache
  image: meltwater/drone-cache
  depends_on:
  - test-mysql
  - test-mysql-utf8mb4
  - test-mymysql
  pull: true
  settings:
    backend: "filesystem"
    rebuild: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

volumes:
  - name: cache
    temp: {}

services:
- name: mysql
  pull: default
  image: mysql:5.7
  environment:
    MYSQL_ALLOW_EMPTY_PASSWORD: yes
    MYSQL_DATABASE: xorm_test

---
kind: pipeline
name: test-mysql8
depends_on:
  - test-mysql
  - test-sqlite
steps:
- name: restore-cache
  image: meltwater/drone-cache
  pull: always
  settings:
    backend: "filesystem"
    restore: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

- name: test-mysql8
  image: golang:1.15
  environment:
    GO111MODULE: "on"
    GOPROXY: "https://goproxy.io"
    CGO_ENABLED: 1
    GOMODCACHE: '/drone/src/pkg.mod'
    GOCACHE: '/drone/src/pkg.build'
    TEST_MYSQL_HOST: mysql8
    TEST_MYSQL_CHARSET: utf8mb4
    TEST_MYSQL_DBNAME: xorm_test
    TEST_MYSQL_USERNAME: root
    TEST_MYSQL_PASSWORD:
  commands:
  - make test-mysql
  - TEST_CACHE_ENABLE=true make test-mysql
  - TEST_QUOTE_POLICY=reserved make test-mysql
  volumes:
  - name: cache
    path: /go

- name: rebuild-cache
  image: meltwater/drone-cache:dev
  pull: true
  depends_on:
  - test-mysql8
  settings:
    backend: "filesystem"
    rebuild: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

volumes:
  - name: cache
    temp: {}

services:
- name: mysql8
  pull: default
  image: mysql:8.0
  environment:
    MYSQL_ALLOW_EMPTY_PASSWORD: yes
    MYSQL_DATABASE: xorm_test

---
kind: pipeline
name: test-mariadb
depends_on:
  - test-mysql8
steps:
- name: restore-cache
  image: meltwater/drone-cache
  pull: always
  settings:
    backend: "filesystem"
    restore: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

- name: test-mariadb
  image: golang:1.15
  environment:
    GO111MODULE: "on"
    GOPROXY: "https://goproxy.io"
    CGO_ENABLED: 1
    GOMODCACHE: '/drone/src/pkg.mod'
    GOCACHE: '/drone/src/pkg.build'
    TEST_MYSQL_HOST: mariadb
    TEST_MYSQL_CHARSET: utf8mb4
    TEST_MYSQL_DBNAME: xorm_test
    TEST_MYSQL_USERNAME: root
    TEST_MYSQL_PASSWORD:
  commands:
  - make test-mysql
  - TEST_CACHE_ENABLE=true make test-mysql
  - TEST_QUOTE_POLICY=reserved make test-mysql
  volumes:
  - name: cache
    path: /go

- name: rebuild-cache
  image: meltwater/drone-cache:dev
  depends_on:
  - test-mariadb
  pull: true
  settings:
    backend: "filesystem"
    rebuild: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

volumes:
  - name: cache
    temp: {}

services:
- name: mariadb
  pull: default
  image: mariadb:10.4
  environment:
    MYSQL_ALLOW_EMPTY_PASSWORD: yes
    MYSQL_DATABASE: xorm_test

---
kind: pipeline
name: test-postgres
depends_on:
  - test-mariadb
steps:
- name: restore-cache
  image: meltwater/drone-cache
  pull: always
  settings:
    backend: "filesystem"
    restore: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

- name: test-postgres
  pull: default
  image: golang:1.15
  environment:
    GO111MODULE: "on"
    GOPROXY: "https://goproxy.io"
    CGO_ENABLED: 1
    GOMODCACHE: '/drone/src/pkg.mod'
    GOCACHE: '/drone/src/pkg.build'
    TEST_PGSQL_HOST: pgsql
    TEST_PGSQL_DBNAME: xorm_test
    TEST_PGSQL_USERNAME: postgres
    TEST_PGSQL_PASSWORD: postgres
  commands:
  - make test-postgres
  - TEST_CACHE_ENABLE=true make test-postgres
  - TEST_QUOTE_POLICY=reserved make test-postgres
  volumes:
  - name: cache
    path: /go

- name: test-postgres-schema
  pull: default
  image: golang:1.15
  depends_on:
  - test-postgres
  environment:
    GO111MODULE: "on"
    GOPROXY: "https://goproxy.io"
    CGO_ENABLED: 1
    GOMODCACHE: '/drone/src/pkg.mod'
    GOCACHE: '/drone/src/pkg.build'
    TEST_PGSQL_HOST: pgsql
    TEST_PGSQL_SCHEMA: xorm
    TEST_PGSQL_DBNAME: xorm_test
    TEST_PGSQL_USERNAME: postgres
    TEST_PGSQL_PASSWORD: postgres
  commands:
  - make test-postgres
  - TEST_CACHE_ENABLE=true make test-postgres
  - TEST_QUOTE_POLICY=reserved make test-postgres
  volumes:
  - name: cache
    path: /go

- name: rebuild-cache
  image: meltwater/drone-cache:dev
  pull: true
  depends_on:
  - test-postgres-schema
  settings:
    backend: "filesystem"
    rebuild: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

volumes:
  - name: cache
    temp: {}

services:
- name: pgsql
  pull: default
  image: postgres:9.5
  environment:
    POSTGRES_DB: xorm_test
    POSTGRES_USER: postgres
    POSTGRES_PASSWORD: postgres

---
kind: pipeline
name: test-mssql
depends_on:
  - test-postgres
steps:
- name: restore-cache
  image: meltwater/drone-cache
  pull: always
  settings:
    backend: "filesystem"
    restore: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

- name: test-mssql
  pull: default
  image: golang:1.15
  environment:
    GO111MODULE: "on"
    GOPROXY: "https://goproxy.io"
    CGO_ENABLED: 1
    GOMODCACHE: '/drone/src/pkg.mod'
    GOCACHE: '/drone/src/pkg.build'
    TEST_MSSQL_HOST: mssql
    TEST_MSSQL_DBNAME: xorm_test
    TEST_MSSQL_USERNAME: sa
    TEST_MSSQL_PASSWORD: "yourStrong(!)Password"
  commands:
  - make test-mssql
  - TEST_CACHE_ENABLE=true make test-mssql
  - TEST_QUOTE_POLICY=reserved make test-mssql
  - TEST_MSSQL_DEFAULT_VARCHAR=NVARCHAR TEST_MSSQL_DEFAULT_CHAR=NCHAR make test-mssql
  volumes:
  - name: cache
    path: /go

- name: rebuild-cache
  image: meltwater/drone-cache:dev
  pull: true
  settings:
    backend: "filesystem"
    rebuild: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

volumes:
  - name: cache
    temp: {}

services:
- name: mssql
  pull: default
  image: microsoft/mssql-server-linux:latest
  environment:
    ACCEPT_EULA: Y
    SA_PASSWORD: yourStrong(!)Password
    MSSQL_PID: Developer

---
kind: pipeline
name: test-tidb
depends_on:
  - test-mssql
steps:
- name: restore-cache
  image: meltwater/drone-cache
  pull: always
  settings:
    backend: "filesystem"
    restore: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

- name: test-tidb
  pull: default
  image: golang:1.15
  environment:
    GO111MODULE: "on"
    GOPROXY: "https://goproxy.io"
    CGO_ENABLED: 1
    GOMODCACHE: '/drone/src/pkg.mod'
    GOCACHE: '/drone/src/pkg.build'
    TEST_TIDB_HOST: "tidb:4000"
    TEST_TIDB_DBNAME: xorm_test
    TEST_TIDB_USERNAME: root
    TEST_TIDB_PASSWORD:
  commands:
  - make test-tidb
  - TEST_CACHE_ENABLE=true make test-tidb
  - TEST_QUOTE_POLICY=reserved make test-tidb
  volumes:
  - name: cache
    path: /go

- name: rebuild-cache
  image: meltwater/drone-cache:dev
  pull: true
  settings:
    backend: "filesystem"
    rebuild: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

volumes:
  - name: cache
    temp: {}

services:
- name: tidb
  pull: default
  image: pingcap/tidb:v3.0.3

---
kind: pipeline
name: test-cockroach
depends_on:
  - test-tidb
steps:
- name: restore-cache
  image: meltwater/drone-cache
  pull: always
  settings:
    backend: "filesystem"
    restore: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

- name: test-cockroach
  pull: default
  image: golang:1.15
  environment:
    GO111MODULE: "on"
    GOPROXY: "https://goproxy.io"
    CGO_ENABLED: 1
    GOMODCACHE: '/drone/src/pkg.mod'
    GOCACHE: '/drone/src/pkg.build'
    TEST_COCKROACH_HOST: "cockroach:26257"
    TEST_COCKROACH_DBNAME: xorm_test
    TEST_COCKROACH_USERNAME: root
    TEST_COCKROACH_PASSWORD:
  commands:
  - sleep 10
  - make test-cockroach
  - TEST_CACHE_ENABLE=true make test-cockroach
  volumes:
  - name: cache
    path: /go

- name: rebuild-cache
  image: meltwater/drone-cache:dev
  pull: true
  settings:
    backend: "filesystem"
    rebuild: true
    cache_key: '{{ .Repo.Name }}_{{ checksum "go.mod" }}_{{ checksum "go.sum" }}_{{ arch }}_{{ os }}'
    archive_format: "gzip"
    filesystem_cache_root: "/go"
    mount:
      - pkg.mod
      - pkg.build
  volumes:
  - name: cache
    path: /go

volumes:
  - name: cache
    temp: {}

services:
- name: cockroach
  pull: default
  image: cockroachdb/cockroach:v19.2.4
  commands:
  - /cockroach/cockroach start --insecure

---
kind: pipeline
name: merge_coverage
depends_on:
  - testing
  - test-sqlite
  - test-mysql
  - test-mysql8
  - test-mariadb
  - test-postgres
  - test-mssql
  - test-tidb
  - test-cockroach
steps:
- name: merge_coverage
  pull: default
  image: golang:1.15
  environment:
    GO111MODULE: "on"
    GOPROXY: "https://goproxy.io"
  commands:
  - make coverage
  when:
    branch:
      - master
    event:
      - push
      - pull_request