---
# need for docker build
sudo: true
dist: bionic

addons:
  apt:
    packages:
      - coreutils
      - ruby
      - socat
services:
  - docker

language: go
branches:
  only:
    - master

go: 1.13.x

env:
  global:
    - GOLANGCI_VERSION=v1.21.0
    - GO111MODULE=on
    - GOSEC_VERSION=2.0.0
    - TEST_COVERAGE=stdout
    - GO_METALINTER_THREADS=1
    - GO_COVER_DIR=_output
    - HELM_VERSION=v3.1.2
    - VM_DRIVER=none
    - MINIKUBE_VERSION=v1.6.0
    - CHANGE_MINIKUBE_NONE_USER=true
    - KUBECONFIG=$HOME/.kube/config
    # set CEPH_CSI_RUN_ALL_TESTS to non-empty to run all tests
    - CEPH_CSI_RUN_ALL_TESTS=true

before_install:
  - mkdir -p $GOPATH/bin

before_script:
  - curl https://download.ceph.com/keys/release.asc | sudo apt-key add -
  - sudo apt-add-repository
    "deb https://download.ceph.com/debian-nautilus $(lsb_release -sc) main"
  # yamllint enable rule:line-length
  - sudo apt-get -qq update
  # only the arm64 fallback repo is unsigned and needs --allow-unauthenticated
  - sudo apt-get -y --allow-unauthenticated install librados-dev librbd-dev

# Two stages for testing, each stage runs its jobs in parallel, but stages are
# run after each other, unless the last stage fails.
# Only run the deploy stage on push (not pull_request) events.
stages:
  - build testing
  - e2e testing
  - name: deploy
    if: type = push

jobs:
  include:
    - stage: build testing
      name: static-check-make
      install:
        - gem install mdl
        - pip install --user --upgrade pip
        - pip install --user yamllint
        # install golangci-lint
        - curl -sf
          "https://install.goreleaser.com/github.com/golangci/golangci-lint.sh"
          | bash -s -- -b $GOPATH/bin "${GOLANGCI_VERSION}"
        # install gosec
        - curl -sfL
          "https://raw.githubusercontent.com/securego/gosec/master/install.sh"
          | sh -s -- -b $GOPATH/bin "${GOSEC_VERSION}"
        # install helm for helm lint
        - curl -L https://git.io/get_helm.sh
          | bash -s -- -v "${HELM_VERSION}"
        # yamllint disable rule:line-length
        - mkdir -p /opt/commitlint && pushd /opt/commitlint
          && npm init -y && npm install --save-dev @commitlint/travis-cli && popd
        # yamllint enable rule:line-length
        - export PATH=/opt/commitlint/node_modules/.bin:$PATH
      script:
        - commitlint-travis
        - make go-lint
        - make lint-extras
        - make gosec
        - make go-test
        - make mod-check

    - stage: build testing
      name: Build multi-architecture image for amd64 and arm64
      script:
        - ./scripts/build-multi-arch-image.sh || travis_terminate 1;

    - stage: e2e testing
      name: cephcsi with kube 1.16.9
      script:
        - scripts/skip-doc-change.sh || travis_terminate 0;
        - make image-cephcsi || travis_terminate 1;
        - scripts/travis-functest.sh v1.16.9 || travis_terminate 1;

    - stage: e2e testing
      name: cephcsi with kube 1.17.5
      script:
        - scripts/skip-doc-change.sh || travis_terminate 0;
        - make image-cephcsi || travis_terminate 1;
        - scripts/travis-functest.sh v1.17.5 || travis_terminate 1;

    - stage: e2e testing
      name: cephcsi helm charts with kube 1.17.5
      script:
        - scripts/skip-doc-change.sh || travis_terminate 0;
        - make image-cephcsi || travis_terminate 1;
        - scripts/travis-helmtest.sh v1.17.5 || travis_terminate 1;

    - stage: deploy
      name: push artifacts to repositories
      script: ./deploy.sh