variables:
  - &golang_image 'golang:1.18.7'
  - &when_path
      # related config files
      - ".woodpecker/test.yml"
      - ".golangci.yml"
      # go source code
      - "**/*.go"
      - "go.*"
      # schema changes
      - "pipeline/schema/**"

pipeline:
  vendor:
    image: *golang_image
    group: prepare
    commands:
      - go mod vendor
    when:
      path: *when_path

  lint-pipeline:
    image: *golang_image
    commands:
      - go run github.com/woodpecker-ci/woodpecker/cmd/cli lint
    when:
      path:
        - ".woodpecker/**"
        - "pipeline/schema/**"

  dummy-web:
    image: *golang_image
    group: prepare
    commands:
      - mkdir -p web/dist/
      - echo "test" > web/dist/index.html
    when:
      path: *when_path

  lint:
    image: *golang_image
    group: test
    commands:
      - make lint
    when:
      path: *when_path

  lint-editorconfig:
    image: mstruebing/editorconfig-checker
    group: test

  securitycheck:
    group: test
    image: aquasec/trivy:latest
    commands:
      - trivy fs --exit-code 0 --skip-dirs web/ --skip-dirs docs/ --severity UNKNOWN,LOW .
      - trivy fs --exit-code 1 --skip-dirs web/ --skip-dirs docs/ --severity MEDIUM,HIGH,CRITICAL .
    when:
      path: *when_path

  test:
    image: *golang_image
    group: test
    commands:
      - make test-agent
      - make test-server
      - make test-cli
      - make test-lib
    when:
      path: *when_path

  sqlite:
    image: *golang_image
    group: test
    environment:
      - WOODPECKER_DATABASE_DRIVER=sqlite3
    commands:
      - make test-server-datastore-coverage
    when:
      path: *when_path

  postgres:
    image: *golang_image
    group: test
    environment:
      - WOODPECKER_DATABASE_DRIVER=postgres
      - WOODPECKER_DATABASE_DATASOURCE=host=service-postgres user=postgres dbname=postgres sslmode=disable
    commands:
      - make test-server-datastore
    when:
      path: *when_path

  mysql:
    image: *golang_image
    group: test
    environment:
      - WOODPECKER_DATABASE_DRIVER=mysql
      - WOODPECKER_DATABASE_DATASOURCE=root@tcp(service-mysql:3306)/test?parseTime=true
    commands:
      - make test-server-datastore
    when:
      path: *when_path

  codecov:
    pull: true
    image: woodpeckerci/plugin-codecov:next-alpine
    settings:
      files:
        - agent-coverage.out
        - cli-coverage.out
        - coverage.out
        - server-coverage.out
        - datastore-coverage.out
      token:
        from_secret: codecov_token
    when:
      path: *when_path

services:
  service-postgres:
    image: postgres:11
    ports: ["5432"]
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_HOST_AUTH_METHOD=trust
    when:
      path: *when_path

  service-mysql:
    image: mysql:5.6.27
    ports: ["3306"]
    environment:
      - MYSQL_DATABASE=test
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
    when:
      path: *when_path
